如何只打开 CHM 文件的一个实例?
How to have only one instance of the CHM file opened?
我只想在单击菜单栏中的 "Help" 时设置一个 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 程序员,但短篇小说 - 不可能 (AFAIK)。
您知道,hh.exe
是 HTMLHelp 可执行文件并与 *.CHM 文件关联。它只是一个使用 HTML 帮助 API 的 shell,实际上只是托管一个浏览器 window。
HH.EXE不是单例,如果用HH.EXE打开一个CHM或其他文件3次,会出现3个帮助windows。使用 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 在关闭应用程序之前,否则你可能会崩溃 Windows.
有关您可能感兴趣的问题的一些信息 Open CHM File Once.
上面 link 中的一些 引用信息:
当您这样做时,您只是从命令行一次又一次地调用帮助查看器,而不是使用 HTML 帮助 API打开后需要访问 CHM。您需要检查您的 Java 风格和 Smalltalk 是否支持调用 HTML 帮助 API。这个API在微软HTMLHelp Workshop的帮助文件中有详细的记载,就是你安装的能够生成CHM的编译包。
我只想在单击菜单栏中的 "Help" 时设置一个 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 程序员,但短篇小说 - 不可能 (AFAIK)。
您知道,hh.exe
是 HTMLHelp 可执行文件并与 *.CHM 文件关联。它只是一个使用 HTML 帮助 API 的 shell,实际上只是托管一个浏览器 window。
HH.EXE不是单例,如果用HH.EXE打开一个CHM或其他文件3次,会出现3个帮助windows。使用 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 在关闭应用程序之前,否则你可能会崩溃 Windows.
有关您可能感兴趣的问题的一些信息 Open CHM File Once.
上面 link 中的一些 引用信息:
当您这样做时,您只是从命令行一次又一次地调用帮助查看器,而不是使用 HTML 帮助 API打开后需要访问 CHM。您需要检查您的 Java 风格和 Smalltalk 是否支持调用 HTML 帮助 API。这个API在微软HTMLHelp Workshop的帮助文件中有详细的记载,就是你安装的能够生成CHM的编译包。