【问题标题】:Turn off the display on remote PC关闭远程 PC 上的显示器
【发布时间】:2010-05-26 07:46:41
【问题描述】:

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

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

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

事实上,SendMessage(-1,WM_SOMMAND,SC_MONITORPOWER,2) 可以解决问题,但如果有人触摸键盘/鼠标,屏幕就会重新打开。

【问题讨论】:

  • 不,用户始终处于控制之中。你想隐藏什么?

标签: c++ windows drivers ioctl


【解决方案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;
        ...
    }
}

请注意,这未经测试。

【讨论】:

    【解决方案2】:

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

    在你的钩子回调函数中:

    • 请勿调用 CallNextHookEx()
    • return -1 在 LowLevelKeyboardProc(您必须实现)中。对 LowLevelMouseProc 执行相同的操作。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多