Закрепление приложения 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.

Ответы на вопрос(7)

Ваш ответ на вопрос