微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在 C++ 代码上运行 AutoHotkey 脚本?

如何解决如何在 C++ 代码上运行 AutoHotkey 脚本?

我正在用 C++ 开发一个开源桌面应用程序,我需要在 C++ 代码中运行这个 AutoHotkey 脚本,我该怎么做?

Acc_Caret := Acc_ObjectFromWindow(WinExist("A"),OBJID_CARET := 0xFFFFFFF8)
Caret_Location := Acc_Location(Acc_Caret)
x = %A_CaretX%
y = %A_CaretY%

WinGetPos,Xc,Yc,A

msgBox,Act at %Xc%`,%Yc% 
msgBox % Caret_Location.x "`n" Caret_Location.y
msgBox % x "`n" y

return

Acc_Init()
{
    Static  h
    If Not  h
        h:=DllCall("LoadLibrary","Str","oleacc","Ptr")
}
Acc_ObjectFromWindow(hWnd,idobject = -4)
{
    Acc_Init()
    If  DllCall("oleacc\AccessibleObjectFromWindow","Ptr",hWnd,"UInt",idobject&=0xFFFFFFFF,-VarSetCapacity(IID,16)+Numput(idobject==0xFFFFFFF0?0x46000000000000C0:0x719B3800AA000C81,Numput(idobject==0xFFFFFFF0?0x0000000000020400:0x11CF3C3D618736E0,IID,"Int64"),"Ptr*",pacc)=0
    Return  ComObjEnwrap(9,pacc,1)
}
Acc_Location(Acc,ChildId=0,byref Position="") { ; adapted from Sean's code
    try Acc.acclocation(ComObj(0x4003,&x:=0),ComObj(0x4003,&y:=0),&w:=0),&h:=0),ChildId)
    catch
        return
    Position := "x" NumGet(x,"int") " y" NumGet(y,"int") " w" NumGet(w,"int") " h" NumGet(h,"int")
    return  {x:NumGet(x,"int"),y:NumGet(y,w:NumGet(w,h:NumGet(h,"int")}
}

(msgBox 只是为了调试)

解决方法

看起来使用 dll 应该可以工作,请参阅 https://www.autohotkey.com/boards/viewtopic.php?t=34779&p=160687 也许您可以看到 this Ruby/Ahk 集成是如何工作的。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。