使用 PostClick 和 PostMessage 的 AHK 脚本

阿加西0430

我正在尝试编写一个简单的 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

提前感谢您的帮助。

转盘

我将假设您正在尝试使用此功能

我不确定这个函数是如何工作的,但我认为你想要的是:

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 
}

您需要将该函数放置在同一文件中的某处,或者至少可以被当前文件访问。如果需要#include <script name here>.ahk您可以在文件顶部执行并将该函数作为新文件放置在同一目录中。

您尝试使用的函数采用 x 和 ay 作为在该窗口中单击的位置。然后它还需要一个类和标题,以便知道实际使用哪个窗口。希望这对您有用或以某种方式帮助您。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章