0

PowerShellを使用して、いくつかのプログラムをWin7のタスクバーに固定できます。

$shell = new-object -com "Shell.Application"  
$folder = $shell.Namespace('C:\Windows')    
$item = $folder.Parsename('notepad.exe')
$verb = $item.Verbs() | ? {$_.Name -eq 'Pin to Tas&kbar'}
if ($verb) {$verb.DoIt()}

プログラムをスタートメニューに固定するために上記のコードを変更するにはどうすればよいですか?

4

5 に答える 5

3

以下のコードを使用してください

$shell = new-object -com "Shell.Application"  
$folder = $shell.Namespace('C:\Windows')    
$item = $folder.Parsename('notepad.exe')
$verb = $item.Verbs() | ? {$_.Name -eq 'Pin to Start Men&u'}
if ($verb) {$verb.DoIt()}

注: 変更は 4 行目にあります。

于 2012-10-10T09:48:39.607 に答える
1

ほとんどのソリューションの主な問題は、ファイルの動詞を列挙し、文字列を検索してアクション (「スタートメニューにピン留め」など) を実行してから実行することです。会社で 30 以上の言語をサポートする必要がある場合、外部関数を使用してローカライズされたコマンドを検索する場合を除いて、これは機能しません ( shtako-verflowからの回答を参照)。

Steven Pennyからの回答は、言語に依存せず、外部コードを必要としない最初のものです。レジストリHKEY_CLASSES_ROOT\CLSID\{90AA3A4E-1CBA-4233-B8BB-535773D48449}に保存されている動詞を使用し、HKEY_CLASSES_ROOT\CLSID\{a2a9545d-a0c2-42b4-9708-a0b2badd77c8}

これに基づいて、現在使用しているコードは次のとおりです。

function PinToTaskbar {
         param([Parameter(Mandatory=$true)][string]$FilePath)  
  ExecuteVerb $FilePath "taskbarpin" 
}

function UnpinFromTaskbar {
         param([Parameter(Mandatory=$true)][string]$FilePath)  
  ExecuteVerb $FilePath "taskbarunpin" 
}

function PinToStartmenu {
         param([Parameter(Mandatory=$true)][string]$FilePath)  
 ExecuteVerb $FilePath "startpin" 
}

function UnpinFromStartmenu {
         param([Parameter(Mandatory=$true)][string]$FilePath)  
 ExecuteVerb $FilePath "startunpin" 
}

function ExecuteVerb {  
         param(
            [Parameter(Mandatory=$true)][string]$File,
            [Parameter(Mandatory=$true)][string]$Verb
         ) 

    $path = [System.Environment]::ExpandEnvironmentVariables($File) 
    $basePath = split-path $path -parent   #retrieve only the path File=C:\Windows\notepad.exe -> C:\Windows
    $targetFile = split-path $path -leaf    #retrieve only the file File=C:\Windows\notepad.exe -> notepad.exe

    $shell = new-object -com "Shell.Application"  
    $folder = $shell.Namespace($basePath)        
    if ($folder)
    {
       $item = $folder.Parsename($targetFile) 

       if ($item)
       {
         $item.invokeverb($Verb)
         # "This method does not return a value." (http://msdn.microsoft.com/en-us/library/windows/desktop/bb787816%28v=vs.85%29.aspx)
         # Therefore we have no chance to know if this was successful...
         write-host "Method [$Verb] executed for [$path]"       
       } 
       else
       {
         write-host "Target file [$targetFile] not found, aborting" 
       }             
    }
    else 
    {      
      write-host "Folder [$basePath] not found, aborting" 
    }

}


#PinToTaskbar "%WINDIR%\notepad.exe"
#UnpinFromTaskbar "%WINDIR%\notepad.exe"

PinToStartmenu "%WINDIR%\notepad.exe"
#UnpinFromStartmenu "%WINDIR%\notepad.exe"
于 2014-02-27T09:40:16.610 に答える
1

ここでスクリプト (国際) を参照してください。

Pin to Modern UI interface (Windows 8) のようなアクションを追加する場合は、$verbs に 51201 を追加します。

于 2013-05-07T12:56:23.490 に答える
0

上記のスティーブン・ペニーの2番目の答えは私にとってうまくいきました。ここにいくつかのヒントがあります。

PowerShell を介して COM を実行しているため、ほぼすべての COM クライアントで同じことができます。たとえば、これは AutoHotkey バージョンです。

Shell := ComObjCreate("Shell.Application")
Target := Shell.Namespace(EnvGet("WinDir")).ParseName("Notepad.exe")
Target.InvokeVerb("startpin")

VBScript または InnoSetup は、オブジェクトの作成に使用される関数を除いて、ほとんど同じに見えます。

また、OK をピン留めしたプログラムが 1 つあることもわかりましたが、コンパイラの制限により、正しいアイコンや説明がありませんでした。Process.Start でターゲットを開始する小さな 1 行の WinForms アプリを作成し、適切なアイコンと、AppInfo.cs の Title プロパティの [スタート] メニューに必要な名前を追加しました。

于 2014-03-04T04:01:24.427 に答える