Autohotkey 使用PostClick和PostMessage的AHK脚本

Autohotkey 使用PostClick和PostMessage的AHK脚本,autohotkey,Autohotkey,我正试图编写一个简单的AHK脚本,在背景窗口的特定坐标处键入几个字符并单击几下,但我似乎无法让它工作,而且我也没有找到很多关于如何正确使用PostClick的信息 当窗口处于活动状态时,我可以使用单击使其正常工作。还尝试使用ControlClick,这似乎很有效,但单击发生在鼠标所在的位置,而不是提供的坐标(并且仅在再次激活窗口时) 我可以得到一些帮助/建议,如何让这个工作 以下是我当前的脚本: DetectHiddenWindows On S:: ;Character to start th

我正试图编写一个简单的AHK脚本,在背景窗口的特定坐标处键入几个字符并单击几下,但我似乎无法让它工作,而且我也没有找到很多关于如何正确使用PostClick的信息

当窗口处于活动状态时,我可以使用
单击
使其正常工作。还尝试使用ControlClick,这似乎很有效,但单击发生在鼠标所在的位置,而不是提供的坐标(并且仅在再次激活窗口时)

我可以得到一些帮助/建议,如何让这个工作

以下是我当前的脚本:

DetectHiddenWindows On

S:: ;Character to start the loop
pid = 19164 ;Application PID
ControlGet, clickVar, Hwnd , , ahk_pid %pid% ;Specify control for which program

BreakLoop = 0
Loop, 3 {
  if (BreakLoop = 1)
  break 
  Sleep 1000
  PostClick(clickVar,1055,525)
    {
      ControlSend,, 3, ahk_pid %pid%
      lParam := x & 0xFFFF | (y & 0xFFFF) << 16 
      PostMessage, 0x201, , %lParam%, , ahk_pid %pid% ;WM_LBUTTONDOWN 
      PostMessage, 0x202, , %lParam%, , ahk_pid %pid% ;WM_LBUTTONUP 
    }
  Sleep 1500
}

E::
BreakLoop = 1

return
在上检测到ThiddenWindows
S::;开始循环的字符
pid=19164;应用PID
ControlGet,clickVar,Hwnd,ahk_pid%pid%;指定用于哪个程序的控件
BreakLoop=0
环路,3{
如果(断开环=1)
打破
睡1000
点击后(点击变量,1055525)
{
ControlSend,,3,ahk_pid%pid%

lParam:=x&0xFFFF |(y&0xFFFF)我假设您正在尝试使用

我不确定该函数是如何工作的,但我认为您需要的是:

DetectHiddenWindows On

S:: ;Character to start the loop
pid = 19164 ;Application PID
ControlGet, clickVar, Hwnd , , ahk_pid %pid% ;Specify control for which program
WinGetTitle, clickTitle, ahk_pid %pid%
WinGetClass, clickClass, ahk_pid %pid%
BreakLoop = 0
Loop, 3
{
  if (BreakLoop = 1)
  break 
  Sleep 1000
  PostClick(1055,525,clickClass, clickTitle)
  ControlSend,, 3, ahk_pid %pid%
  Sleep 1500
}

E::
BreakLoop = 1

return

PostClick(x, y, class, title) 
{
  lParam := x & 0xFFFF | (y & 0xFFFF) << 16 
  PostMessage, 0x201, 1, %lParam%, %class%, %title% ;WM_LBUTTONDOWN 
  PostMessage, 0x202, 0, %lParam%, %class%, %title% ;WM_LBUTTONUP 
}
在上检测到ThiddenWindows
S::;用于启动循环的字符
pid=19164;应用程序pid
ControlGet,clickVar,Hwnd,ahk_pid%pid%;指定哪个程序的控制
Wingtitle,点击标题,ahk_pid%pid%
WingtClass,clickClass,ahk_pid%pid%
BreakLoop=0
环路,3
{
如果(断开环=1)
打破
睡1000
点击后(1055525,点击类,点击标题)
ControlSend,,3,ahk_pid%pid%
睡1500
}
E::
BreakLoop=1
返回
后点击(x、y、类别、标题)
{

lParam:=x&0xFFFF |(y&0xFFFF)谢谢Reasel。我仍然无法让脚本按预期运行(可能是因为那些post类型被实际程序阻止了),但这个答案非常有帮助,并指出了我所犯的错误。如果你真的能让它发挥作用,请更新你的帖子!我希望能做你所尝试的事情。