【发布时间】:2013-03-17 19:32:22
【问题描述】:
我目前正在使用 Java 开发一个处理中断的项目。我的目标是了解何时是打断用户的好时机。目前,我当前的方法是列出不应中断的窗口,并将其与每 3 秒聚焦的窗口进行比较,然后使用键盘挂钩来检测它们是否正在打字。
但是,我遇到了 Microsoft Word 和许多其他程序没有固定窗口标题的问题。如果用户想要将 Microsoft Word 添加到不中断列表中,那么它只会添加当前正在处理的文件名,而不是可以用来唯一标识 Microsoft Windows 的文件名。另一个例子是twitter,如果用户将twitter添加到列表中,那么它不会认为(15) twitter是等价的。
是否有任何替代方法可用于检测窗口标题属于哪个程序或可能适合此问题的字符串搜索方法?
我也对如何做到这一点的全新方法持开放态度。
【问题讨论】:
-
不会像
stringThatContainsWindowName.indexOf(stringfromDontInterruptList)>0这样的工作吗? -
此测试是否在测试 stringFromDontInterruptList 是否在第二个字符串 stringThatContainsWindowName 中?问题在于,如果在
twitter之前添加(15) twitter,那么如果测试(15) twitter在twitter中,它将返回false。这就是它的工作原理吗? -
indexOf 返回它在调用它的字符串 (stringThatContainsWindowName) 内传递的字符串(在本例中为 stringFromDontInterruptList)的从零开始的位置,如果未找到,则返回 -1。在您的示例中,它将返回类似 5 的内容,因此最后进行比较。因此,简而言之,如果 stringFromDontInterruptList 在 stringThatContainsWindowName 内,它将返回一个 0 或更大的数字。请记住,这将区分大小写,因此您可能希望对两个字符串都执行 toLowerCase 或类似的操作。
-
stringThatContainsWindowName.contains(stringFromDontInterruptList)是一个布尔值,它替换了indexOf表达式,让你在做什么更清楚。另一个建议是围绕名称中的关键短语构建正则表达式并应用它。根据@MattSieker 关于大小写的注释,您可以以不区分大小写的方式应用正则表达式。