如何在电源设置关闭后唤醒Windows显示器?

3
所以我的Vista机器设置为在10分钟后关闭显示器。(注意:机器没有挂起或休眠)
我有一个运行中的.Net应用程序,需要在指定时间“唤醒”系统。作为人类,您只需移动鼠标或按键即可。如何通过编程实现这一点?
我尝试过:编程设置光标;使用“SendKeys”;甚至是调用CreateWaitableTimer来解除挂起(尽管它没有挂起),希望会触发什么东西。
理想情况下,c#代码会很棒,但正确的Win API也足够了。
谢谢。
1个回答

3

您应该能够通过发送系统命令消息来控制显示器电源,如下所示。请注意,这在XP上进行了测试,Vista可能会有一些更改,因此您需要进行测试并让我们知道。

这段代码是VB的,但您可以看到它使用的Win32 API调用。您需要向函数传递一个窗口句柄,因此您的代码需要创建一个窗口来处理消息(只需将其传递给默认的窗口处理函数即可)。

Const SC_MONITORPOWER As Integer = &HF170
Const WM_SYSCOMMAND As Short = &H112S
Private Function SendMessage(
    ByVal Handle As Int32,
    ByVal wMsg As Int32,
    ByVal wParam As Int32,
    ByVal lParam As Int32) As Int32
End Function
Sub MonStandBy(hWnd as Int32)
    SendMessage(hWnd, WM_SYSCOMMAND, SC_MONITORPOWER, 1)
End Sub
Sub MonOff(hWnd as Int32)
    SendMessage(hWnd, WM_SYSCOMMAND, SC_MONITORPOWER, 2)
End Sub
Sub MonOn(hWnd as Int32)
    SendMessage(hWnd, WM_SYSCOMMAND, SC_MONITORPOWER, -1)
End Sub

从我的测试来看,似乎一个有效的窗口句柄并不是必需的。我们可以简单地将HWND_BROADCAST作为hWnd传递。 请参阅此答案:http://stackoverflow.com/a/42393472/1468842 - Opmet
据其他人说,这种方法无法在Windows 7+中唤醒显示器。您可能需要查看这个答案:https://dev59.com/hnRB5IYBdhLWcg3wH0SW#14698416。 - Doin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接