gpt4 book ai didi

java - 如何只打开CHM文件的一个实例?

转载 作者:太空宇宙 更新时间:2023-11-04 09:29:37 25 4
gpt4 key购买 nike

我只想在单击菜单栏中的“帮助”时设置 CHM 文件的一个实例,并在再次单击时阻止它打开两次 - 那么我该如何编码?

我尝试将它与 process.isAlive() 一起使用,但在关闭它后,我希望将计数器设置为零,这样只有当计数器为 0 时才会打开另一个 CHM 文件。

helpMenu.addMouseListener(new MouseAdapter() {
// do this after clicked
openCHM();
});

因此 MouseEvent 被触发一次。

openCHM() {
Process p;
if(cnt == 0) {
p = Runtime.getRuntime().exec("hh.exe Help.chm");
cnt++;
if(!p.isAlive()) {
cnt = 0;
}
}

我预计计数器为 0,但后来得出的结论是 MouseEvent 已经触发一次并且代码已经执行,因此它永远不会进入第二个 if 语句并将计数器设置为 0。

编辑

如何打开一次 CHM 文件没有正确答案,但有一个解决方法可以实现这一点,我们只需要查看该文件是否可重命名。

protected void openCHM() {
try {
File file = new File("YOURNAME.chm");
boolean renamable = file.renameTo(file); // can't rename if file is already open, returns true if renaming is possible
if(renamable) {
Runtime.getRuntime().exec("hh.exe YOURNAME.chm");
} else if(!file.exists() ){
// message: file doesn't exist (in path)
} else {
// file is already open
}
} catch () {
}
}

最佳答案

我不是 Java 程序员,但短篇故事 - 不可能(据我所知)。

您知道,hh.exe 是 HTMLHelp 可执行文件,与 *.CHM 文件关联。它只是一个使用 HTML Help API 的 shell,实际上只是托管一个浏览器窗口。

HH.EXE不是单实例,如果您使用HH.EXE打开CHM或其他文件三次,则会出现三个帮助窗口。使用 PowerShell 尝试一下:

PS D:\_working> hh.exe C:\Windows\Help\htmlhelp.chm

多个客户端命令行开关可用于帮助作者,这些开关是 HTML Help 可执行程序 (hh.exe) 的一部分,因此在未设置 HTML Help Workshop 时可以工作。

KeyHH.exe 几年前就使用特殊参数运行。

如果您直接从应用程序调用 HH API,而不是通过 HH.EXE 或 KEYHH.EXE 等第二个帮助程序,那么您必须在关闭应用程序之前关闭所有打开的帮助窗口,否则 Windows 可能会崩溃。

有关您可能感兴趣的问题的一些信息Open CHM File Once.

上面链接中的一些引用信息:

当您这样做时,您只是从命令行一次又一次地调用帮助查看器,您没有使用 HTML Help API,而 HTML Help API 是您在打开 CHM 后需要访问的 API。您需要检查您的 Java 和 Smalltalk 风格是否支持对 HTML 帮助 API 的调用。此 API 详细记录在 Microsoft HTML Help Workshop 的帮助文件中,该文件是您安装的用于生成 CHM 的编译器包。

关于java - 如何只打开CHM文件的一个实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57254614/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com