Скриншот безопасного рабочего стола - PullRequest
0 голосов
/ 29 сентября 2018

Я работаю с проектом совместного использования экрана. Я фиксирую экран рабочего стола, используя нижеприведенную функцию. Работает нормально.Но всякий раз, когда безопасный рабочий стол запрашивает повышение прав, .it возвращает черное / пустое изображение.

Но когда я отключаю защищенный рабочий стол из локальной политики безопасности. Это работает нормально.

Есть ли способ захвата защищенного рабочего стола без отключения локальной политики безопасности.

static Bitmap CaptureDesktop()
{
    SIZE size;
    Bitmap printscreen = null;

    size.cx = Win32Stuff.GetSystemMetrics
                     (Win32Stuff.SM_CXSCREEN);

    size.cy = Win32Stuff.GetSystemMetrics
              (Win32Stuff.SM_CYSCREEN);

    int width = size.cx; int height = size.cy;

    IntPtr hWnd = Win32Stuff.GetDesktopWindow();
    IntPtr hDC = Win32Stuff.GetDC(hWnd);
    if (hDC != IntPtr.Zero)
    {
        IntPtr hMemDC = GDIStuff.CreateCompatibleDC(hDC);
        if (hMemDC != IntPtr.Zero)
        {
            IntPtr m_HBitmap = GDIStuff.CreateCompatibleBitmap(hDC, width, height);
            if (m_HBitmap != IntPtr.Zero)
            {
                IntPtr hOld = (IntPtr)GDIStuff.SelectObject(hMemDC, m_HBitmap);
                GDIStuff.BitBlt(hMemDC, 0, 0, width, height, hDC, 0, 0, GDIStuff.SRCCOPY);
                GDIStuff.SelectObject(hMemDC, hOld);
                GDIStuff.DeleteDC(hMemDC);
                printscreen = System.Drawing.Image.FromHbitmap(m_HBitmap);
                GDIStuff.DeleteObject(m_HBitmap);
            }
        }
    }
    Win32Stuff.ReleaseDC(hWnd, hDC);

    return printscreen;
}

Редактировать :

  1. Exe Установлен в защищенном месте
  2. Exe имеет цифровую подпись

1 Ответ

0 голосов
/ 04 октября 2018

Чтобы получить содержимое экрана безопасного рабочего стола, ваше приложение должно удовлетворять некоторым специальным критериям:

  • оно должно работать под учетной записью SYSTEM, а не с учетной записью вошедшего в систему пользователя
  • он должен работать на рабочем столе Winlogon, а не на рабочем столе пользователя
  • он должен работать в качестве службы

Чтобы протестировать его, вы можете, например, использовать Инструмент SysInternals PsExec для запуска приложения в этом режиме:

PsExec /h /x /d /s "path_to\your_application.exe"

Переключатели /x и /s важны: они запускают процесс под учетной записью SYSTEM и на рабочем столе Winlogon.

Если вы не хотите использовать сторонние инструменты, вам нужно создать собственную службу Windows, которая будет выполнять снимки экрана Secure Desktop.

Исходный код PsExec отсутствует.доступно, но вы можете посмотреть исходный код инструмента PAExec - это альтернатива с открытым исходным кодом.

...