| |
|
|
Melanie Brayer | Ciao,
Ich schreibe noch an einer Shell und tüftel gerade an einem Task-/Window-Manager al a MacOS. Das vollgende Problem ergibt sich, wenn ich eine direkte copie des DCs direkt mit den Windows-APIs oder mit startpaint versuche: Der Fenster-Snapshot enthält auch teile eines übergeordneten Fensters, was ich aber nicht will, da ich nur ein Bild eines spezielles Fensters haben will.
Das Fenster in den Vordergrund zu holen ist ein wenig schlecht, da der Snapshot in gewissen Intervallen aktuallisiert werden soll. Wer hat da Ideen, die zur lösung beitragen? |
|
|
| mele (¯`·.¸¸.{ WinXP Pro, XProfan9, XPIA }.¸¸.·´¯)
<Bugs zählen ist besser als Schafe zählen, da der Computer nur so schlau ist wie der der Mensch der ihn bedient.> | 12.12.2005 ▲ |
|
|
|
|
| Tjo Melle also nach meiner Theorie geht das leider garnicht was Du möchtest. Windows grundsätzlich speichert kein Abbild eines Fensters. Windows sagt lediglich den Controls das sie sich neuzeichnen sollen - bzw. welche Bereiche.
Das Grundsätzlich ist juristisch zu verstehen - was demzufolge nicht immer heißen soll, sondern ausgenommen Aussnahmen.
Diese Aussnahmen sind jedoch stark APP-Abhängig - was Dir leider demzufolge nix nutzt.
Sollte ich mich irren so bitte ich um Korrektur.
Bis denne, David. |
|
|
| |
|
|
|
| Hab mich noch nicht mit GetWindowDC BitBlit beschäftigt - laß mal deine Anfänge sehen, ich Augenblick sehe ich nicht, warum das nicht gehen sollte...
Wenn zwei nachdenken, kommt vielleicht was vernünftiges dabei heraus. |
|
|
| |
|
|
|
Frank Abbing | Hi,
ich hab das vor einiger Zeit auch ansatzweise versucht, bin aber zu no zufriedenstellenden Ergebniss gekommen. Was ich noch nicht versucht hatte, war ein DIB eines HDCs eines Controls/Windows zu erstellen und das DIB auf einen neu erzeugten HDC zu kopieren. Könntest du am einfachsten testen, wenn du mal die ProSpeed.dll dazunimmst. Dann kannst dus auch sofort speichern. Nur circa den HCD geht - vermute ich - gar nicht. |
|
|
| |
|
|
|
| In der Art hatte ich mir das auch gedacht... Das Speichern ist ohne zusätzliche DLL etwas aufwendig. Wenn ich mehr Zeit hätte, würde ichs mal mit der ProSpeed testen. Bin sehr gespannt, ob es geht... |
|
|
| |
|
|
|
| Geht leider nicht und hat auch nichts mit der jeweiligen Anwendung zu tun. Da scheint nur das im DC zu stehen, was wirklich sichtbar ist - schade ... Getestet mit GetWindowDC, BitBlt und Startpaint -1.
Besten Dank nochmals an Frank - mit deiner Aiuto war der benötigte Quelltext nur ein paar Zeilen lang... |
|
|
| |
|
|
|
| Da Melanie hier keinen Quelltext gepostet hat, tue ichs mal. so kann jeder mitdenken und selbst tüfteln: KompilierenMarkierenSeparierenCLS
DEF @GetDC(1) !USER32,GetDC
DEF @GetWindowDC(1) !USER32,GetWindowDC
DEF @CreateCompatibleBitmap(3) !GDI32,CreateCompatibleBitmap
DEF @BitBlt(9) !GDI32,BitBlt
Def @ReleaseDC(2) !USER32,ReleaseDC
Declare Dialog&,WinDC&,MEMDC&,HBITMAP&
AddWindows
LET Dialog&=@Control(DIALOG,Dialog,$D0C80000,30,30,300,300,%Desktop,4000,%HINSTANCE)
LET Dialog&=@FindWindow(@ListBox$(Fitte Fenster auswählen,3))
If Dialog&<>0
LET WINDC&=@GetWindowDC(Dialog&)
MCLS @Width(Dialog&)+10,@Height(Dialog&)+10
Startpaint -1
@SetActiveWindow(Dialog&)
Sleep 1000
LET MEMDC&=%HDC
LET HBITMAP&=@CreateCompatibleBitmap(MEMDC&,@Width(Dialog&),@Height(Dialog&))
@BitBlt(MEMDC&,0,0,@Width(Dialog&),@Height(Dialog&),WINDC&,0,0,$00CC0020)
@ReleaseDC(Dialog&,WINDC&)
Endpaint
MCOPYBMP 0,0-@Width(Dialog&),@Height(Dialog&)>0,0;0
Sleep 1000
@SetActiveWindow(%HWND)
While 0=0
Waitinput
wend
endif
Salve. |
|
|
| |
|
|
|
Michael Wodrich | |
|
| Programmieren, das spannendste Detektivspiel der Welt. | 16.12.2005 ▲ |
|
|
|
|
| Nein, bloß falsch kopiert, hab mich heute schon ein paar mal so ausgetrickts - sehe einfach nicht mehr, was ich da auf dem Bildschirm mache .. |
|
|
| |
|
|
|
| Hoffentlich habe ich jetzt wenigstens den richtigen Quelltext erwischt |
|
|
| |
|
|