【问题标题】:Programmatically enter Connected Standby in C#在 C# 中以编程方式进入 Connected Standby
【发布时间】:2016-05-11 07:09:00
【问题描述】:

因此,似乎有很多问题询问如何检测系统何时进入连接待机状态,但我希望真正导致它发生

原因是,如果启用了 Connected Standby(不会做任何该死的事情),那么简单地在 C# 中调用 SetPowerState(Sleep) 方法将不再起作用,因此我的让系统进入睡眠状态的应用程序不再起作用。

注意:我不想唤醒系统,我想做相当于点击开始 -> 电源 -> 睡眠。

【问题讨论】:

    标签: c# windows


    【解决方案1】:

    所以...显然,因为当 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);
    } 
    

    当然,需要一些代码来确定哪种睡眠方法适合您的设备,但这将在别处讨论。

    【讨论】:

    • 以上更易读:SendMessage(HWND_BROADCAST, WM_SYSCOMMAND, SC_MONITORPOWER, 2);
    【解决方案2】:

    这里已经回答了这个问题: https://stackoverflow.com/a/37032188/2277323

    不要这样做:

    Process.Start("rundll32.exe", "powrprof.dll,SetSuspendState 0,1,0");
    

    因为它会调用未定义的行为,并可能使计算机进入休眠状态。 (谢谢 CherryDT)。

    【讨论】:

    • 我会再检查一下,但据我回忆,这就是我所说的在支持 S0 的系统上不起作用。
    猜你喜欢
    • 1970-01-01
    • 2011-08-19
    • 1970-01-01
    • 2016-10-29
    • 2011-04-13
    • 2019-02-12
    • 2016-10-23
    • 1970-01-01
    • 2011-09-26
    相关资源
    最近更新 更多