PrintWindow und MDI

10/09/2008 - 14:59 von Marco Maetzler | Report spam
Hallo NG,

Ich möchte gerne von einer Applikation welche im Hintergrund steht und làuft
(ganz verdeckt, halb verdeckt, minimiert, etc) eine Art Screenshot machen
sprich den Fensterinhalt auslesen

Hintergrund: Ich möchte einen Windows XP Task-Switcher bauen, bei welchem
man ein aktuelles Bild des Applikation sieht. So wie die Alt+Tab Funktion
oder die Win+Tab in Vista.

Ich spiele momentan mit der WinAPI Funktion "PrintWindow" herum welche mir
von Frank Dzaebel empfohlen wurde.

Es funktioniert alles wunderbar. Ich kriege den Inhalt aller Fenster ausser
von MDI Applikationen. Von MDI Applikationen bekomme ich immer nur ein
schwarzes Bild (6x6 Pixel).

Habe ich den falschen Handle (MainWindowHandle)? Oder muss ich an den Handle
der MDI childs rankommen?

Danke und Gruss,
Marco



[code]
public class MeineKlasse
{
[DllImport("user32.dll")]
private static extern bool PrintWindow(IntPtr hwnd, IntPtr hdcBlt, uint
nFlags);
[DllImport("user32.dll")]
private static extern int GetWindowRect(IntPtr hwnd, out RECT rc);


privat BitMap Test()
{
Process[] procs = Process.GetProcesses()
IntPtr p = procs[0].MainWindowHandle; //Nur als Beispiel. Hier sollte
man den MDI Prozess wàhlen

RECT rc;
GetWindowRect(p, out rc);

Bitmap bm = new Bitmap(rc.Right - rc.Left, rc.Bottom - rc.Top);
Graphics g = Graphics.FromImage(bm);
IntPtr hdc = g.GetHdc();

PrintWindow(p, hdc, 0);

g.ReleaseHdc(hdc);
g.Flush();
g.Dispose();

return bm;
}
}


[StructLayout(LayoutKind.Sequential)]
public struct RECT
{
public int Left;
public int Top;
public int Right;
public int Bottom;
}
[/code]
 

Lesen sie die antworten

#1 Harald M. Genauck
10/09/2008 - 17:04 | Warnen spam
Hallo Marco,

Ich möchte gerne von einer Applikation welche im Hintergrund steht
und làuft
(ganz verdeckt, halb verdeckt, minimiert, etc) eine Art Screenshot
machen
sprich den Fensterinhalt auslesen

Hintergrund: Ich möchte einen Windows XP Task-Switcher bauen, bei
welchem
man ein aktuelles Bild des Applikation sieht. So wie die Alt+Tab
Funktion
oder die Win+Tab in Vista.



Willst Du das als Herausforderung selber programmieren? Denn so etwas
für XP gibt es bereits in den (kostenlosen) Microsoft Powertoys für XP:
http://www.microsoft.com/windowsxp/...rtoys.mspx
- dort unter "Alt-Tab Replacement".


Viele Grüße

Harald M. Genauck

"VISUAL STUDIO one" - http://www.visualstudio1.de (Chefredakteur)
"ABOUT Visual Basic" - http://www.aboutvb.de (Herausgeber)

Ähnliche fragen