如果你只是后台发送文本、按键,请忘记PostMessage / SendMessage,这两个命令受到受体窗口(hwnd指向的窗口)的影响,很可能会失效
以下是我针对一款腾讯游戏的窗口编写的代码:
;本着功能影响最小化的原则(你的热键只应该对特定的场景生效),我建议你这样获取窗口的hwnd
;为什么我的代码中大多数是hwnd?
;因为我的应用场景基本都是针对可以多开的游戏,能够唯一确定的事情就不要麻烦那个可以重名的窗口标题了
global adWinId:=0
#If WinActive("ahk_exe lin.bin")
;千万不要把赋值操作写在上面的if语句中,你的global变量获取的值很可能不够global,这是我最近踩过最恶心的坑
^z::
adWinId:=WinActive()
#if
;后台向指定窗口发送文本
ControlSend,,{text} 这里是一段测试文本,(这里是中文逗号所以可以直接写)通过回车自动把这段文字发送出去,在结尾写上`n,ahk_id %adWinId%
;后台点击窗口中的指定坐标,!!!这段程序会因为你在adWinId对应的窗口中移动鼠标而失效,很粗很鸡肋的解决办法是你在执行该代码前直接把窗口最小化。。。
ControlClick, x55 y77, ahk_id %adWinId%
顺便夹带一点私货,通过PostMessage使窗口最小化
;通过ahk_id使指定窗口最小化
PostMessage,0x0112,61472,,, ahk_id %a_id%