Windows10及以上系统如何无需结束进程编程刷新任务栏或隐藏任务视图按钮
适用于Windows 10 21H1的无重启任务栏刷新方案
核心原理
修改对应注册表项后,通过Windows API向Explorer进程广播系统设置变更通知,触发任务栏自动读取新配置重载,无需结束任何进程。
隐藏任务视图按钮对应的注册表路径为:HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced 下的 ShowTaskViewButton DWORD值,设为0为隐藏,1为显示。
方案1:PowerShell实现(适合批量部署)
直接运行以下脚本即可生效,无需额外依赖:
# 先设置注册表项(如已提前修改可跳过本段) Set-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced" -Name "ShowTaskViewButton" -Value 0 -Type DWord # 广播设置变更通知触发任务栏刷新 $signature = @" [DllImport("user32.dll", SetLastError = true)] public static extern IntPtr SendMessageTimeout(IntPtr hWnd, uint Msg, UIntPtr wParam, string lParam, uint fuFlags, uint uTimeout, out UIntPtr lpdwResult); "@ $user32 = Add-Type -MemberDefinition $signature -Name "User32SendMessage" -Namespace "Win32" -PassThru $HWND_BROADCAST = [IntPtr]0xffff $WM_SETTINGCHANGE = 0x001A $SMTO_ABORTIFHUNG = 0x0002 $result = [UIntPtr]::Zero $user32::SendMessageTimeout($HWND_BROADCAST, $WM_SETTINGCHANGE, [UIntPtr]::Zero, "TraySettings", $SMTO_ABORTIFHUNG, 1000, [ref]$result)
说明:将ShowTaskViewButton的值改为1即可重新显示任务视图按钮,同样无需重启进程
方案2:C++实现(适合自定义装机工具集成)
代码示例如下:
#include <Windows.h> #pragma comment(lib, "user32.lib") int main() { // 修改注册表项(如已提前修改可跳过本段) HKEY hKey; if (RegOpenKeyEx(HKEY_CURRENT_USER, L"Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Advanced", 0, KEY_SET_VALUE, &hKey) == ERROR_SUCCESS) { DWORD value = 0; // 0隐藏,1显示 RegSetValueEx(hKey, L"ShowTaskViewButton", 0, REG_DWORD, (BYTE*)&value, sizeof(DWORD)); RegCloseKey(hKey); } // 广播设置变更通知触发任务栏刷新 DWORD_PTR dwResult; SendMessageTimeout(HWND_BROADCAST, WM_SETTINGCHANGE, 0, (LPARAM)L"TraySettings", SMTO_ABORTIFHUNG, 1000, &dwResult); return 0; }
32位和64位Windows 10 21H1环境下均兼容,编译后可直接运行
验证效果
运行代码后1秒内即可看到任务栏的任务视图按钮状态同步更新,无任何进程被终止,也不会影响当前已打开的窗口和资源管理器操作。
内容的提问来源于stack exchange,提问作者user12602580
相关产品推荐
相关产品推荐

