«Другими словами, подключение и запуск в сеансе консоли? Если нет, то это может быть обходной путь.
работал тестовый каркас GUI, который проводит тестирование интеграции сайта нашей компании на плановой основе. Когда что-то не получится, он сделает снимок экрана рабочего стола, между прочим. Это выполняется без присмотра вошедшего в систему пользователя на выделенном Windows Server 2008.
Проблема это снимок экрана на рабочем столе, с которого я отключил сеанс удаленного рабочего стола. Я получаю следующее исключение:
System.ComponentModel.Win32Exception (0x80004005): The handle is invalid
at System.Drawing.Graphics.CopyFromScreen(Int32 sourceX, Int32 sourceY, Int32 destinationX, Int32 destinationY, Size blockRegionSize, CopyPixelOperation copyPixelOperation)
at System.Drawing.Graphics.CopyFromScreen(Point upperLeftSource, Point upperLeftDestination, Size blockRegionSize)
at IntegrationTester.TestCaseRunner.TakeScreenshot(String name) in C:\VS2010\IntegrationTester\IntegrationTester\Config\TestCaseRunner.cs:line 144
at IntegrationTester.TestCaseRunner.StartTest() in C:\VS2010\IntegrationTester\IntegrationTester\Config\TestCaseRunner.cs:line 96
TakeScreenshot () Метод выглядит так:
public static void TakeScreenshot(string name)
{
var bounds = Screen.GetBounds(Point.Empty);
using (Bitmap bitmap = new Bitmap(bounds.Width, bounds.Height))
{
using (Graphics g = Graphics.FromImage(bitmap))
{
g.CopyFromScreen(Point.Empty, Point.Empty, bounds.Size);
}
bitmap.Save("someFileName", ImageFormat.Jpeg);
}
}
Я удостоверился, что заставка установлена на «Нет» без тайм-аута. Я также реализовал кусок кода, который делает несколько пинвоков дляпошли мышкой, надеясь, что это сгенерирует дескриптор настольной графики ... но нет
IntPtr hWnd = GetForegroundWindow();
if (hWnd != IntPtr.Zero)
SendMessage(hWnd, 0x200, IntPtr.Zero, IntPtr.Zero);
Любой совет приветствуется.