首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AHK ControlSend

AHK ControlSend
EN

Stack Overflow用户
提问于 2020-03-30 12:03:16
回答 1查看 2K关注 0票数 0

我并没有真正处理AHK,但我看到了一个脚本,它成功地将击键发送到窗口,窗口解释击键并相应地显示它们。脚本使用了一个名为ControlSend的函数。我很好奇这个函数在Win32 API中到底做了什么。我可以假设它使用的最接近的函数是SendMessage/PostMessag;但是,当我使用WM_KEYDOWN作为消息实际测试PostMessage/SendMessage到窗口时,窗口无法解释它。因此,这并不是一个真正的编码问题,但是AHK中的ControlSend实际上依赖于Win32 API中的哪些功能呢?它也没有用keybd_event或SendInput模拟键盘,因为它能够发送击键,即使在进程窗口处于后台且没有聚焦时也是如此。我试过找这个,但没有解释。

这是AHK的剧本

代码语言:javascript
复制
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%
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-03-30 12:35:28

AutoHotkey是开源的,您可以在莱克科斯GitHub上直接查看底层的C++代码。

这里是您想要查看的有问题的函数。

如果您控制发送,则aTargetWindow HWND将为非空。

所有的检查和魔术都是在这里完成的,但是最终,您将经常到达函数,在那里通过向目标窗口发送WM_KEYDOWNWM_KEYUP消息来发送密钥。

在某些特殊情况下(如果密钥似乎没有VK或SC),则通过发送WM_CHAR消息来发送。

这就是我可以通过快速查看源代码来判断的,但是正如所说的,里面有很多东西。我建议你自己看看,看看那些很有帮助的评论,里面有很多

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60930110

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档