就我所知,沒有官方的方式將應用程序固定到任務欄上(因爲我知道,所以我認爲你需要依靠這種冒險的方式和動詞)。但是你不需要(不應該)硬編碼它們;他們可以從shell32.dll庫資源字符串表中讀取。前段時間我爲Inno Setup寫了a script
,可以安裝應用程序。通過使用這些動詞到任務欄(基於this thread
)。該代碼的一部分是從shell32.dll庫中讀取必要的動詞,這就是我試圖轉換爲VB的東西(這是我第一次使用VB.NET,因此請拿下面的代碼來證明概念) :
Module Module1
Const SHELL32_STRING_ID_PIN_TO_TASKBAR As Int32 = 5386
Const SHELL32_STRING_ID_UNPIN_FROM_TASKBAR As Int32 = 5387
Private Declare Auto Function LoadLibrary Lib "kernel32.dll" (_
ByVal lpLibFileName As String _
) As IntPtr
Private Declare Function FreeLibrary Lib "kernel32.dll" (_
ByVal hLibModule As IntPtr _
) As Boolean
Private Declare Auto Function LoadString Lib "user32.dll" (_
ByVal hInstance As IntPtr, _
ByVal uID As Int32, _
ByVal lpBuffer As String, _
ByVal nBufferMax As Int32 _
) As Int32
Public Function TryGetVerbName(ByVal ID As Int32, ByRef VerbName As String) As Boolean
Dim Handle As IntPtr
Dim BufLen As Int32
Dim Buffer As String = Space(255)
Handle = LoadLibrary("shell32.dll")
If Not Handle.Equals(IntPtr.Zero) Then
Try
BufLen = LoadString(Handle, ID, Buffer, Buffer.Length)
If BufLen <> 0 Then
VerbName = String.Copy(Buffer)
Return True
End If
Finally
FreeLibrary(Handle)
End Try
End If
Return False
End Function
Sub Main()
Dim VerbName As String = String.Empty
If TryGetVerbName(SHELL32_STRING_ID_PIN_TO_TASKBAR, VerbName) Then
Console.WriteLine("Verb name for pin to taskbar: " + VerbName)
End If
If TryGetVerbName(SHELL32_STRING_ID_UNPIN_FROM_TASKBAR, VerbName) Then
Console.WriteLine("Verb name for unpin from taskbar: " + VerbName)
End If
Console.ReadLine()
End Sub
End Module
請記住,應用程序不應該這樣做。如果用戶自己不這樣做,那麼決定是否應該固定您的應用程序並不取決於您。 – 2014-10-09 02:40:24
@哈里約翰斯頓謝謝你的建議,但我想要開發一個我個人使用的迷你工具,它應該通過OpenFile-Dialog來鎖定/取消固定選擇所需應用程序的外部應用程序,以管理我的環境。感謝您的評論 – ElektroStudios 2014-10-09 02:59:46
儘管我使用的是WiX安裝程序,但遇到了同樣的需求。最後我放棄了,讓用戶做出決定。只是以爲我會分享[我的2美分的WiX上下文和事件,你可以追蹤註冊表項等](http://windows-installer-xml-wix-toolset.687559.n2.nabble.com/使用-Wix-to-pin-to-taskbar-and-pin-to-start-menu-td5518811.html)(也許退出進程監視器)。 – 2014-10-09 03:08:35