如何在 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 集成是如何工作的。