Скриншот свернутого окна - C#
Формулировка задачи:
Доброго времени, возник вопрос...
Можно ли снять скриншот свернутого окна?
Вот наработки.
Вызов.
В результате получаем черный экран... хотелось бы картинку свернутого приложения получить, помогите плиз.
Принимаються советы и рабочий код
static public class CaptureWindow { public static Image GetCaptureWindow(IntPtr handle) { // get te hDC of the target window IntPtr hdcSrc = User.GetWindowDC(handle); // get the size User.RECT windowRect = new User.RECT(); User.GetWindowRect(handle, ref windowRect); int width = windowRect.right - windowRect.left; int height = windowRect.bottom - windowRect.top; // create a device context we can copy to IntPtr hdcDest = GDI.CreateCompatibleDC(hdcSrc); // create a bitmap we can copy it to, // using GetDeviceCaps to get the width/height IntPtr hBitmap = GDI.CreateCompatibleBitmap(hdcSrc, width, height); // select the bitmap object IntPtr hOld = GDI.SelectObject(hdcDest, hBitmap); // bitblt over GDI.BitBlt(hdcDest, 0, 0, width, height, hdcSrc, 0, 0, GDI.SRCCOPY); // restore selection GDI.SelectObject(hdcDest, hOld); // clean up GDI.DeleteDC(hdcDest); User.ReleaseDC(handle, hdcSrc); // get a .NET image object for it Image img = Image.FromHbitmap(hBitmap); // free up the Bitmap object GDI.DeleteObject(hBitmap); return img; } /// <summary> /// Helper class containing Gdi32 API functions /// </summary> private class GDI { public const int SRCCOPY = 0x00CC0020; // BitBlt dwRop parameter [DllImport("gdi32.dll")] public static extern bool BitBlt(IntPtr hObject, int nXDest, int nYDest, int nWidth, int nHeight, IntPtr hObjectSource, int nXSrc, int nYSrc, int dwRop); [DllImport("gdi32.dll")] public static extern IntPtr CreateCompatibleBitmap(IntPtr hDC, int nWidth, int nHeight); [DllImport("gdi32.dll")] public static extern IntPtr CreateCompatibleDC(IntPtr hDC); [DllImport("gdi32.dll")] public static extern bool DeleteDC(IntPtr hDC); [DllImport("gdi32.dll")] public static extern bool DeleteObject(IntPtr hObject); [DllImport("gdi32.dll")] public static extern IntPtr SelectObject(IntPtr hDC, IntPtr hObject); } /// <summary> /// Helper class containing User32 API functions /// </summary> private class User { [StructLayout(LayoutKind.Sequential)] public struct RECT { public int left; public int top; public int right; public int bottom; } [DllImport("user32.dll")] public static extern IntPtr GetDesktopWindow(); [DllImport("user32.dll")] public static extern IntPtr GetWindowDC(IntPtr hWnd); [DllImport("user32.dll")] public static extern IntPtr ReleaseDC(IntPtr hWnd, IntPtr hDC); [DllImport("user32.dll")] public static extern IntPtr GetWindowRect(IntPtr hWnd, ref RECT rect); } }
if (HandleList.Count > 0) { panel1.BackgroundImage = CaptureWindow.GetCaptureWindow(HandleList.ElementAt(0)); }
Решение задачи: «Скриншот свернутого окна»
textual
Листинг программы
string Name_date = DateTime.Now.ToString("d.M.yyy HH.mm.ss"); //=========== делает скрин экрана =======================================// Bitmap printscreen = new Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height); Graphics graphics = Graphics.FromImage(printscreen as Image); graphics.CopyFromScreen(0, 0, 0, 0, printscreen.Size); //printscreen.Save(@"D:\\instal\данные весы\табель\data\printscreen_" + Name_date + "_.jpg", System.Drawing.Imaging.ImageFormat.Jpeg); printscreen.Save(Name_date_start + "\\" + "printscreen_" + Name_date + "_.jpg", System.Drawing.Imaging.ImageFormat.Jpeg); //=========== делает скрин экрана =======================================//
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д