Screenshot von minimiertem Fenster



  • Der Titel sagt es schon. Ich möchte einen Screenshot von einem minimierten
    Fenster holen. Das Fenster ist u.U. minimiert, was mir hier Probleme bereitet,
    da dann der Screenshot nicht geholt werden kann. Evtl. mache ich dabei
    auch etwas falsch. Ich dachte erst evtl. muss ich GetWindowRect verwenden,
    aber auch das gibt mir den Screenshot nicht in der Zwischenablage aus.

    RECT rc;
    	HWND hwnd = ::FindWindow(NULL, TEXT("Rechner"));
    	if (hwnd == NULL)
    	{
    
    		MessageBox("Fenster nicht gefunden");
    	}
    
    	//create
    	HDC hdcScreen = ::GetDC(NULL);
    	HDC hdc = CreateCompatibleDC(hdcScreen);
    	::GetClientRect(hwnd,&rc);
    
    	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);
    

  • Mod

    Das ist so nicht möglich. Du kannst zwar veranlassen ein Fenster seinen Inhalt in einen DC ausgeben zu lassen, aber es geht Dir ja wahrscheinlich um die Ansicht der gesamten Anwendung.
    Man kann IMHO auf keine "garantiert funktionierende Weise" einen Screenshot von einem minimierten Fenster machen.



  • hmm.... Ich hab mich auch schon intensiver mit diesem Thema beschäftigt und bin zu dem ergebnis gekommen, dass es in dem RICHTIGEM minimierten Zustand nicht geht (die pixelfarben müssen schon in die Memory geladen werden). Jedoch kann man wie bei einer art virtuellem pc einen anderen desktop(anderes DC) vorgaukeln auf den man sich das programm malen lässt und diesen DC untersuchen.
    Man schickt dann kurz vor dem auslesen eine Windows Message mit Paint an das programm, liest dann aus und fertig 🙂

    denke, da es bei dir einfach Zweck ist während dessen etwas anderes machen zu können sollte diese Methode für dich gehen.

    Ich habe dies Idee bis jetzt aber noch nicht realisiert und bin mir auch nur zu 80% sicher, dass es so funktionieren könnte aber wenn du dich da lange genug hinterklemmst.... wer weiß 🙂
    wünsche viel erfolg und good luck!


Anmelden zum Antworten