Screenshots erstellen
-
Hallo ihr,
habe mal wieder ein Problem, diesmal mit den Screenshots, ich habe mir beide Beispiele aus der FAQ angeschaut und beide funktionieren nur bedingt. Will ich nämlich von einem anderen Fenster als Form1->Handle ein Screenshot machen bekomme ich nur ein weißes bzw schwarzes Bild raus.
Der Code is folgender:
TCanvas* canvas = new TCanvas(); canvas->Handle = GetWindowDC(handle); TRect Dest = Image1->ClientRect; TRect Source; GetWindowRect(handle, (LPRECT)&Source); Source = Rect(0, 0, Source.Right - Source.Left, Source.Bottom - Source.Top); image->Canvas->CopyRect(Dest, canvas, Source); delete canvas;also identisch mit dem vom Beispiel2
Die Funktion die aufgerufen wird wenn ich auf den Button klicke ist folgende:
HWND hWnd; //handle herausfinden hWnd=FindWindow("Notepad",NULL); MakeScreenShot(hWnd, Image1);Ich habe jetzt einfach mal das handle von Notepad genommen. Änder ich die MakeScreenshot Zeile zum test in
MakeScreenShot(Form1->Handle, Image1);klappt alles einwandfrei, nehme ich andere handles bekomme ich weiße oder schwarze Screenshots raus. Wäre nett wenn mir einer sagen könnte wo der Fehler liegt

-
hat sich wohl erledigt, ich habe einfach eine kleine Wait eingebaut nachdem das Fenster in den Vordergrund erzwungen wird. Nun geht es
hWnd=FindWindow("Notepad",NULL); // Fensterhandle if(IsWindow(hWnd)) { SetForegroundWindow(hWnd); keybd_event(VK_F3, 0, 0, 0); keybd_event(VK_F3, 0, KEYEVENTF_KEYUP, 0); } Sleep(50); MakeScreenShot(hWnd, Image1);falls jemand irgendwann auch das problem haben sollte.
-
Geht das auch noch irgendwie hübscher? Kann mir jemand erklären warum man dieses Sleep braucht?? Ich hab ein Fenster was bereits im vordergrund ist und nach dem Drücken einer Taste soll ein Screenshot erzeugt werden, aber ich bekomme ebenfalls nur ein weißes Bild.
Edit: Wenn ich statt GetActiveWindow() GetForegroundWindow() benutze, dann gehts es.