关闭远程 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 的应用 -- 可以将手机屏幕投射显示到电脑上
所有 Windows PC 显示器上的每英寸像素数是标准的吗? GetDeviceCaps WinAPI 调用中的 (LogPixelsX)