1

我正在修复 Windows 远程控制(类似远程桌面)应用程序中的一些错误。还有一个功能是你可以在远程机器上黑屏——所有程序都保持运行不受影响,但是看着远程电脑上的显示器的人只能看到黑屏。

它是通过发送 IoCtl request 来实现的IOCTL_VIDEO_SET_OUTPUT_DEVICE_POWER_STATE,这是未记录的。而且此请求不适用于 Vista 及更高版本。

还有其他方法可以做我想做的事吗?

事实上,SendMessage(-1,WM_SOMMAND,SC_MONITORPOWER,2)确实有效,但如果有人触摸键盘/鼠标,屏幕会重新打开。

4

2 回答 2

1

You should be able to send a WM_SYSCOMMAND with the SC_MONITORPOWER set to 2. Unfortunately, I am not at a computer with testing abilities, so I haven't tried it out.

I believe that whenever you touch mouse/keyboard, windows tries to wake up again, but you should be able to trap those messages and resend the 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;
        ...
    }
}

Please note that this is not tested.

于 2010-05-26T08:01:30.773 回答
0

您可以尝试使用低级键盘和鼠标挂钩(远程桌面应用程序应该已经具备)。确保它是低级别的,即SetWindowsHookEx(WH_KEYBOARD_LL)和 SetWindowsHookEx(WH_MOUSE_LL)。

在你的钩子回调函数中:

  • 不要调用 CallNextHookEx()
  • 在 LowLevelKeyboardProc(您必须实现)中返回 -1 。对 LowLevelMouseProc 做同样的事情。

警告:这将禁用键盘(即使它不能正常工作),直到您的代码调用 CallNextHookEx() 并在回调过程中返回 0。

于 2011-01-02T22:36:15.887 回答