猿问

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

我只想在单击菜单栏中的“帮助”时设置一个 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 () {

        }

    }


白猪掌柜的
浏览 105回答 1
1回答

元芳怎么了

我不是 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 崩溃。
随时随地看视频慕课网APP

相关分类

Java
我要回答