2014-10-09 17 views
0

我正在寻找一种方法来将一个exe和/或快捷方式固定到Windows 8.1任务栏(不在StartMenu中)而不依赖于动词名称。另一种方法将exe文件固定到Windows任务栏?

我做了一个研究,我唯一能找到的代码示例样this一点不工作,因为他们是动词名语言相关的,这意味着它会检查标题为“锁定到任务栏”,然后调用它动词,但该动词不存在与其他语言的英文名称,例如在西班牙语'引脚到任务栏'被翻译为'Anclar a la barra de tareas',我真的希望调用动词解析其动词 - 名称不是执行此任务的唯一方式。

然后我想知道微软的WindowsAPICodePack库是否可以提供一种以更有效的方式执行此操作的方式,或者至少是以真正可行的方式执行此操作。

或者可能使用Windows API SendMessage函数?

任何想法?

+6

请记住,应用程序不应该这样做。如果用户自己不这样做,那么决定是否应该固定您的应用程序并不取决于您。 – 2014-10-09 02:40:24

+0

@哈里约翰斯顿谢谢你的建议,但我想要开发一个我个人使用的迷你工具,它应该通过OpenFile-Dialog来锁定/取消固定选择所需应用程序的外部应用程序,以管理我的环境。感谢您的评论 – ElektroStudios 2014-10-09 02:59:46

+0

尽管我使用的是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

回答

0

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

在您链接到的代码示例中,可以查看动词名称& k,这是用于固定到任务栏的键盘快捷键。这不会改变不同的语言(我相信)。

所以在代码示例更改此:

If (verb.Name = "Pin to Tas&kbar") _ 

这样:

If (InStr(verb.name,"&k")>0) _ 

或类似的规定。

+1

西班牙语语言'Taskbar'单词被翻译为'Barra de tareas',任何'K'字符,并且加速键'&'出现在'Barra'的'B'字符之前。我清楚地解释说,我正在寻找一种替代方法来将一个元素固定到TaskBar中,而不是依赖于动词的语言本地化。反正谢谢你。 – ElektroStudios 2014-10-09 02:55:53

2

Why is there no programmatic access to the Start menu pin list?

在Windows XP中,我们故意没有给在开始菜单(以下简称“销单”)的顶级编程访问项目的 大胆的列表。 引脚列表供用户放置自己喜欢的图标。它不是地方 一个程序单方面决定,“我很酷,我是你的 最喜欢的图标,我只知道它,所以我会把自己放在那里,因为,我很好, 。

因为我们知道,当我们让人们混淆针列表的时候,每个人都会将自己安装进去,它会变成 毫无意义(和烦人)。

有什么特别的磨损是有效的方案,作为其一部分的 安装,决定他们是太酷了,他们想成为到处 确保您不会错过最酷最惊人的计划曾经 写在人类的历史,所以他们进入开始菜单, 进入快速项目,进入桌面,进入快速启动,到您的收藏夹 ,接管作为您的默认自动播放处理程序,甚至 挂出作为一个图标下一步到任务栏上的时钟,以防万一你错过了所有这些其他地方 - 并且每次运行它们时,他们都会去,并重新创建这些图标和设置,以防万一你在使用 “意外丢失了他们”。

我讨厌那些节目。


看起来是可能与Win7和上面的微软Windows的外壳程序安装:TaskbarLinks

你确实是关于动词是特定语言正确,这里是文档,说明此Pin Items to the Start Menu or Windows 7 Taskbar via Script

每个动作的动词都必须在脚本中改变,以便与其他语言一起使用。

对于自动部署,其中一些项目也可以通过在Windows Vista和更高的应答文件配置 。 Windows 7 提供了一个unattend.xml设置,最多可配置三个任务栏 固定项目(请参阅 自动安装工具包文档中的Microsoft-Windows-Shell-Setup中的任务栏链接)。 Windows Vista和 Windows 7都提供unattend.xml设置,以在“开始”菜单(StartPanelLinks的 Microsoft-Windows-Shell-Setup)中配置多达5个 “最近打开的程序”。但是,在 unattend.xml中都未提供将项目固定到“开始”菜单的方法。

+1

我不是要求开始菜单引脚列表,我要求TASKBAR引脚/取消引脚,您是否阅读我的问题? – ElektroStudios 2014-10-09 03:15:34

+0

是的,我读了它,并试图删除我的答案一分钟前,因为它的开始菜单(非任务栏)集中。我只是将你的问题归零。不幸的是@ JohnRah的方法是我唯一知道的方法,而且他认为'verb.Name'是语言中立的。 – 2014-10-09 03:33:30

+0

对不起,我错过了你提到的@ JohnRa的方法,它在哪里,你能把它链接吗? PS:verb.name不是中性的,但也许可以通过中性名称访问/使用它们,这可能是一个很好的解决方案,我不知道。感谢您的帮助 – ElektroStudios 2014-10-09 03:40:51

相关问题