2010-05-26 1287 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。