我正在修复Windows中用于远程控制(类似远程桌面)的应用程序中的一些错误。 并且有一项功能是你可以在远程机器上进行空白屏幕 - 所有程序都保持运行不受影响,但是在远程PC上查看显示器的人只能看到黑屏。
通过发送未记录的IoCtl请求IOCTL_VIDEO_SET_OUTPUT_DEVICE_POWER_STATE
来实现。此请求不适用于Vista及更高版本。
还有其他方法可以做我想要的吗?
事实上,SendMessage(-1,WM_SOMMAND,SC_MONITORPOWER,2)
可以解决问题,但如果有人用键盘/鼠标,屏幕会重新开启。
答案 0 :(得分:1)
您应该能够将SC_MONITORPOWER设置为2发送WM_SYSCOMMAND。不幸的是,我不在具有测试能力的计算机上,所以我没有尝试过。
我相信无论何时触摸鼠标/键盘,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;
...
}
}
请注意,这未经过测试。
答案 1 :(得分:0)
您可以尝试使用低级键盘和鼠标挂钩(远程桌面应用应该已经有)。确保它是低级别,即SetWindowsHookEx(WH_KEYBOARD_LL)和SetWindowsHookEx(WH_MOUSE_LL)。
在钩子回调函数中:
警告:这将禁用键盘(即使它无法正常工作),直到您的代码调用CallNextHookEx()并在回调过程中返回0。