powershell将新设置应用于任务栏

时间:2012-10-01 07:49:06

标签: powershell windows-7 explorer taskbar

我正在使用powershell并且正在通过更改注册表项来更改某些任务栏设置。例如,我已经编写了一个自动隐藏启用禁用功能。

$autoHideSettingsPath = "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\StuckRects2";
$autoHideValueName = "Settings";

Function toggleAutohideRegistrySettings($enable)
{

    $key = Get-ItemProperty -Path $autoHideSettingsPath -Name $autoHideValueName;   

    Write-Host "key is: " + $key
    if($enable)
    {
        $key.$autoHIdeValueName[8] = $key.$autoHideValueName[8] -bor 1;

    }else{
        $key.$autoHIdeValueName[8] = $key.$autoHideValueName[8] -band 0;    
    }

    Set-ItemProperty -Path $autoHideSettingsPath -Name $autoHideValueName -Value $key.$autoHideValueName;
}

注册表的变化完美无缺。但要生效,我需要重新启动explorer.exe。我显然也可以在PS中做...但我注意到当你在menue(鼠标方式)中应用自动隐藏设置时,没有重新启动explorer.exe。

所以我的问题是:如何将更改应用到PS中的任务栏,而无需重新启动explorer.exe?

1 个答案:

答案 0 :(得分:1)

我使用上面的脚本向注册表中有新设置的应用程序发送消息。并非所有应用程序都能收到此消息,但我认为探索确实如此。

试一试,在应用注册表设置后调用它:

$sign = @"
using System;
using System.Runtime.InteropServices;

public static class RegUpdate
{
    private const int HWND_BROADCAST = 0xffff;
    private const int WM_WININICHANGE = 0x001a, WM_SETTINGCHANGE = WM_WININICHANGE, INI_INTL = 1;
      [DllImport("user32.dll")] 
    private static extern int SendMessage(int hWnd, uint wMsg, uint wParam, uint lParam); 

    public static string SendM()
    {
        try
                {                   
                   SendMessage(HWND_BROADCAST, WM_SETTINGCHANGE, 0, INI_INTL);
                   return "0";
                }

                catch (Exception ex)
                {
                    return (ex.Message);              
                }
    }
}
"@
$type = Add-Type -TypeDefinition $sign -Language CSharp -PassThru
$type::SendM()