【问题标题】:Should I check whether a window exists before using WinClose?在使用 WinClose 之前是否应该检查窗口是否存在?
【发布时间】:2017-09-07 19:55:34
【问题描述】:

WinClose 的文档包含一个代码示例,该示例在尝试关闭之前检查 IfWinExist

IfWinExist, Untitled - Notepad  ; check if window exists
    WinClose                    ; close window found above

我还看到脚本单独使用 WinClose 而不检查窗口是否存在。

WinClose, Untitled - Notepad    ; close window without checking if it exists

我找不到任何理由使用一种方法而不是另一种方法。无论哪种方式,我的脚本似乎都可以正常工作,使选择看起来像是个人喜好。

是否有任何理由在使用 WinClose 关闭窗口之前检查它是否存在?

【问题讨论】:

  • Afaik,ifwinexist 只检查窗口是否正在运行,我认为它不会将焦点放在那个窗口上。因此,如果您的焦点在窗口 A 上并且您检查窗口 B 然后发出关闭命令,我认为您将关闭窗口 A 而不是窗口 B...

标签: autohotkey sanity-check


【解决方案1】:

不,您不需要在关闭窗口之前检查它是否存在。如果不存在匹配的窗口,WinClose 将根本不做任何事情。这不是这个例子想要表达的意思。

该示例试图说明您在使用WinClose 时不需要重复目标窗口的WinTitle 和/或WinText。在某些情况下,它只是为您节省了一些打字(和性能)。
例如:

IfWinExist, Untitled - Notepad
    ;do stuff
    ;do more stuff
    ;etc
    WinClose ;close the window found above

这在WinTitle 的文档中进行了解释,“最后找到”窗口

这是 IfWin[Not]Exist、WinExist()、IfWin[Not]Active、WinActive()、WinWait[Not]Active 或 WinWait 最近发现的窗口。 它可以使脚本更容易创建和维护,因为目标窗口的 WinTitle 和 WinText 不需要为每个窗口命令重复。 此外,脚本性能更好,因为它们不需要在第一次找到目标窗口后再次搜索它。

【讨论】:

  • 如果排除 IfWinExist,脚本的性能会更好吗? (因为也只有一个查找)
  • 可能不会有可测量的差异。只有一个查找,但您仍在执行两个命令而不是一个。我会选择读起来最好的。
猜你喜欢
  • 2012-10-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-11
  • 2014-01-01
  • 1970-01-01
相关资源
最近更新 更多