关闭/打开显示器:无法打开

时间:2014-07-29 08:30:04

标签: winapi

我在google上发现了这个:

版本1:

SendMessage(HWND_BROADCAST, WM_SYSCOMMAND, SC_MONITORPOWER, 2); //turn off
SendMessage(HWND_BROADCAST, WM_SYSCOMMAND, SC_MONITORPOWER, -1);  //turn on

第2版:

HWND h = FindWindow(0, 0);
SendMessage(h, WM_SYSCOMMAND, SC_MONITORPOWER, 2);
SendMessage(h, WM_SYSCOMMAND, SC_MONITORPOWER, -1);

在我的笔记本电脑上(Win8.1 + Visual Studio 2010): 对于这两个版本,岔路都有效,但是转弯不起作用。当执行turnon代码时,屏幕会立即打开然后再关闭。

另一个有趣的事情: 在我的桌面(Win8.1 + VS2013)上,程序将停留在版本1的任何一行。但是,它可以通过版本2.关闭工作,但打开完全无效。

1 个答案:

答案 0 :(得分:5)

由于Windows 8具有更高级的节能功能,因此WM_SYSCOMMAND SC_MONITORvoid Main( object ) { int MOUSEEVENTF_MOVE = 0x0001; mouse_event(MOUSEEVENTF_MOVE, 0, 1, 0, UIntPtr.Zero); System.Threading.Thread.Sleep( 40 ); mouse_event(MOUSEEVENTF_MOVE, 0, -1, 0, UIntPtr.Zero); } 似乎已被打破以唤醒显示器,而睡眠效果正常。

您也可以在核心系统级别触发小鼠标移动以正确触发唤醒,C#中的示例代码可以轻松移植到C ++:

mouse_event

Documentation。您正式使用SendInput,但{{1}}不会很快到达任何地方(自Vista以来它已被半推荐)。