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

如何通过编程开启/关闭Windows Focus Assist(专注助手)?

可行解决方案

旧方法失效原因

你用的SendMessage广播方式(hWnd=-1)无法正常控制专注助手,原因是:

  • SC_FOCUSASSIST并非通用的系统消息广播命令,广播会导致系统处理异常,进而卡住程序
  • 专注助手是系统级功能,Win32的消息发送方式已被Windows 10/11限制,不再支持通过这种方式控制

官方推荐的WinRT API方案

Windows 10及以上版本提供了官方WinRT API来控制专注助手,这是最可靠的方式,无需依赖注册表或不稳定的Win32消息。

实现步骤(C#)

  1. 确保你的项目支持WinRT(.NET 6+桌面应用可通过启用WinRT支持实现,UWP应用直接支持)
  2. 使用FocusAssistSettings类控制专注助手状态:
using Windows.UI.Notifications.Management;
using System.Threading.Tasks;

public async Task ControlFocusAssist(FocusAssistMode targetMode)
{
    var focusSettings = FocusAssistSettings.GetDefault();
    
    // 检查是否具备修改权限
    if (!focusSettings.CanChangeFocusAssistSettings)
    {
        // 请求用户授权
        var accessStatus = await UserNotificationListener.RequestAccessAsync();
        if (accessStatus != UserNotificationListenerAccessStatus.Allowed)
        {
            // 授权失败,可在此处理错误逻辑
            return;
        }
    }
    
    // 设置目标模式
    focusSettings.FocusAssistMode = targetMode;
}

// 调用示例:
// 开启专注助手(优先通知模式)
// await ControlFocusAssist(FocusAssistMode.PriorityOnly);
// 开启专注助手(仅闹钟模式)
// await ControlFocusAssist(FocusAssistMode.AlarmsOnly);
// 关闭专注助手
// await ControlFocusAssist(FocusAssistMode.Off);

说明

  • FocusAssistMode有三个可选值:
    • Off:关闭专注助手
    • PriorityOnly:仅允许优先级列表中的通知
    • AlarmsOnly:仅允许闹钟通知
  • 该方法直接调用系统官方接口,不存在卡住或失效问题,且会同步系统设置

关于注册表方法的补充

Windows 10后期版本及Windows 11中,专注助手的设置已不再完全依赖注册表,修改注册表后需要重启系统才可能生效,且部分版本已禁用该修改方式,因此不推荐使用。

内容的提问来源于stack exchange,提问作者At Work

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 01:57:55