2015-10-06 8 views
0

Мы стараемся сделать приложение Java Swing под названием JabRef (http://jabref.sourceforge.net/) подвешенным к панели задач Windows. Что мы сделали до сих пор:Win 7-pin для панели задач + launch4j + NSIS

  • установить AppModelUserID в JabRef через JNA. Мы проверили правильное значение через выход
  • сборки жира банку и от этого исполняемого файла, (ехе) с launch4j
  • создать инсталлятор с NSIS с помощью плагина WinShell
  • установщик создает ярлык, используя тот же AppModelUserID, который установлен в JabRef. Мы проверили это с помощью шестнадцатеричного редактора.
  • группировка работает: вы можете начать с помощью ярлыка или exe
  • что НЕ работает: щелкните правой кнопкой мыши на панели задач, показывается только действие «закрыть приложение», ничего больше.

Любые идеи относительно отладки в дальнейшем?

Это показывает контекстное меню. enter image description here

+0

Вы уверены, что в меню правой кнопки мыши будет только один элемент? Пожалуйста, разместите снимок экрана. Когда вы щелкаете правой кнопкой мыши элемент панели задач, вы говорите о своем уже запущенном окне приложения, потому что щелчок на ярлыке означает, что он уже закреплен? Что произойдет, если вы щелкнете правой кнопкой мыши ярлык в меню startmenu/screen, предлагает ли он опцию pin? – Anders

+0

«Мы проверили правильное значение через выход» Что это значит? Вы уверены, что идентификатор правильно установлен для вашего окна и/или процесса? – Anders

+0

Ярлык предоставляет параметр pin для панели задач, но если вы запустите приложение через закрепленную запись в панели задач, на панели задач в основном есть два значка, так как исполняемый экземпляр не сгруппирован с прикрепленным значком. – simonh

ответ

0

Если прикрепленный ярлык не был «захвачен» приложением при его запуске, то идентификаторы AppModelUserID установлены неправильно.

Вы можете проверить идентификатор в .lnk с помощью this tool (shellproperty.exe read "System.AppUserModel.ID" from "%appdata%\Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBar\MyApp.lnk")

В работающей заявке AppModelUserID может быть установлен для каждого окна и/или процесса. Запросить их немного сложнее для внешних приложений, но вы можете позвонить им на себя с помощью GetCurrentProcessExplicitAppUserModelID и SHGetPropertyStoreForWindow.

Если Windows считает, что ваше приложение является размещенным приложением, оно скроет пункт меню контактов, см. Registering an Application as a Host Process. Это looks like Приложения Java зарегистрированы как хост-процесс.

Если либо сам процесс или файл ярлык используется для запуска процесса имеет явную AppUserModelID, то список процессов хоста игнорируется, и заявка рассматриваются как обычное приложение по панелям задач. Окна запуска приложения сгруппированы под одной кнопкой панели задач, и приложение может быть закреплено на панели задач .

Мое единственное предложение заключается в использовании ЮНА/JNI для вызова SetCurrentProcessExplicitAppUserModelID как в приложении пусковая (если это отдельный процесс) и в главном приложении организовано javaw.exe.

+0

Мы используем launch4j.Я думаю, что это проблема, поскольку мы не можем установить AppUserModelID в launch4j, только в Java-приложении, которое завернуто с помощью start4j exe. – simonh

+0

Последняя библиотека 'jna-platform' теперь включает в себя привязки JNA для' SetCurrentProcessExplicitAppUserModelID': https://github.com/java-native-access/jna/pull/680 – rednoah