为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

白猪掌柜的 2023-04-26 16:22:12
我只想在单击菜单栏中的“帮助”时设置一个 CHM 文件实例,并在再次单击时阻止它打开两次 - 因此我该如何编码?我尝试将它与 process.isAlive() 一起使用,但在我关闭它之后我希望将计数器设置为零,这只会在计数器为 0 时打开另一个 CHM 文件。helpMenu.addMouseListener(new MouseAdapter() {// do this after clickedopenCHM();});所以 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 () {        }    }
查看完整描述

1 回答

?
元芳怎么了

TA贡献1798条经验 获得超7个赞

我不是 Java 程序员,但短篇小说 - 不可能(AFAIK)。

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

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

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

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

KeyHH.exe多年前以特殊参数运行。

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

查看完整回答
反对 回复 2023-04-26
  • 1 回答
  • 0 关注
  • 104 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信