Screeshot von minimierten Fenster
-
Hallo,
ich suche eine Möglichkeit einen Screenshot von einem minimierten Fenster zu machen. Jetzt habe ich diesbezüglich schon gegooglet aber noch nichts passendes gefunden. Scheint doch trickreicher zu sein als nur eine Befehlszeile

Vieleicht hat ja jemand ein Beispiels-Code oder weiss wie man das machen kann. Ich hab den folgenden Code auf dem Internet schon mal gefunden aber damit kann man "nur" Screenshots von Fenstern erstellen die von anderen Fenstern verdeckt sind. Ich versteh allerdings nicht warum das dann mit minimierten Fenstern nicht geht (grübel grübel).
#include <windows.h> #include<stdio.h> int main() { RECT rc; HWND hwnd = FindWindow(TEXT("Notepad"), NULL); //the window can't be min if (hwnd == NULL) { return 0; } GetWindowRect(hwnd, &rc); //create HDC hdcScreen = GetDC(hwnd); HDC hdc = CreateCompatibleDC(hdcScreen); HBITMAP hbmp = CreateCompatibleBitmap(hdcScreen,rc.right-rc.left,rc.bottom-rc.top); SelectObject(hdc, hbmp); //Print to memory hdc PrintWindow(hwnd, hdc, PW_CLIENTONLY); //copy to clipboard OpenClipboard(NULL); EmptyClipboard(); SetClipboardData(CF_BITMAP, hbmp); CloseClipboard(); //release DeleteDC(hdc); DeleteObject(hbmp); ReleaseDC(NULL, hdcScreen); printf("Bitmap copied to Clipboard.....paste it in ms paint.."); getchar(); }Naja vieleicht kann mir hier jemand auf die Sprünge helfen.
viele grüsse, rommi
-
Man kann von minimierten Fenstern keine Screenshots machen!
-
Mit ein paar Trick's, geht das wunderbar !
-
spc23 schrieb:
Mit ein paar Trick's, geht das wunderbar !
Würde bei einigen meiner Programme zu 100% nicht gehen, da ich IsMinimized abfrage und in diesem Falle keine Daten mehr rendere... das machen viele Programme um Rechnerzeit zu sparen und durch das Programm in Hintergrund keine Performance zu klauen!
-
spc23 schrieb:
Mit ein paar Trick's, geht das wunderbar !
Hallo Zusammen,
also soweit ich das jetzt ergoogeln konnte gibt es Programme die das können. Auch der von mir reingestellte Code zeigt doch dass es nicht unbedingt notwendig ist dass das Fenster sichtbar (also von keinem Fenster überdeckt) ist um einen Screenshot davon zu erhalten, nur leider kapier ich nicht wie es wirklich funktioniert.@spc23, was meinst du mit Tricks? Meinst du das mit der Transparenz, irgendwo bin ich da auch schon drüber gestolpert beim googeln? Wäre nett wenn du ein bisserl mehr Infos schreiben könntest
Ich lade dich auch auf n Bier ein solltest du in München wohnen 
liebe grüsse, rommi
-
Würde bei einigen meiner Programme zu 100% nicht gehen, da ich IsMinimized abfrage@martin richter,
hab ich noch vergessen zu fragen. Meinst du dass es prinzipiell schon geht aber du es nur aus Performance-Gründen nicht machst
Ich verstehe deine Antwort nicht ganz.
Also mir geht es jetzt vordergründig nicht um die Performance sondern darum wie ich das hinbekomme. Also wenn du doch ne Lösung weisst dann bitte keine falsche Bescheidenheit
liebe grüsse, rommi
-
Hat keiner ein paar mehr Infos zu dem Thema? Ich hab jetzt am Wochenende weiter rum-gegoogelt aber noch keine Lösung gefunden. Auf dieser Seite habe ich ein C# Script gefunden dass ein minimiertes Fenster captured aber ich konnte es aber bisher nicht in C++ umsetzen
http://www.codeproject.com/KB/cs/CapturingMinimizedWindow.aspx
@spc23: wäre echt schön wenn du zu deinem Beitrag noch ein paar Infos hinzufügen könntest die mir weiterhelfen, danke!
viele grüsse, rommi
-
Fenster maximieren, dann Screenshot machen und wieder minimieren.
Der Codeproject-Kram schaltet zusätzlich noch Minimieren-Animations-Zeugs ab und sorgt dafür dass das Fenster beim maximieren transparent angezeigt wird.
Richtig zuverlässig und nicht halb gefuscht, geht das Screenshot erzeugen von minimierten Fenstern nicht.Ab Vista könnte dich dies evtl. interessieren:
http://msdn.microsoft.com/en-us/library/aa969541(VS.85).aspx
-
Hallo geeky,
danke für den Post. Also jetzt habe ich es zumindest schon mal geschafft einen Screenshot von einem minimierten Fenster zu erzeugen. Als Testfenster habe ich mal Notpad hergenommen. Das ganze läuft auch wirklich im Hintergrund ohne dass das minimierte Fenster mal kurz aufpoppt. Irgenwie stimmen aber die Masse nicht. Zum einen bekommen ich nur einen Teil des Fensters (na immerhin) und dann bekomme ich auch noch zusätlich einen schwarzen Anteil (ich schätze das ist irgendwie der Offset aus dem DC)...Also ich probier jetzt mal die Sache einzugrenzen sodass nur noch das Fenster in die Zwischenablage kopiert wird. Ich stell dann die Lösung hier rein, vieleicht weiss ja dann der eine oder andere noch mehr dazu oder hat einen Verbesserungsvorschlag.
gruss, rommi
-
Hallo Zusammen,
hatte leider wenig Zeit in den letzten Tagen
Also so richtig klappt das nicht. Ich habe mich halt an die Beschreibung von dieser Seite http://www.codeproject.com/KB/cs/CapturingMinimizedWindow.aspx gehalten und es für meine Zwecke in C++ umgesetzt. Im Nachhinein habe ich aber festgestellt dass es kein Screenshot eines "wirklich" minimierten Fenster ist.Das Fenster erscheint doch kurzzeitig auf dem Desktop zwar transparent (unsichtbar) aber leider mit all seinen Funktionen (Buttons, Steuerelemente, Dateimenü etc.) und diese Funktionen sind, obwohl das Fenster nicht sichtbar ist, trotzdem aktiv. D.h. es könnte schon mal passieren dass ich während des Screenshots auf ein Fensterelement klicke ohne das ich es merke weil ich ja das Fenster nicht sehe. Also keine saubere und gute Lösung! Na ja wenn sonst hier niemand noch ne Lösung hat dann lass ich das Thema.
liebe grüsse, rommi
-
Hi,
rommi schrieb:
D.h. es könnte schon mal passieren dass ich während des Screenshots auf ein Fensterelement klicke ohne das ich es merke weil ich ja das Fenster nicht sehe.
ist das Fenster wirklich so lange da? Ansonsten: Leg doch während des Screenshots einfach ein eigenes transparentes Fester über das Zielfenster (oder über den ganzen Desktop), das dann die Benutzereingaben "klaut".
-
Du könntest das Fenster aus dem sichtbarem Bereich schieben. Also bei einer Auflösung von 800x600 z.B. x auf 800.
-
Hallo Zusammen,
ja klar Paula warum in die Ferne schweifen wenn das Einfache so nahre liegt
Danke an Alle!gruss, rommi