检测按键是否被按下,并执行操作

检测按键是否被按下,并执行操作

我正在寻找我的问题的解决方案:

我有一个程序,按下按钮时会启动辅助程序,但是这个辅助程序没有退出的快捷方式。这意味着我必须退出全屏,进入文件菜单 - 退出。

我正在寻找一种按 Esc 键然后关闭程序的方法。

当我单击按钮时,主程序能够运行 ahk 脚本。我使用此代码在选择按钮时启动辅助程序:

Process, Wait, test.exe, 10
Send !{Enter}

上述代码启动了辅助程序 test.exe,并告诉它使用 alt+enter 进入全屏模式。这很管用。但是,添加以下内容不起作用,并会破坏脚本:

KeyWait, Esc
Send !{Enter}+!{f}+{x}

添加上述内容将启动辅助程序并立即关闭。该脚本根本不等待按键。

有人能提供替代方案吗(无论是否使用 AHK)?如果需要,我可以设置主程序以启动 bat 文件。我需要的是一种允许两个程序照常运行的方法,其中 test.exe 是活动窗口,并等待按下 Esc,此时按下 alt+enter,然后按下 alt+f,然后按下 x,退出辅助程序。

谢谢

答案1

KeyWait正在Esc等待不是按下(除非您使用该D选项),所以它会立即过去。如果您想Esc单独执行某些操作,您可以尝试KeyWait使用该D选项或将其设为热键。

我将列出热键方法,因为如果您希望拥有多个不需要运行或重新运行脚本的持久功能,那么从长远来看,学习和使用热键方法通常会更有用。

Main在这种情况下,如果需要,也可以用热键定义替换,这样就可以重新触发,而无需重新启动脚本。#Persistent顶部的关键字将在代码执行命中第一个Return语句后使脚本加载到内存中,并且任何热键定义都处于活动状态,并停止执行任何代码……之后,程序将等待,直到您命中Esc,然后执行该热键定义下的关联代码。任何其他所需的热键定义都可以与此代码并行添加,这些代码将根据热键定义触发。

如果您希望使热键定义特定于仅在某个程序处于活动状态时运行(即,不是全局热键,而是针对某个窗口或程序),请修改语句#IfWinActive以有选择地启用哪个程序必须处于活动状态才能执行热键。

; Keeps the program in memory once it executes to the first Return statement
#Persistent

Main:
    Process, Wait, test.exe, 10
    Send !{Enter}
Return

#IfWinActive ; See Help contents for this keyword to selectively enable hotkeys
Esc::  
    ; This code could also be replaced by Process, Close, as noted in the other post
    Send !{Enter}+!{f}+{x}
Return

答案2

您可以直接关闭test.exe:

Process, Close, test.exe

这将杀死 test.exe,您可以将其放置在您的代码中。

相关内容