从Win32或C#API获取Windows安静时间

时间:2016-02-24 10:55:08

标签: c# c++ winapi

Windows从Windows版本8开始引入了“安静时间”或“请勿打扰”功能。使用此功能,可以从任务栏通知区域禁用通知弹出窗口的配置时间。

我正在尝试获取当前的操作系统,在C ++或C#应用程序中安静的时间,但没有找到任何API或事件。

有人可以帮忙解决我的问题吗?

3 个答案:

答案 0 :(得分:3)

a recent major update to Windows 10起,“安静时间”已更改为“焦点协助”-似乎工作方式有所不同,因此以前的答案不再适用。

到目前为止,我唯一可以找到的解决方案是the one offered here

答案 1 :(得分:2)

在安静时间内,注册表值设置为0,名为" NOC_GLOBAL_SETTINGS_TOASTS_ENABLED"。以下是确定用户当前是否启用了安静时间的工作代码:

public static bool IsQuietHours()
{
    string path = "HKEY_CURRENT_USER\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Notifications\\Settings";
    string key = "NOC_GLOBAL_SETTING_TOASTS_ENABLED";
    int? toastsEnabled = (int?)Microsoft.Win32.Registry.GetValue(path, key, 1);
    return (toastsEnabled == 0);
}

答案 2 :(得分:1)

在我看来,来自@PhilWilliams的原始答案虽然只是链接答案,但却是正确的:

您可以使用SHQueryUserNotificationState() function查询状态。另请参阅QUERY_USER_NOTIFICATION_STATE enumeration了解可能的值。