2014-10-09 4 views
0

Я ищу способ привязать exe и/или ярлык к панели задач Windows 8.1 (не в StartMenu) без зависимости от имени глагола.Альтернативный способ подключить exe к панели задач Windows?

Я сделал исследование, и я только могу найти кодовые примеры как this, который не работает, потому что они зависят от языка названия глагола зависит, это означает, что он проверяет наличие глагола под названием «Закрепить на панель задач», а затем вызвать его , но этот глагол не существует с английским именем на других языках, например, на испанском языке. Pin To Taskbar 'переводится как' Anclar a la barra de tareas ', я действительно надеюсь, что вызов глагола, анализирующего его глагол- имя не является уникальным способом выполнения этой задачи.

Тогда я задаюсь вопросом, может ли библиотека Microsoft WindowsAPICodePack предоставить способ более эффективному ее выполнению или, по крайней мере, таким образом, который действительно будет работать.

Или, может быть, использовать функцию Windows API SendMessage?

Любые идеи?

+6

Имейте в виду, что приложения не должны это делать. Вы не должны решить, что ваше приложение действительно должно быть закреплено, если пользователь не делает этого сам. –

+0

@ Харри Джонстон благодарен за это предложение, но я имею в виду разработать мини-инструмент для моего личного использования, который должен подключать/отключать внешние приложения, выбирающие нужное приложение через OpenFile-Dialog, для управления моей средой. спасибо за ваш комментарий – ElektroStudios

+0

Я столкнулся с тем же требованием, хотя я использовал установщик WiX. В итоге я сдался и позволил пользователям принять решение. Просто подумал, что я поделился бы [моими 2 центами в контексте WiX и событием, в котором вы можете отследить разделы реестра и т. Д.] (Http://windows-installer-xml-wix-toolset.687559.n2.nabble.com/ use-wix-to-pin-to-taskbar-and-pin-to-start-menu-td5518811.html) (возможно, выйдите из монитора процессов). –

ответ

0

Нет официального способа привязки приложения к панели задач (на данный момент), насколько я знаю, поэтому я думаю, что вам нужно будет полагаться на этот хакерский путь с глаголами. Но вам не нужно (не должно) жестко кодировать их; они могут быть прочитаны из таблицы строк ресурсов библиотеки shell32.dll. Некоторое время назад я написал a script для Inno Setup, который может подключать приложение. на панель задач, используя эти глаголы (на основе 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', а ключ ускорителя' & 'появляется перед символом' B' '& Barra'. Я ясно объяснил, что я ищу альтернативный способ связывания/открепления элемента в TaskBar, не зависящего от локализации языка глаголов. Благодарю вас. – ElektroStudios

2

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

В Windows XP мы намеренно не дали программный доступ к смелой список элементов в верхней части меню Пуск (далее «список контактный»). Список контактов предназначен для того, чтобы пользователи могли размещать свои любимые значки. Это не место для программы, которая в одностороннем порядке принимает решение: «Я такой классный. Я твой любимый значок . Я просто это знаю. Поэтому я поставил себя там, потому что, ну, Мне так здорово».

Потому что мы знали, что в тот момент, когда мы позволяем людям путаться со списком, все будут устанавливать себя в него, и это станет бессмысленным (и раздражающим).

Что особенно возмутительный являются программами, которые, как часть их установки, решил, что они так здорово, что они хотят быть везде убедитесь, что вы не пропустите на крутой самых удивительных программе когда-либо написано в истории человечества, поэтому они заходят в меню «Пуск», в «Быстрые предметы», на рабочий стол, в «Быстрый запуск», на « », «Избранное», возьмите на себя роль обработчика автозапуска по умолчанию и даже вывешивают в качестве значка рядом на часах на панели задач на всякий случай, если вы каким-то образом пропустили все эти места - и каждый раз, когда вы их запускаете, , они идут и воссоздают эти значки и настройки на случай, если вы «случайно потеряли их».

Я ненавижу эти программы.


Похоже, можно с помощью Microsoft-Windows-Shell-Setup на Win7 и выше: 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). Тем не менее, ни один из способов не предоставляет способ в unattend.xml для привязки элементов к меню «Пуск».

+1

Я не прошу указать список контактов в меню «Пуск», я прошу выставить TASKBAR pin/unpin, вы прочитали мой вопрос ?. – ElektroStudios

+0

Да, я прочитал его, и у меня возникло соблазн удалить мой ответ минуту назад, так как его основное меню Start (не TaskBar) было сфокусировано. Я просто отказался от вашего вопроса. К сожалению, метод JohnRah - это единственное, что я знаю, и его интерес, он считает, что слово 'verb.Name' является языком нейтральным. –

+0

Извините, но я пропустил метод @ JohnRa, о котором вы упоминали, где он, не могли бы вы связать его? PS: verb.name не является нейтральным, но, возможно, может быть способ доступа/использования их через нейтральные имена, и это может быть отличным решением, я не знаю. спасибо за вашу помощь – ElektroStudios