У меня есть консольное приложение C sharp, которое несколько раз делает снимок экрана документа MS Word. Это прекрасно работает, но когда я размещаю это приложение на удаленной машине с Windows XP, оно прекрасно работает, пока я удален, т.е. мой удаленный рабочий стол виден, но если я запускаю свое приложение и покидаю удаленный рабочий стол (сворачивайте его, даже не log с которого я хочу сделать ) скриншоты, которые он делает, пустые!
Приложение «Снимок экрана» запускается службой, которая работает как пользователь SYSTEM.
Как сохранить графический интерфейс для окон, даже если нет подключенных пользователей?
Вот код, который я использую:
public Image CaptureWindow(IntPtr handle)
{
// get te hDC of the target window
IntPtr hdcSrc = User32.GetWindowDC(handle);
// get the size
User32.RECT windowRect = new User32.RECT();
User32.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 = GDI32.CreateCompatibleDC(hdcSrc);
// create a bitmap we can copy it to,
// using GetDeviceCaps to get the width/height
IntPtr hBitmap = GDI32.CreateCompatibleBitmap(hdcSrc, width, height);
// select the bitmap object
IntPtr hOld = GDI32.SelectObject(hdcDest, hBitmap);
// bitblt over
GDI32.BitBlt(hdcDest, 0, 0, width, height, hdcSrc, 0, 0, GDI32.SRCCOPY);
// restore selection
GDI32.SelectObject(hdcDest, hOld);
// clean up
GDI32.DeleteDC(hdcDest);
User32.ReleaseDC(handle, hdcSrc);
// get a .NET image object for it
Image img = Image.FromHbitmap(hBitmap);
// free up the Bitmap object
GDI32.DeleteObject(hBitmap);
return img;
}
Обновление
В настоящее время я использую PrintWindow, единственное, что наиболее близко подошло, когда ему удается захватить оконную раму (т.е. кнопки свертывания, максимизации и закрытия), но внутренняя часть черная.
Несмотря на то, что он не работал полностью, он доказал мне, что можно создать изображение из дескриптора окна, в то время как приложение даже невидимо для пользователя.