使用PostClick和PostMessage的AHK脚本

时间:2018-12-11 06:04:05

标签: autohotkey

我正在尝试编写一个简单的AHK脚本,以在背景窗口中的特定坐标处键入一些字符并单击几下,但是我似乎无法使其正常工作,并且找不到有关如何正确使用PostClick的大量信息。

当窗口处于活动状态时,我可以使用Click使它起作用。还尝试了使用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

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

我将假设您正在尝试使用this function

我不确定此功能的工作原理,但我认为您想要的是这样的东西:

<ConnectedRouter>

您需要将函数放置在同一文件中,或者至少可以被当前文件访问。您可以在文件顶部进行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 } 操作,并根据需要将该功能作为新文件放置在同一目录中。

您要使用的函数将x和y用作在该窗口中单击位置的位置。然后,它还接受一个类和标题,以便知道实际使用哪个窗口。希望这能对您有所帮助。