【发布时间】:2016-05-11 07:09:00
【问题描述】:
因此,似乎有很多问题询问如何检测系统何时进入连接待机状态,但我希望真正导致它发生。
原因是,如果启用了 Connected Standby(不会做任何该死的事情),那么简单地在 C# 中调用 SetPowerState(Sleep) 方法将不再起作用,因此我的让系统进入睡眠状态的应用程序不再起作用。
注意:我不想唤醒系统,我想做相当于点击开始 -> 电源 -> 睡眠。
【问题讨论】:
因此,似乎有很多问题询问如何检测系统何时进入连接待机状态,但我希望真正导致它发生。
原因是,如果启用了 Connected Standby(不会做任何该死的事情),那么简单地在 C# 中调用 SetPowerState(Sleep) 方法将不再起作用,因此我的让系统进入睡眠状态的应用程序不再起作用。
注意:我不想唤醒系统,我想做相当于点击开始 -> 电源 -> 睡眠。
【问题讨论】:
所以...显然,因为当 S0 低功耗空闲可用时没有“睡眠”,这就是使计算机进入睡眠的传统方法不起作用的原因:该选项不可用。
基本上,电源菜单中的“睡眠”命令只是关闭显示屏,从而触发连接待机的其余部分。
所以,现有的告诉显示器关闭的代码将达到相同的效果,如下所示:
[DllImport("user32.dll")]
private static extern int SendMessage(int hWnd, int hMsg, int wParam, int lParam);
void doStandby()
{
//Turn off the monitor
SendMessage(0xFFFF,0x112,0xF170,2);
}
当然,需要一些代码来确定哪种睡眠方法适合您的设备,但这将在别处讨论。
【讨论】:
这里已经回答了这个问题: https://stackoverflow.com/a/37032188/2277323
不要这样做:
Process.Start("rundll32.exe", "powrprof.dll,SetSuspendState 0,1,0");
因为它会调用未定义的行为,并可能使计算机进入休眠状态。 (谢谢 CherryDT)。
【讨论】: