我只想在单击菜单栏中的“帮助”时设置一个 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 崩溃。
添加回答
举报
0/150
提交
取消