关闭远程 PC 上的显示器

Posted

技术标签:

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

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

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

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

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

【问题讨论】:

不,用户始终处于控制之中。你想隐藏什么? 【参考方案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。

【讨论】:

以上是关于关闭远程 PC 上的显示器的主要内容,如果未能解决你的问题,请参考以下文章

通过 PC 远程控制 Android 的应用 -- 可以将手机屏幕投射显示到电脑上

Google cast 远程显示演示文稿被立即关闭

所有 Windows PC 显示器上的每英寸像素数是标准的吗? GetDeviceCaps WinAPI 调用中的 (LogPixelsX)

在visual studio 2008中使用c#.net远程连接存储在服务器上的mysql数据库[关闭]

通过命令行关闭省电选项

电脑出现远程桌面控制连接(显示灰色无法更改)怎样关闭