小編之前也有使用過其它大牛編寫的遊戲同步的指令碼,突然間對於它是如何實現同步感到十分好奇,我們一起來研究看看,同步到底是怎麼實現的吧~
工具/原料
按鍵精靈2014
方法/步驟
NO.1-同步的前提
前提
1 同步的兩個視窗需要是同一個應用視窗,並且視窗大小要相同
2 同步視窗可以接收到按鍵的鍵鼠傳送資訊
3 同步的視窗支援後臺鍵鼠操作
NO.2-本節例子及其能實現的功能
例子
1 畫圖工具,實現同步畫圖
2 記事本,實現同步刪除內容
功能 ① 鍵鼠同步
② 支援組合鍵
NO.3-思路大剖析
思路步驟
1 獲取主視窗和被同步視窗控制代碼
● WaitKey 命令等待鍵盤按下
○ 按下F6則獲取當前滑鼠指向的視窗控制代碼,作為主視窗控制代碼。
○ 按下F7 則獲取當前滑鼠指向的視窗控制代碼,作為同步視窗控制代碼。
● 用Do迴圈來等待按鍵,當主視窗控制代碼和同步視窗控制代碼都獲取到時,退出Do迴圈
● 程式碼
Do
Key = WaitKey()
If Key = 117 Then
主視窗 = Plugin.Window.MousePoint()
End If
If Key = 118 Then
同步視窗 = Plugin.Window.MousePoint()
End If
Delay 500
If 主視窗 <> 0 and 同步視窗 <> 0 Then
Exit Do
End If
Loop
2 設定兩個視窗的視窗大小一致
● 視窗大小一致,同步的時候滑鼠才能移動到正確的位置。
● 程式碼
Call Plugin.Window.Size(主視窗,800,600)
Call Plugin.Window.Size(同步視窗,800,600)
3 獲取主視窗的左上角座標
● GetWindowRect 命令獲取主視窗的左上角座標
● 程式碼
sRect = Plugin.Window.GetWindowRect(主視窗)
dim MyArray
MyArray = Split(sRect, " ")
L = Clng(MyArray(0)): T = Clng(MyArray(1))
4 獲取當前滑鼠在主視窗的位置
● GetCursorPos命令獲取當前滑鼠位置
● 程式碼
GetCursorPos mx, my
5 計算主視窗內當前滑鼠位置和視窗左上角距離
● 公式:當前滑鼠位置減去視窗左上角座標值( mx-L, my-T)
6 開始同步
● 被同步視窗,使用按鍵後臺鍵鼠命令,將滑鼠移動到和主視窗相同的位置
( 按鍵後臺命令滑鼠移動是以視窗客戶區左上角座標為基點)
● 程式碼
Call Plugin.Bkgnd.MoveTo(同步視窗, mx-L, my-T)
●在主視窗內按下任意鍵時,同步視窗也執行同樣的操作
● 程式碼
Key = GetLastKey()
Call Plugin.Bkgnd.KeyPress(同步視窗, Key)
NO.4-程式碼
程式碼
Do
Key = WaitKey()
If Key = 117 Then
主視窗 = Plugin.Window.MousePoint()
//Call Plugin.Window.Size(主視窗,800,600)
End If
If Key = 118 Then
同步視窗 = Plugin.Window.MousePoint()
// Call Plugin.Window.Size(同步視窗,800,600)
End If
Delay 500
If 主視窗 <> 0 and 同步視窗 <> 0 Then
Exit Do
End If
Loop
Do
Mouse = GetLastClick()
If Mouse = 32769 Then //滑鼠左鍵按下時ASCII碼為 32769
sRect = Plugin.Window.GetWindowRect(主視窗)
dim MyArray
MyArray = Split(sRect, " ")
L = Clng(MyArray(0)): T = Clng(MyArray(1))
GetCursorPos mx, my
Delay 10
Call Plugin.Bkgnd.LeftDown(同步視窗, mx-L, my-T)
Delay 10
Do
Mouse = GetLastClick()
If Mouse = 0 Then //滑鼠無點選操作
GetCursorPos mx, my
Delay 10
Call Plugin.Bkgnd.MoveTo(同步視窗, mx-L, my-T)
Delay 10
End If
If Mouse = 32770 Then //滑鼠左鍵彈起時ASCII碼為 32770
GetCursorPos mx, my
Delay 10
Call Plugin.Bkgnd.LeftUp(同步視窗, mx-L, my-T)
Exit Do
End If
Loop
End If
Key = GetLastKey()
Call Plugin.Bkgnd.KeyPress(同步視窗, Key)
Loop
NO.5-效果演示
演示
畫圖
記事本
注意 畫圖和記事本,獲取視窗控制代碼的時候請點選白白的客戶區進行獲取,因為我們是要對它的客戶區進行操作
NO.6-溫馨小提示
溫馨小提示
* 遊戲視窗中的同步,需要注意幾個視窗中人物的朝向和座標是否相同
* 如果座標朝向不同,一個窗口裡的角色往西邊走一個往北邊走,就無法達到預期同步任務的效果