以编程方式刷新Windows任务栏

时间:2019-07-19 11:09:08

标签: c# windows-7 registry

我有一个函数可以更改注册表值,以在Windows任务栏中隐藏不需要的图标(tryOpenCreateKey是用于更新现有值或创建键(如果不存在)的函数,因为组策略可以做奇怪的事情)。

public static void changeTaskBar()
{
    string subKey = "Software\\Microsoft\\Windows\\CurrentVersion\\Explorer";
    string setting = "EnableAutoTray";
    int setTo = 1;
    using (RegistryKey regKey = Registry.CurrentUser.OpenSubKey(subKey, true))
    {
        tryOpenCreateKey(regKey, setting, setTo, RegistryValueKind.DWord, subKey);
        SHChangeNotify(HChangeNotifyEventID.SHCNE_ASSOCCHANGED, HChangeNotifyFlags.SHCNF_IDLIST, IntPtr.Zero, IntPtr.Zero); //Updates Windows Explorer with new reg changes
    }
}

如果Windows加载时注册表值设置为0,则所有任务栏任务栏图标均可见。运行此代码可以将其正确设置为1,但为了使其视觉上生效,explorer.exe需要重新启动。

在“通知区域图标”菜单中,有一个选项“始终在任务栏上显示图标和通知”,它将更新此注册表值并刷新explorer.exe的显示,而无需重新启动它。

我也希望能够以编程方式执行此操作。我有一个类似的功能,可以取消隐藏隐藏的文件和文件夹,而该文件和文件夹必须调用刷新才能使隐藏项真正可见。

[Flags]
private enum HChangeNotifyEventID
{
    SHCNE_ASSOCCHANGED = 0x08000000,
}

[Flags]
private enum HChangeNotifyFlags
{
    SHCNF_IDLIST = 0x0000
}

[Flags]
private enum SendMessageTimeoutFlags : uint
{
    SMTO_ABORTIFHUNG = 0x2,
}

[DllImport("shell32.dll")]
private static extern void SHChangeNotify(HChangeNotifyEventID wEventId, HChangeNotifyFlags uFlags, IntPtr dwItem1, IntPtr dwItem2);

是否有类似的shell32函数(或其他Windows API)来刷新任务栏并更新隐藏的任务栏图标。

0 个答案:

没有答案