https://www.reddit.com/r/Dell/comments/h0r56s/getting_back_s3_sleep_and_disabling_modern/
原文
解决办法:
cmd管理员权限输入如下:
reg add HKLM\System\CurrentControlSet\Control\Power /v PlatformAoAcOverride /t REG_DWORD /d 0
原因:
1.win2004之后待机状态被重写 legacy standby改成了modern standby s0-s3逻辑重写
2.重写之后睡眠状态应该是? 猜测:默认s0
sleep 状态自动转s0 病状为 假断网假死机 实际上是系统冻结 将所有收到的指令在唤醒后才进行同步/异步处理 比如使用向日葵链接的时候一直连不上 或者向日葵连接上后使用win32api的关闭显示器指令后 再在向日葵内进行操作向日葵内显示也是冻结状态 但是当唤醒的时候其中操作就再次按步骤执行 网络适配器也并非断开重连 而是(陷入休眠状态?) 所以没有勾选自动重连 网络也会自动连上
3.执行上面cmd之前输入 POWERCFG /a 指令只会
显示s0可用 网络连接 但是我这里的网络连接直接是不可用的
而执行之后待机s3已经回来了 也就是关闭屏幕后 后台程序仍在运行而没有被挂起
ps:1.百度上所有修改休眠睡眠指令我都试过完全无效
2.关闭显示器的指令在win32api我目前只找到一个 我翻遍github也是同一个
无非是:
private void button1_Click(object sender, EventArgs e)
{
//关闭显示器
SendMessage(this.Handle, WM_SYSCOMMAND, SC_MONITORPOWER, 2);
SendMessage(this.Handle, WM_SYSCOMMAND, SC_MONITORPOWER, 1);
}
[DllImport("user32.dll")]
public static extern IntPtr SendMessage(IntPtr hWnd, uint msg, uint wParam, int lParam);
private const uint WM_SYSCOMMAND = 0x0112;
private const uint SC_MONITORPOWER = 0xF170;
我也想过 gpio获取显示屏的底层进行关闭而不触发win32api调用关闭显示器时候触发的sleep 睡眠任务
3.有个改CsEnabled注册表的 已经失效 谷歌上看到一个微软工程师说自从21h1之后 微软已经block 封禁了这种做法 所以改Csenabled是没用的 有些版本甚至已经删除了这个项
4.为什么我知道是sleep睡眠引起的问题:
微软论坛上看到有条指令: powercfg.exe /SleepStudy
这条指令是win2004重写再补全的 用于解决部分机器睡眠待机冲突的系统功耗日志
打开后是这样的:
昨天的记录 正是我昨天一直调试win11的日志
显示着每次一使用上面c#的关闭屏幕函数之后自动执行sleep的操作 然后自动网络适配器开始冻结无法联网
但是!!
当我把电池选项那边设成1分钟自动关闭屏幕之后 这种方法可以关闭屏幕 并且没有再次进入sleep状态 我也试过向日葵可以在关闭屏幕期间连接上去 可以确定是sleep其中出了问题
然后偶然看见了微软论坛上某位xps用户提问 工程师也是提到了2004中改写了sleep 其中s0-s3在某些机器会冲突 完全确定是sleep导致了这个问题
5.这玩意挺难搞 一气之下刚才直接打开全部搜索结果慢慢看
资料:1.Windows 10:对戴尔个人计算机上的睡眠和休眠问题进行故障排除 | Dell 中国
有时候指望百度那些复制几十次的回答 真是不可能解决这个问题