就我所知,没有官方的方式将应用程序固定到任务栏上(因为我知道,所以我认为你需要依靠这种冒险的方式和动词)。但是你不需要(不应该)硬编码它们;他们可以从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