Закрепление приложения Java на панели задач Windows 7
Я использую Launch4j в качестве оболочки для моего Java-приложения под Windows 7, которое, по моему мнению, по сути разветвляет экземплярjavaw.exe
это в свою очередь интерпретирует код Java. В результате, при попытке прикрепить мое приложение к панели задач, Windows вместо этого прикрепляетjavaw.exe
, Без необходимой командной строки мое приложение не будет работать.
Как видите, Windows также не осознает, что Java является хост-приложением: само приложение описывается как "Java (TM) Platform SE ".
Я попытался изменить раздел реестраHKEY_CLASSES_ROOT\Applications\javaw.exe
добавить значениеIsHostApp
, Это меняет поведение, вообще отключая закрепление моего приложения; явно не то, что я хочу.
После прочтения окак Windows интерпретирует экземпляры одного приложения (а такжефеномен, обсуждаемый в этом вопросе) Я заинтересовался встраиванием идентификатора модели приложения (AppUserModelID) в свое Java-приложение.
Я считаю, что я могу решить эту проблему, передав уникальныйAppUserModelID
в Windows. Eстьshell32
метод для этого,SetCurrentProcessExplicitAppUserModelID
, Следуя предложению Грегори Пакоша, я реализовал его, чтобы моя заявка была признана отдельным экземпляром:javaw.exe
NativeLibrary lib;
try {
lib = NativeLibrary.getInstance("shell32");
} catch (Error e) {
Logger.out.error("Could not load Shell32 library.");
return;
}
Object[] args = { "Vendor.MyJavaApplication" };
String functionName = "SetCurrentProcessExplicitAppUserModelID";
try {
Function function = lib.getFunction(functionName);
int ret = function.invokeInt(args);
if (ret != 0) {
Logger.out.error(function.getName() + " returned error code "
+ ret + ".");
}
} catch (UnsatisfiedLinkError e) {
Logger.out.error(functionName + " was not found in "
+ lib.getFile().getName() + ".");
// Function not supported
}
Это, кажется, не имеет никакого эффекта, но функция возвращается без ошибки. Диагностика почему-то для меня загадка. Какие-либо предложения?
Рабочая реализацияОкончательная реализация, которая работалаответ на мой дополнительный вопрос относительно того, как передатьAppID
используя JNA.
Я вручил награду Григорию Пакошу блестящий ответ для JNI, который поставил меня на правильный путь.
Для справки, я считаю, что использование этого метода открывает возможность использования любого из API, обсужденныхв этой статье в приложении Java.