2010-05-26 1285 views
1

我正在修復用於Windows的遠程控制(遠程桌面)應用程序中的一些錯誤。 還有一個功能,可以在遠程計算機上屏蔽空白 - 所有程序都保持不受影響,但查看遠程計算機顯示屏的人只會看到黑屏。關閉遠程PC上的顯示器

它通過發送未記錄的IoCtl請求IOCTL_VIDEO_SET_OUTPUT_DEVICE_POWER_STATE來實現。而且這個請求在Vista和更高版本上不起作用。

有沒有另外的方法去做我想要的?

實際上,SendMessage(-1,WM_SOMMAND,SC_MONITORPOWER,2)可以做到這一點,但如果有人對鍵盤/鼠標進行操作,屏幕會再次打開。

+0

不,用戶始終處於控制之中。你想隱藏什麼? – 2010-05-26 09:08:50

回答

1

您應該可以發送一個WM_SYSCOMMAND,並將SC_MONITORPOWER設置爲2.不幸的是,我不在具有測試功能的計算機上,所以我沒有嘗試過。

我相信,只要你觸摸鼠標/鍵盤,Windows會嘗試再次醒過來,但你應該能夠捕獲這些消息並重新發送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。