このコードを使用して、プログラムをWindows 10(RTM)のタスクバーに固定しようとしています:
_$Shell = new-object -com "Shell.Application"
$folder = $Shell.Namespace((Join-Path $env:SystemRoot System32\WindowsPowerShell\v1.0))
$item = $folder.Parsename('powershell_ise.exe')
$item.invokeverb('taskbarpin');
_
これはWindows 8.1では機能しましたが、Windows 10では機能しなくなりました。
$item.Verbs()
を実行すると、次のようになります:
_Application Parent Name
----------- ------ ----
&Open
Run as &administrator
&Pin to Start
Restore previous &versions
Cu&t
&Copy
Create &shortcut
&Delete
Rena&me
P&roperties
_
ご覧のとおり、タスクバーに固定する動詞はありません。ただし、その特定のファイルを右クリックすると、オプションがあります。
質問:
何か不足していますか?
Windows 10でプログラムをタスクバーに固定する新しい方法はありますか?
PowerShellに移植されたHumbertoのvbscriptソリューションは次のとおりです。
Param($Target)
$KeyPath1 = "HKCU:\SOFTWARE\Classes"
$KeyPath2 = "*"
$KeyPath3 = "Shell"
$KeyPath4 = "{:}"
$ValueName = "ExplorerCommandHandler"
$ValueData = (Get-ItemProperty("HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\" +
"Explorer\CommandStore\Shell\Windows.taskbarpin")).ExplorerCommandHandler
$Key2 = (Get-Item $KeyPath1).OpenSubKey($KeyPath2, $true)
$Key3 = $Key2.CreateSubKey($KeyPath3, $true)
$Key4 = $Key3.CreateSubKey($KeyPath4, $true)
$Key4.SetValue($ValueName, $ValueData)
$Shell = New-Object -ComObject "Shell.Application"
$Folder = $Shell.Namespace((Get-Item $Target).DirectoryName)
$Item = $Folder.ParseName((Get-Item $Target).Name)
$Item.InvokeVerb("{:}")
$Key3.DeleteSubKey($KeyPath4)
if ($Key3.SubKeyCount -eq 0 -and $Key3.ValueCount -eq 0) {
$Key2.DeleteSubKey($KeyPath3)
}
非常に素晴らしい!私はそのPowerShellの例にいくつかの小さな調整を加えました、あなたが気にしないことを願っています:)
param (
[parameter(Mandatory=$True, HelpMessage="Target item to pin")]
[ValidateNotNullOrEmpty()]
[string] $Target
)
if (!(Test-Path $Target)) {
Write-Warning "You freaking dumbass!!! $Target does not exist"
break
}
$KeyPath1 = "HKCU:\SOFTWARE\Classes"
$KeyPath2 = "*"
$KeyPath3 = "Shell"
$KeyPath4 = "{:}"
$ValueName = "ExplorerCommandHandler"
$ValueData =
(Get-ItemProperty `
("HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\" + `
"CommandStore\Shell\Windows.taskbarpin")
).ExplorerCommandHandler
$Key2 = (Get-Item $KeyPath1).OpenSubKey($KeyPath2, $true)
$Key3 = $Key2.CreateSubKey($KeyPath3, $true)
$Key4 = $Key3.CreateSubKey($KeyPath4, $true)
$Key4.SetValue($ValueName, $ValueData)
$Shell = New-Object -ComObject "Shell.Application"
$Folder = $Shell.Namespace((Get-Item $Target).DirectoryName)
$Item = $Folder.ParseName((Get-Item $Target).Name)
$Item.InvokeVerb("{:}")
$Key3.DeleteSubKey($KeyPath4)
if ($Key3.SubKeyCount -eq 0 -and $Key3.ValueCount -eq 0) {
$Key2.DeleteSubKey($KeyPath3)
}
とても古いものを復活させてすみません。
PowerShellでこれを行う方法はわかりませんが、vbscriptでは、私が開発したこの方法を実行できます。システム言語に関係なく動作します。
Windows 8.xおよび10で動作します。
スクリプト
If WScript.Arguments.Count < 1 Then WScript.Quit
'----------------------------------------------------------------------
Set objFSO = CreateObject("Scripting.FileSystemObject")
objFile = WScript.Arguments.Item(0)
sKey1 = "HKCU\Software\Classes\*\Shell\{:}\\"
sKey2 = Replace(sKey1, "\\", "\ExplorerCommandHandler")
'----------------------------------------------------------------------
With WScript.CreateObject("WScript.Shell")
KeyValue = .RegRead("HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer" & _
"\CommandStore\Shell\Windows.taskbarpin\ExplorerCommandHandler")
.RegWrite sKey2, KeyValue, "REG_SZ"
With WScript.CreateObject("Shell.Application")
With .Namespace(objFSO.GetParentFolderName(objFile))
With .ParseName(objFSO.GetFileName(objFile))
.InvokeVerb("{:}")
End With
End With
End With
.Run("Reg.exe delete """ & Replace(sKey1, "\\", "") & """ /F"), 0, True
End With
'----------------------------------------------------------------------
コマンドライン:
pin and unpin: taskbarpin.vbs [fullpath]
Example: taskbarpin.vbs "C:\Windows\notepad.exe"
Windows 10では、Microsoftは動詞を表示する前に簡単なチェックを追加しました。実行可能ファイルの名前はExplorer.exeでなければなりません。任意のフォルダに入れることができ、名前だけがチェックされます。したがって、C#またはコンパイル済みプログラムで簡単に実行するには、プログラムの名前を変更するだけです。
それが不可能な場合、Shellオブジェクトをだまして、プログラムがExplorer.exeと呼ばれると考えることができます。 PEBのImage Pathを変更することでC#でそれを行う方法についての投稿 here を書きました。
私は同じ問題を抱えており、まだそれを処理する方法を知りませんが、この小さなコマンドラインツールは:
http://www.technosys.net/products/utils/pintotaskbar
次のようなコマンドラインで使用できます。
syspin "path/file.exe" c:5386
プログラムをタスクバーに固定し、
syspin "path/file.exe" c:5387
固定を解除します。これは私には問題ありません。