【问题标题】:How can I wait for only one of three events (mouse input, keyboard input, or WinWaitClose) in AutoHotkey?如何在 AutoHotkey 中只等待三个事件(鼠标输入、键盘输入或 WinWaitClose)之一?
【发布时间】:2025-11-26 04:30:01
【问题描述】:

在我的场景中,窗口会自动关闭,或者用户将通过鼠标或键盘提供输入。

如果窗口自动关闭,我想打开一个 PDF。这很简单:

WinWaitClose, ahk_id %cmdHwnd%
Run, "C:\Program Files\SumatraPDF\SumatraPDF.exe" "%path%\cv.pdf"

但是如果窗口没有自动关闭( PDF 编译失败),那么用户将手动关闭该窗口,例如 点击 Enter 或点击关闭按钮。在这种情况下,我确实希望上面的WinWaitClose 触发!

所以我提出问题的另一种方式是,如何在鼠标或键盘输入时“取消”WinWaitClose 监听器?

【问题讨论】:

    标签: autohotkey


    【解决方案1】:

    我想你可以依赖WinWaitClose 中的秒计时器,如果失败,你可以依赖设置为 1 的 ErrorLevel。

    ; Set WinWaitTimer to wait 2 seconds before timing out.
    WinWaitClose, ahk_id %cmdHwnd%,, 2
    if (ErrorLevel) {
        ; Do something.
    }
    else
    {
        Run, "C:\Program Files\SumatraPDF\SumatraPDF.exe" "%path%\cv.pdf"
    }
    

    【讨论】: