比较共享公共结构但在Windows操作系统中不完全相同的窗口标题

时间:2013-03-27 16:07:16

标签: java string windows-7 jna

我目前正在开发一个用Java处理中断的项目。我的目标是了解何时是打断用户的好时机。目前我的方法是拥有一个不应该被打断的窗口列表,并将其与每3秒钟聚焦的窗口进行比较,然后使用键盘钩子来检测它们是否正在键入。

但是,我遇到过Microsoft Word和许多其他程序没有固定窗口标题的问题。如果用户想要将Microsoft Word添加到“不中断”列表,那么它只会添加当前正在处理的文件名,而不是可用于唯一标识Microsoft Windows的文件名。另一个例子是twitter,如果用户将twitter添加到列表中,那么它不会认为(15) twitter是等效的。

是否有任何替代方法可用于检测窗口标题属于哪个程序,或者字符串搜索方法可能是此问题的理想选择?

我也对如何做到这一点的全新方法持开放态度。

1 个答案:

答案 0 :(得分:2)

我认为比使用窗口标题更好的答案是获取实际的进程ID并将其保存在不被中断的进程列表中。这样你就不用担心改名了。

像这里所做的事情应该可以解决问题:http://www.golesny.de/p/code/javagetpid

获得不太理想的PID的另一种方法:

如果你无法弄清楚那个例子......获得PID的另一个选择如下:

String line = "";
Process p = Runtime.getRuntime().exec(System.getenv("windir") +"\\system32\\"+"tasklist.exe -v");
BufferedReader input = new BufferedReader(new InputStreamReader(p.getInputStream()));
while ((line = input.readLine()) != null) {
        System.out.println(line); // this should print out process names with PID

}