close

AutoHotKey_Icon.png 

之前介紹過用AutoHotKey寫出腳本

[AutoHotKey]-TsumTsum自動收心程式1

讓Tsum Tsum能以模擬器自動收心的MyAutoClick

MyAutoClick的基本運作:

1.將滑鼠點擊的位置以及順序記錄在文字檔中

2.從該文字檔依序讀取滑鼠點擊的位置

3.移動滑鼠至該位置並執行點擊的動作

4. 重複動作2.到3.,直到程式被終止或是重新讀入腳本的命令發生


此篇就接續著來介紹腳本內容是如何編寫的。



AutoHotKey是一種能依照簡單的語法寫出的動作腳本

在電腦上自動執行的軟體工具

首先可以從AutoHotKey的官網中取得主程式

之後若沒有特殊改動,則預設的腳本位置在

C:\Users\user\Documents\AutoHotkey.ahk

我們初期就先用這個AutoHotkey.ahk來編輯

第一個測試,將以下的綠色文字貼到AutoHotkey.ahk中:

;;;;;;;;;;[從這一行開始複製];;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
~LButton & m::
Msgbox, 嗨!世界!
return

;;;;;;;;;;[複製到這裡結束];;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

執行AutoHotKey之後

我們按住滑鼠左鍵加上鍵盤的字母'm'

就會出現如下的對話框:

AHK_Hello.png 

如果您也看到!恭喜!您已經學會使用AutoHotKey啦!

簡單解說一下:

分號 ';' 是註解的意思,也就是在分號之後輸入的同列文字都不會被當作腳本來執行

~LButton: 指的是按住滑鼠左鍵的意思

& m : 表示接連前面的組成複合按鍵以觸動以下的腳本動作

Msgbox: 顯示一個(基本)提示對話視窗

return: 表示此段動作結束

所以最基本的AutoHotKey腳本的組成:

1. 觸發的按鍵組合:: 

2. 動作腳本

3. 動作結束 (return)

接著我們改動內容如下:

;;;;;;;;;;[從這一行開始複製];;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
~LButton & m::
Msgbox, 嗨!世界!我的第一個AutoHotKey程式
return
;;;;;;;;;;[複製到這裡結束];;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

儲存之後,我們要更新腳本,讓AutoHotKey重新讀入

AHK_Reload.png 

從右下角的常駐圖示-->右鍵-->選擇"Reload This Script"

如此就能使AutoHotKey重新讀入腳本

看到對話視窗的內容改變了!

對於正在編寫腳本測試,要一直重複此動作,是否很不方便(懶...)?

因此第一個宅犬編寫AutoHotKey最常用的功能就是:

;●●● 重新載入Autohotkey的腳本ahk Mouse(L)+r

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
~LButton & r::
reload ;重新讀入腳本
return

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

看懂了嗎?就是:

1. 按住滑鼠左鍵加上'r'後

2. 執行重新讀入腳本(reload)

3. 腳本結束(return)

有了這個動作腳本之後,我們就能修改完成

就住滑鼠左鍵+'r' 來重新讀入腳本

此外,reload的命令還有個額外的附加作用

能夠立刻中止目前正在執行的腳本

這是很重要的指令!

當編寫過程測試時,萬一動作失控

可以立刻執行此一動作來中止世界的毀滅呀!


歡迎加入懶人的世界!!


好了正式來介紹MyAutoClick的腳本吧!

1. 重設記錄檔(Clear)

當對應的滑鼠順序位置改變時,需要重新定位

就得將原來的紀錄檔C:\MyAutoClick.txt清除

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

~LButton & c::
FileDelete, C:\MyAutoClick.txt    ;;;先刪除檔案
FileAppend, ,C:\MyAutoClick.txt  ;;;建立空白的檔案

return

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

觸動按鍵組合: 按住滑鼠左鍵+'c' (clear)


2. 紀錄滑鼠座標(Get)

取得滑鼠座標,並記錄在檔案C:\MyAutoClick.txt

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

~LButton & g::
CoordMode, Mouse, Screen   ;;;將滑鼠的座標系統對應到螢幕上
MouseGetPos, xpos, ypos,,,1  ;;;取得滑鼠的座標
FileAppend,                             ;;;加入到檔案尾端
(
%xpos%       ;;; 寫入X座標
%ypos%      ;;; 寫入Y座標
),C:\MyAutoClick.txt ;   ;;;指定寫入的檔案
ToolTip, 取得: X%xpos% Y%ypos%    ;;;顯示提示訊息取得的X,Y座標
return

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

觸動按鍵組合: 按住滑鼠左鍵+'g' (get)


3. 從檔案中讀取座標,並自動(Auto)依序點擊

這裡是MyAutoClick最核心的部分

將X,Y座標依序從C:\MyAutoClick.txt讀出

並移動滑鼠至該位置並執行點擊的動作

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
~LButton & a::
  CoordMode, Mouse, Screen      ;;;將滑鼠的座標系統對應到螢幕上
  XArray := Object()    ;;;宣告座標軸的陣列物件,用以依序儲存滑鼠X,Y座標
  XArray[j] := A_LoopField
  XArray[j, k] := A_LoopReadLine               
  Loop, Read, C:\MyAutoClick.txt   ;;;依序讀取檔案中的每一行
  {
      XArrayCount += 1   ;;;紀錄讀取紀錄總數
      XArray[XArrayCount] := A_LoopReadLine  ;;;讀取一行放入陣列
 }
  XArrayCount/= 2   ;;;由於一次需要兩筆座標紀錄(X,Y),因此記錄總數需要除以2
  Sleep, 500    ;;;給予輸入組合按鍵後的緩衝時間,避免影響到滑鼠的位置
  Loop    ;;;重複執行,不指定重複次數,直到重新讀入腳本或是程式終止
  {
        nowIndx := 1     ;;;紀錄目前讀到陣列的位置,初始化為1
       Loop %XArrayCount%  ;;;依照座標組數重複執行
      {
          nowX := XArray[nowIndx]        ;;; 讀入第一筆為X座標
          newY := XArray[nowIndx+1]    ;;; 讀入第二筆為Y座標

          mousemove, %nowX%,%newY%,50,  ;;;移動滑鼠到該位置

          MouseClick         ;;;執行滑鼠點擊動作

          Sleep,500          ;;;給予作用對象程式的反應時間

          nowIndx += 2     ;;;跳至下一組X,Y位置
      }
  }
return

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

在C:\MyAutoClick.txt 中紀錄的數值將如下:

1172
1055
1388
1059
31
39
784
14
869
18

因此必須讀取的是

X:1172 <第1組

Y:1055 <第1組
X:1388 <第2組
Y:1059 <第2組
X:31 <第3組
Y:39 <第3組
X:784 <第4組
Y:14 <第4組
X:869 <第5組
Y:18 <第5組

所以座標一共將有XArrayCount除以2組

即: XArrayCount/= 2

而讀取時必須跳Y的位置以讀取下一組的X座標開始

即: nowIndx += 2 

觸動按鍵組合: 按住滑鼠左鍵+'a' (Auto)


雖然看起來落落長

但理解後其實也是很簡單的!不是嗎?

啊?還是不太會?

好啦!將整個MyAutoClick.ahk放上來

讓大家可以直接下載

無論直接使用或研究修改都歡迎!

夠佛心來著了吧?

arrow
arrow

    宅犬 發表在 痞客邦 留言(5) 人氣()