通过鼠标点击在 AHK 中构建数组

Build an array in AHK from mouse clicks

我想构建一个鼠标点击坐标数组。我很难理解你是如何构建一个二维数组的。或者如果我做错了并且应该构建两个数组。一张是 X 坐标,一张是 Y 坐标。

我可以很容易地构建一个只有 X 坐标或 Y 坐标的数组。我能否以某种方式将 X 和 Y 构建到同一个二维数组中?

ArrayX := []
ArrayY := []
counter:=1

^Lbutton::
  MouseGetPos CurX, CurY
  ArrayX[counter] := CurX
  ArrayY[counter] := CurY
  counter++
return

^q::
  loop % ArrayX.MaxIndex()
    items.= ArrayX[A_Index] "," 
  StringLeft, items, items, Strlen(items)-1
  Clipboard := items
  msgbox % items
  items:=""  
  
  loop % ArrayY.MaxIndex()
    items.= ArrayY[A_Index] "," 
  StringLeft, items, items, Strlen(items)-1
  Clipboard := items
  msgbox % items
exitapp

您只需将所需索引处的元素指定为数组,即可在 AHK 中创建多维或锯齿状数组。
Array[3] := [481, 529]
您只需按顺序访问元素即可访问它,例如:
Array[3][2] 将得到 529。

其他需要改进脚本的地方:

  1. 您可能希望使用 .Push() 方法将值附加到数组。
  2. A for loop 可能是正常循环和担心索引的理想替代方法:
    for each, element in Array
  3. StringLeft is a deprecated legacy command and shouldn't be used anyone. SubStr() 替换它。
    但是,对于您使用它所做的事情,RTrim() 将是 better/easier:
    RTrim(items, ",")

修改后的脚本:

Array := []

^LButton::
  MouseGetPos, CurX, CurY
  Array.Push([CurX, CurY])
return

^q::
    For each, element in Array
        items .= element[1] ", " element[2] "`n"
    MsgBox, % RTrim(items, "`n")
    ExitApp
return