2010-05-26 4 views
1

Я исправляю некоторые ошибки в приложении для удаленного управления (для удаленного рабочего стола) для Windows. И есть функция, которую вы можете пустым экраном на удаленной машине - все программы продолжают работать без изменений, но человек, который смотрит на дисплей на удаленном ПК, видит только черный экран.Отключить отображение на удаленном ПК

Он реализуется путем отправки запроса IoCtl IOCTL_VIDEO_SET_OUTPUT_DEVICE_POWER_STATE, который недокументирован. И этот запрос не работает на Vista и выше.

Есть ли другие способы сделать то, что я хочу?

Фактически, SendMessage(-1,WM_SOMMAND,SC_MONITORPOWER,2) выполняет трюк, но экран снова включается, если кто-то защелкивает клавиатуру/мышь.

+0

Нет, пользователь всегда находится под контролем. Что ты пытаешься скрыть? –

ответ

1

Вы должны иметь возможность отправить WM_SYSCOMMAND с установкой SC_MONITORPOWER в 2. К сожалению, я не на компьютере с возможностями тестирования, поэтому я не пробовал его.

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

LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam){ 
    switch (msg){ 
     ... 
     case WM_SYSCOMMAND: 
      switch (wParam){ 
       case SC_MONITORPOWER: 
       return 2; 
      } 
     break; 
     ... 
    } 
} 

Пожалуйста, обратите внимание, что это не проверяется.

0

Вы можете попробовать использовать клавиатуру и мышь низкого уровня (что должно быть у приложения удаленного рабочего стола). Убедитесь, что это низкий уровень, то есть SetWindowsHookEx(WH_KEYBOARD_LL) и SetWindowsHookEx (WH_MOUSE_LL).

Внутри вашей функции обратного вызова крючками:

  • НЕ ЗВОНИТЬ CallNextHookEx()
  • возвращение -1 в LowLevelKeyboardProc (который вы должны реализовать). Сделайте то же самое для LowLevelMouseProc.

ПРЕДУПРЕЖДЕНИЕ: Это отключит клавиатуру (даже если он не работает должным образом) до кода заколлирует CallNextHookEx() и возвращает 0 в ваших процедур обратного вызова.