我并没有真正处理AHK,但我看到了一个脚本,它成功地将击键发送到窗口,窗口解释击键并相应地显示它们。脚本使用了一个名为ControlSend的函数。我很好奇这个函数在Win32 API中到底做了什么。我可以假设它使用的最接近的函数是SendMessage/PostMessag;但是,当我使用WM_KEYDOWN作为消息实际测试PostMessage/SendMessage到窗口时,窗口无法解释它。因此,这并不是一个真正的编码问题,但是AHK中的ControlSend实际上依赖于Win32 API中的哪些功能呢?它也没有用keybd_event或SendInput模拟键盘,因为它能够发送击键,即使在进程窗口处于后台且没有聚焦时也是如此。我试过找这个,但没有解释。
这是AHK的剧本
Loop{
sendKey("a")
}
F1::
if (mypid == 0){
WinGet, var, PID, A
mypid = %var%
MsgBox, Found client %mypid%
}
sendKey(key)
{
global mypid
WinClose
ControlSend,,{%key%}, ahk_pid %mypid%
}发布于 2020-03-30 12:35:28
AutoHotkey是开源的,您可以在莱克科斯GitHub上直接查看底层的C++代码。
这里是您想要查看的有问题的函数。
如果您控制发送,则aTargetWindow HWND将为非空。
所有的检查和魔术都是在这里完成的,但是最终,您将经常到达这函数,在那里通过向目标窗口发送WM_KEYDOWN和WM_KEYUP消息来发送密钥。
在某些特殊情况下(如果密钥似乎没有VK或SC),则通过发送WM_CHAR消息来发送。
这就是我可以通过快速查看源代码来判断的,但是正如所说的,里面有很多东西。我建议你自己看看,看看那些很有帮助的评论,里面有很多
https://stackoverflow.com/questions/60930110
复制相似问题