java - 比较 Windows 操作系统中具有共同结构但不完全相同的窗口标题

标签 java string windows-7 jna

我目前正在开发一个 Java 项目,该项目处理中断问题。我的目标是了解何时是打断用户的好时机。目前,我当前的方法是列出不应被中断的窗口列表,并将其与每 3 秒获得焦点的窗口进行比较,然后使用键盘 Hook 来检测它们是否正在打字。

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

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

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

最佳答案

我认为比使用窗口标题更好的答案是获取实际的进程 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

}

关于java - 比较 Windows 操作系统中具有共同结构但不完全相同的窗口标题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15663595/

相关文章:

Python 向 "1"= ="1"返回 false。任何想法为什么?

c++ - 如何打开两个独立的控制台并向它们写入不同的数据?

c# - String.Split 能否区分 char 的单个实例和多个实例?

Windows 7 操作中心

c# - File.Move 不继承目标目录的权限?

java - Intellij IDEA - 识别所有被忽略的 junit 测试

java - 当另一个线程通知线程时,该线程从哪里开始执行?

java - mobile.changePage 到下一页?

java - 如何通过Java中的收据打印机打印支票?

c# - 如何在 C# 中解析 String 中的 int?