如何在 Windows 10 及更高版本中以编程方式刷新任务栏?

Posted

技术标签:

【中文标题】如何在 Windows 10 及更高版本中以编程方式刷新任务栏?【英文标题】:How can I refresh the Taskbar programatically in Windows 10 and higher? 【发布时间】:2022-01-12 13:10:50 【问题描述】:

马上开始,请不要太苛刻地判断,我对这个论坛还比较陌生,还没有太熟练地提出我的问题:)

背景:

因为我必须经常在新计算机上安装 Windows 并进行配置,所以我发现一些设置总是相同但无论如何都很重要(例如显示文件类型结尾、禁用 Cortana 和新闻和兴趣、将 Word/Excel 固定到任务栏、等等)

问题:

我的问题是关于任务视图按钮 - 我将它设置为隐藏在注册表中(但让有机会随时重新激活它)。当然 - 您可以手动更改任务栏设置,但对于每个程序,这将不起作用。由于此类更改在正常情况下需要重启或重启“explorer.exe”才能适应:

如何在不终止任何进程的情况下以编程方式禁用任务视图按钮(或一般刷新任务栏)?

不 - 其他类似的问题没有帮助,因为它们与系统托盘或旧操作系统有关,它的解决方案不再有效。

我的环境:

Windows 10 32/64 位 21H1 无论程序语言如何,我对几乎任何解决方案都很满意。

提前感谢您的帮助。

【问题讨论】:

使用 Spy++ 检查设置应用程序是否广播消息,WM_SETTINGSCHANGE 可能带有特定的 lParam。 嗯,隐藏任务视图按钮时有很多条目(称为“活动应用程序”),但只有一个您提到的开头:WM_SETTINGCHANGE wFlag:0000 pszMetrics:0309E388 pszMetrics:0309E388 是该内存位置的字符串,您需要使用调试器或如果这是一个广播消息,只需一个简单的测试应用程序就可以找出它是什么......跨度> 我不知道我是如何走在正确的道路上的。即使是我的 C++ 应用程序中没有参数的条目也无法被 Spy++ 识别 [例如。 SendMessage(NULL, (LPARAM) "WM_WINDOWPOSCHANGED lpwp:0309E430", NULL, (LPARAM)L"TrayButton");] 你能在这行找到任何错误或给我一个例子,也许是 C++? “托盘按钮”从何而来?你为什么要发送到NULL?发送到 HWND_BROADCAST 【参考方案1】:
DWORD data = 0;
SHSetValueA(HKEY_CURRENT_USER, "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Advanced", "ShowTaskViewButton", REG_DWORD, &data, 4);
SendNotifyMessage(HWND_BROADCAST, WM_SETTINGCHANGE, 0, (LPARAM) TEXT("TraySettings"));

【讨论】:

不幸的是它没有用。我设法更改了注册表 dword(第一行),但任务栏既不刷新 TaskView 按钮也不刷新任务栏中的任何其他部分(至少对我不可见) 在 Win10 上为我工作 那一定是我的项目出错了。也许你可以给我看你的整个 cpp 文件,这样我就可以更快地找到错误...... 如果它编译它应该工作。 是的,它编译但什么也不做。对于我最近启用的测试,例如支持像 XP 这样的旧操作系统(顺便说一句,我正在使用 VS2017),也许在我的标题中也可能缺少一些东西(我在编程方面不是很好,我在脚本方面更有经验。所以,你能给我看完整的代码让我比较一下?

以上是关于如何在 Windows 10 及更高版本中以编程方式刷新任务栏?的主要内容,如果未能解决你的问题,请参考以下文章

如何在android Pie及更高版本中以编程方式通过拨号器拨打电话

如何在 android 2.3 及更高版本中获取当前启动器的包名?

如何以编程方式在 Android(KitKat 及更高版本)中添加 APN

如何在 Equinox 3.10 及更高版本中获取所有已加载的包

您如何以编程方式在 Android ICS 及更高版本上截取屏幕截图?

如何以编程方式在 Android 的 API 23 及更高版本中获取位置(纬度、经度)?