Java 赢7针到任务栏+启动4J+NSIS

Java 赢7针到任务栏+启动4J+NSIS,java,windows,nsis,launch4j,taskbar,Java,Windows,Nsis,Launch4j,Taskbar,我们努力使名为JabRef的Java Swing应用程序能够固定到Windows的任务栏上。我们迄今为止所做的: 通过JNA在JabRef中设置AppModelUserID。我们通过输出验证了正确的值 构建fat jar,并由此生成一个带有launch4j的可执行exe 使用WinShell插件使用NSIS创建安装程序 安装程序使用JabRef中设置的相同AppModelUserID创建快捷方式。我们通过十六进制编辑器验证了这一点。 分组工作:您可以通过快捷方式或exe启动 不起作用的内容:右键

我们努力使名为JabRef的Java Swing应用程序能够固定到Windows的任务栏上。我们迄今为止所做的:


通过JNA在JabRef中设置AppModelUserID。我们通过输出验证了正确的值 构建fat jar,并由此生成一个带有launch4j的可执行exe 使用WinShell插件使用NSIS创建安装程序 安装程序使用JabRef中设置的相同AppModelUserID创建快捷方式。我们通过十六进制编辑器验证了这一点。 分组工作:您可以通过快捷方式或exe启动 不起作用的内容:右键单击任务栏项仅显示关闭应用程序操作,而不显示其他操作。 有没有进一步调试的想法

这将显示右键单击菜单。

如果在运行锁定的快捷方式时,应用程序没有接管该快捷方式,则AppModelUserID设置不正确

您可以使用%appdata%\Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBar\MyApp.lnk中的shellproperty.exe读取System.AppUserModel.ID来验证.lnk中的ID

在正在运行的应用程序中,可以为每个窗口和/或进程设置AppModelUserID。对于外部应用程序来说,查询这些应用程序有点困难,但您可以使用GetCurrentProcessExplicitAppUserModelID和调用它们

如果Windows认为您的应用程序是托管应用程序,则会隐藏pin菜单项,请参阅。It Java应用程序注册为主机进程

如果进程本身或用于启动 进程具有显式AppUserModelID,则主机进程列表为 忽略,应用程序将被视为正常应用程序 任务栏。应用程序的运行窗口在下面分组 只需一个任务栏按钮,应用程序就可以固定到 任务栏


我唯一的建议是使用JNA/JNI来调用启动程序应用程序(如果它是一个单独的进程)和由javaw.exe托管的主应用程序。

您确定右键单击菜单只有一个项目吗?请张贴屏幕截图。当您右键单击任务栏项目时,您是否在谈论已经运行的应用程序窗口,因为单击快捷方式意味着它已经被锁定?如果右键单击startmenu/屏幕中的快捷方式,会发生什么情况?它是否提供pin选项?我们通过输出验证了正确的值这意味着什么?您确定为您的窗口和/或进程正确设置了Id吗?快捷方式提供了“锁定到任务栏”选项,但如果您通过锁定的任务栏条目启动应用程序,则任务栏上基本上有两个图标,因为正在运行的实例未分组到锁定图标。我们使用launch4j。我认为这就是问题所在,因为我们无法在launch4j中设置AppUserModelID,只能在由launch4j exe包装的Java应用中设置。最新的jna平台库现在包括SetCurrentProcessExplicitAppUserModelID的jna绑定: