У меня есть консольное приложение C sharp, которое несколько раз делает снимок экрана документа MS Word. Он отлично работает, но когда я помещаю это приложение на удаленный компьютер с Windows XP, оно работает нормально, пока я удален, т.е. мой удаленный рабочий стол виден, но если я запускаю свое приложение и выхожу из удаленного рабочего стола (минимизируйте его, даже не журнал off, который я хочу сделать ) снимки экрана пустые!
Приложение Screenshot запускается службой, которая запускается как пользователь SYSTEM.
Как мне сохранить работоспособность графического интерфейса для Windows, даже если нет подключенных пользователей?
Вот код, который я использую:
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, который является единственным, что подошел ближе всего, так как ему удается захватить рамку окна (то есть кнопки свертывания, развертывания и закрытия), но внутренняя часть черная.
Хотя он не работал полностью, он доказал мне, что можно создать изображение из дескриптора окна, в то время как приложение даже не видно пользователю.