Laden...

WPF-Dialog fehlt auf GDI-Screenshot des Desktops

Erstellt von AlexDozer vor 12 Jahren Letzter Beitrag vor 12 Jahren 1.233 Views
A
AlexDozer Themenstarter:in
54 Beiträge seit 2010
vor 12 Jahren
WPF-Dialog fehlt auf GDI-Screenshot des Desktops

Hallo zusammen,

ich benötige für meine Test-Applikation die Möglichkeit Screenshots zu machen. Das funktioniert auch gewissermaßen. Problem was ich habe ist das wenn ein Dialog offen ist sieht man dießen auf dem Screenshot nicht. Es handelt sich hierbei um WPF-Applikationen.

Ich habe schon folgende zwei Möglichkeiten ausprobiert:

IntPtr handle = GDI32.GetForegroundWindow();
IntPtr hdcSrc = User32.GetWindowDC(handle);

User32.RECT windowRect = new User32.RECT();
User32.GetWindowRect(handle, ref windowRect);

int width = windowRect.right - windowRect.left;
int height = windowRect.bottom - windowRect.top;

IntPtr hdcDest = GDI32.CreateCompatibleDC(hdcSrc);
IntPtr hBitmap = GDI32.CreateCompatibleBitmap(hdcSrc, width, height);
IntPtr hOld = GDI32.SelectObject(hdcDest, hBitmap);

GDI32.BitBlt(hdcDest, 0, 0, width, height, hdcSrc, 0, 0, GDI32.SRCCOPY);
GDI32.SelectObject(hdcDest, hOld);
GDI32.DeleteDC(hdcDest);

User32.ReleaseDC(handle, hdcSrc);
Image img = Image.FromHbitmap(hBitmap);
GDI32.DeleteObject(hBitmap);

_bitmaps.Add(new Bitmap(img));
Bitmap b = new Bitmap(SystemInformation.VirtualScreen.Width, SystemInformation.VirtualScreen.Height);
Graphics g = Graphics.FromImage(b);
g.CopyFromScreen(0, 0, 0, 0, b.Size);
g.Dispose();

_bitmaps.Add(b);

Bei beiden sieht man nicht die offenen Dialoge. Beide hab ich aus dem Internet. Hat jemand eine Lösung?

Gruß Alex

F
10.010 Beiträge seit 2004
vor 12 Jahren

Schonmal davon gehört das WPF auf DirectX aufbaut?
Und deshalb sind ScreenShots auch nicht mit GDI zu machen, sondern ebenfalls per DirectX.

A
AlexDozer Themenstarter:in
54 Beiträge seit 2010
vor 12 Jahren

Was ist aber mit dem Desktop? Es soll ja der ganze Bildschirm auf dem Screenshot zu sehen sein, nicht nur die Applikation. Funktioniert das dann noch mit DirectX?