我有一个函数可以更改注册表值,以在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)来刷新任务栏并更新隐藏的任务栏图标。