我的问题是已经回答的另一个问题的扩展,https://superuser.com/questions/257467/windows-7-how-to-pin-a-jar-to-the-taskbar
有没有办法将jar固定到任务栏,并将jar生成的窗口注册为不同的进程,从而在任务栏中创建一个不同的图标?因为现在,使用上述问题的答案中列出的任何方法,您最终得到一个可以固定的快捷方式。但它只是一个捷径,而不仅仅是程序本身。我愿意在这一点上尝试任何事情,因为它开始变得非常麻烦。它不仅看起来不专业,而且耗尽了不必要的屏幕空间。我知道有人会问我还尝试了什么,这里有一些代码我尝试在c#中运行以启动jar,但当然,它做同样的事情,将新进程注册为一个新进程。 (应该想到一个通过。)
string strCmdText;
strCmdText = "-jar ImgurDownloader.jar";
Process process = new Process();
process.StartInfo.Arguments = strCmdText;
process.StartInfo.FileName = "javaw";
process.StartInfo.UseShellExecute = false;
process.Start();
所以我试过这个:
string strCmdText;
strCmdText = "-jar ImgurDownloader.jar";
Process process = Process.GetCurrentProcess();
process.StartInfo.Arguments = strCmdText;
process.StartInfo.FileName = "javaw";
process.StartInfo.UseShellExecute = false;
process.Start();
然而,即使我尝试替换当前进程,它也会作为一个新进程出现,因此在任务栏中出现第二个图标。请原谅我可能的短语,几周后沮丧情绪开始显现。
编辑:还尝试使用JNA库设置UAMID(用户应用程序模型ID)来访问shel32.dll的功能。以下是jar中的代码
public static void setCurrentProcessExplicitAppUserModelID(final String appID) {
if (SetCurrentProcessExplicitAppUserModelID(new WString(appID)).longValue() != 0)
throw new RuntimeException("unable to set current process explicit AppUserModelID to: " + appID);
}
public static String getCurrentProcessExplicitAppUserModelID() {
final PointerByReference r = new PointerByReference();
if (GetCurrentProcessExplicitAppUserModelID(r).longValue() == 0) {
final Pointer p = r.getValue();
return p.getString(0, true); // here we leak native memory by
// lazyness
}
return "N/A";
}
private static native NativeLong GetCurrentProcessExplicitAppUserModelID(PointerByReference appID);
private static native NativeLong SetCurrentProcessExplicitAppUserModelID(WString appID);
static {
Native.register("shell32");
}
然后只需调用set方法。但是,使用get方法进行测试
注意:getCurrentProcessExplicitAppUserModelID
是一种惰性方法,如果使用的话会在以后解除。
然后在C#Wrapper中,
[DllImport("shell32.dll")]
public static extern int SetCurrentProcessExplicitAppUserModelID([MarshalAs(UnmanagedType.LPWStr)] string AppID);
static void Main()
{
int der = SetCurrentProcessExplicitAppUserModelID("MAndWorks.ImgurDownloader.ImgurDownloader.2.0.0.0");
string strCmdText;
Console.WriteLine(der);
strCmdText = "-jar ImgurDownloader.jar";
Process process = new Process();
process.StartInfo.Arguments = strCmdText;
process.StartInfo.FileName = "javaw";
process.StartInfo.UseShellExecute = false;
process.Start();
process.WaitForExit();
Console.WriteLine("AWFURA");
}