You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Windows下通过代码关闭显示器时WinAPI返回0无效果如何解决

代码问题诊断与修复方案
  • 核心错误:你使用了错误的消息接收窗口句柄。SC_MONITORPOWER 属于全局系统命令消息,必须发送给所有顶层窗口(对应常量 HWND_BROADCAST,值为 0xFFFF)才能被系统电源管理模块响应。你向桌面窗口句柄GetDesktopWindow()发送该消息,不会触发任何电源操作,因此返回值为0但无实际效果。
  • 次要影响因素:Win10 1809及后续版本、Win11系统会拦截后台进程发送的关屏消息,只有前台进程发送的该消息才会被执行,避免恶意程序随意操作用户显示设备。

修复后可运行代码

class Program
{
    [DllImport("user32.dll")]
    static extern IntPtr SendMessage(IntPtr hWnd, uint Msg, IntPtr wParam, IntPtr lParam);

    const int SC_MONITORPOWER = 0xF170;
    const int WM_SYSCOMMAND = 0x0112;
    const int MONITOR_OFF = 2;
    // 全局广播窗口常量
    const int HWND_BROADCAST = 0xFFFF;

    static void Main(string[] args)
    {
        SendMessage( 
            (IntPtr)HWND_BROADCAST, 
            WM_SYSCOMMAND, 
            (IntPtr) SC_MONITORPOWER, 
            (IntPtr) MONITOR_OFF);
    }
}

额外注意事项

  • 如果修复后运行仍无效果,可以尝试给程序添加管理员权限运行,部分系统安全策略会限制普通用户进程发送全局系统命令。
  • 关屏后移动鼠标、按下任意按键即可正常唤醒屏幕,符合系统默认的电源行为。

内容的提问来源于stack exchange,提问作者Darren Oakey

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 10:45:01