旋風註冊詳情 親子 美食 汽車 家裝
  • 36785閱讀
  • 7回復

[教學統整]按鍵精靈常用指令統整教學∼基礎篇

級別: *
— 本帖被 2號! 執行置頂操作(2008-10-06) —

前言:

在此篇文章 我花了n小時時間 以5.20版
統整一些常用的指令來教學 分成n個部分來做說明
希望有緣分能在此相遇的人 能獲得你們所需要的

在這 33wg 有很多人為了這裡而努力奮鬥
但是往往都是失望的離開 我個人希望的 是這裡能夠充滿活力
不是充滿求檔帖跟廢物帖 而是很多人一起討論
發表求黨帖跟廢物帖 看了只會心酸 沒有人會幫你們寫的
且 你們難道希望自己是在一堆廢物帖當中 尋找那篇被淹沒的教學嘛!?

在這裡 回覆是種美德 你覺得哪為大大文章說的好 且回答很精確 那請你回覆一下
你動幾個手指頭回覆 可以讓那些大大 為了你們 多動幾萬次手指來發表回答

---------------------------------------------

a.基礎指令動作介紹

說明:
基礎指令動作 包含腳本編寫中的鍵盤跟鼠標動作
這些動作在精靈 就是指令 例如:左鍵單點 滑鼠移動到xx 鍵盤案f2
今天我們是如何控制電腦!?就是使用滑鼠跟鍵盤
而這些指令動作 就是你鍵盤跟滑鼠所能使用的


[1].按鍵-類型-執行次數
讓你的鍵盤 使用單一按鍵動作
例如:
按h鍵 3次>h-按鍵-3
f8鍵按下然後放開>f8-按住-1 + f8-彈起-1

[2].按鍵組合
同時使用2個按鍵來配合
例如:
按ctrl+c>在框框內先案ctrl不放開且按下c

[3].腳本暫停,按任意鍵繼續把按鍵碼存入變量
暫停終止腳本運行 必須輸入任意按鍵 才可以繼續運行腳本
輸入的按鍵 會代入指定設定值
例如:
想讓腳本到某處停止 且必須按任意鍵才可以繼續運行
並且讓按下的按鍵變成代號lk 按下k 則此時lk=k

[4].鼠標動作-執行次數
讓你的滑鼠 使用單一滑鼠動作
例如:
左鍵連點7下>
左鍵單擊-7

[5].鼠標移到座標-抓點
讓滑鼠移動到某個特定位置
例如:
讓滑鼠移動到螢幕左上角>
使用[抓點] 讓滑鼠移動到左上角的點 然後鍵盤按ctrl+alt+1
則就紀錄下座標 之後退出在座標欄尋找該座標即可

[6].鼠標相對移動-座標
讓滑鼠移動相對位置
例如:
滑鼠移動到離現在滑鼠目前位置
x軸距離-30個單位座標 y軸距離+27單位座標 的點(左上方)>
dx:-30 dy:27

[7].保存當前鼠標所在的位置 恢復上次保存的鼠標位置
讓滑鼠記憶位置 方便反覆使用

---------------------------------------------

b.條件式指令動作介紹

說明:
除了鍵盤跟滑鼠按鍵之外 其他的特殊動作指令 一般條件式為主
條件式的使用在於 當某個事物 符合你設定的條件 則啟動該程序
記得動作指令 都要在條件式內 且一個條件式 可視為一個大動作
例如:當x>250 則開始動作 這樣x=<250的時候 該條件都不會有動作
只有x>250 才會有反應


[1].如果座標-的顏色-則執行
當某個特定座標點的顏色 符合時 此條件成立啟動 執行條件內動作
例如:
遊戲中血條一半的時候 就使用f8鍵1次喝水>
使用[抓點座標/顏色] 在血條一半且沒血的地方按下ctrl+alt+2
然後退出 座標欄選擇你抓的點 顏色更改為你要的顏色 然後使用[插入]
之後在 "如果(x.y)顏色等於#??????則" "否則"
兩個中間插入一個按下f8鍵 這樣當某點顏色變成指定顏色時 就會執行動作按f8
然後條件結束

[2].準備循環執行-遍
在此條件內的動作 會反覆循環執行特定次數才會退出
例如:
某個動作我想要讓這動作反覆循環執行28變然後才結束繼續執行下一個>
將要循環的動作放在"循環28遍" "循環結束"裡面

[3].如果表達式-取值為真,則-
一般通用表達式 用於> < = 3個居多
例如:
當某個x的值 大於或等於117 則按下f8>
在空格內輸入"x>=117"
之後按[插入] 在條件式內插入f8 這樣當x>=117的時候 就會使用f8

[4].跳轉到標記
類似書籤的功能 方便跳轉執行 名稱可以任意修改 純粹方便使用
例如:
在腳本中間想要突然跳回腳本最初的地方>
標記輸入"這裡是起始點" 插入在腳本起頭
之後在你想跳轉的地方 放入"跳轉到標記-這裡是起始點"即可

[5].調用子程序
將多個動作打包成一個小程序 方邊隨時調用裡面的動作
例如:
在編寫腳本中 發現某個相同的條件動作或一般基礎動作會運用好幾次>
在腳本裡 事先設定個子程序"代號258" 將條件式或動作放進去
當要使用此程序裡的動作時 只要在想用的地方插入"調用子程序 代號258"即可

[6].腳本停止運行
當腳本執行到此時後 則停止腳本 視同按下腳本停止鍵

[7].延時-時間
再2個任意動作指令中 插入時間間隔 1秒=1000毫秒

[8].輸入文本
在當前視窗中 輸入設定的內容

[9].彈出窗口(腳本暫停)
彈出一個小窗口 窗口內顯示內定文字
此時腳本暫停狀態 按下[確定]即可以繼續運行腳本

---------------------------------------------

c.腳本編寫法
說明:
腳本編寫 注重排列順序 腳本由上往下一個一個運行
所以順序錯誤往往導致無法預計的錯誤 腳本編寫完成後
建議自己看一次腳本 在腦海中模擬一次腳本 方便檢測錯誤
一個好的腳本 需要編寫者優良的邏輯能力還有統整能力
按鍵精靈雖然可以做出你雙手做得到的事情 
但是好的腳本 需要的 就是強大的編寫能力 這種能力 在於自己
如何做出這腳本 必須要先有個構想 才能依照構想 慢慢寫出動作
並且必須考慮到所有可能的狀況 而加以編寫應變
相信在遊戲中 上面的簡單指令 很難滿足其他人 畢竟單單符合顏色
沒辦法在遊戲中靈活運用 怪都會跑 會動 又不是固定的點 這時候
就需要vbs來配合 以下用當初我所發表的vbs屏幕區域內查找顏色
來做個說明 且這個也是最常使用到的

假如會函數內的"在屏幕區域內查找顏色"or"在屏幕區域內查找圖形"
就可以寫出打怪的文本 查找圖形跟查找顏色原理都相同
我以我當初玩熱血印象"在屏幕內查找顏色"來做個小小的說明

首先在VBS動作內 點選下面有一個菜單 裡面有"在屏幕內查找顏色"
之後更下面 會出現小菜單:區域左邊.右邊.上邊.下面.顏色.XY整形變量

1.
我們先設定菜單內"區域"的部分
這時 你可以在熱血內抓點 在你想要的的範圍內抓點 例如我想抓整個螢幕內的範圍
就使用抓點/顏色 在最左上的地方 抓一個點/顏色 然後在最又下方抓一個點/顏色
這樣你就擁有2個座標 第1個點:0.0   第2個點:1023.767 至於抓出來的顏色 不是你需要的不用管
之後你就在小菜單內填上座標
區域左邊的部分全部消除填上0 區域上邊填0 右邊填1023 下邊填767

這裡的意思是 當你把這些數字代表的座標填上 系統就會依照你填的這4個點 假想出一個長方形的範圍
這就表示 當洗使用這個VBS指令時 系統會在這長方形範圍內搜尋 我上面填的點 是整個螢幕的點
所以以這假設來說 他會在整個螢幕內搜尋
以X座標來說 我是從0~1023 就是從最左邊到最右邊
以Y座標來說 我是從0~767   就是從作上面到最下面
所以此時 你範圍也已經鎖定了

2.
在來我們繼續設定下面菜單的"顏色:字串符"
我們此刻回去找怪物 例如我們去山上找到了牛 之後我們依然抓座標/顏色 抓到之後
假設牛身上某地方的顏色代碼是 0000FF   >>>假設 顏色亂打的
然後我們依然在菜單內的顏色:字串符 全部消除 之後填上"0000FF"
這邊要注意 引號( " ) 要記得加入在顏色前後

這邊的意思 就是他在區域內 會開始搜索這個"顏色" 所以這就是抓取屏幕區域內顏色的意思所在
所以在整個螢幕內 腳本會開始找範圍(整個螢幕)內是否有這個顏色存在

3.
輸出X.Y整形變量

也是一樣全部消除 然後填上你想要的英文代碼 例如:gx gy .intX intY (大小寫沒差 只是個代號 )

這裡的意思就是 當佼本在螢幕內搜索你指定的顏色 當在指定的區域內發現這顏色時
他會把這個顏色的存在座標 替代為gx gy 例如我發現一個顏色在 667.453
這時 gx gy代表的就是667.453 這就是整形變量的意思

-------------然後在來我們有了這些 可以開始來製作腳本----------------

我們在此 插入我們設定好的參數值之後 就"插入"

這裡 還有個要學習的 就是控制動作內 有個"如果表達示"     "為真 則"亂碼選單"
這裡就是條件子句 表達示我在這裡的片面解釋 就是 條件成立子句
以這篇熱血VBS來說 當我螢幕內搜索到了一個我指定的顏色點 且我把這點的座標表示為gx gy
可是只是單純這樣的VBS沒有動作 以VBS來說 你只是有找到了這個點 且把這點設為代號了
接下來 動作的部分 就是需要運用較初淺的動作指令來配合

表達示在此熱血VBS的寫法 "如果表達示 gx<>-1 則 (亂碼)"
在表達示內 你要填的 就只有表達示後面的控格 下面亂碼菜單 別理他 我們現在用不到
所以此條件子句 我們就填入條件囉! 我上面填的 只有"gx<>-1"
這裡的意思 在指令動作內 當我們找出gx跟gy 他代表一定的直 不管有沒有找到 他都會有數字
數字分兩類 "-1" "非-1" -1的意思 代表沒找到   非-1 代表有此數值
所以我們條件子句就使用"<>" 大於小於-1 就是非-1辣~這環節 很重要 馬虎不得雖然簡單
在來我們一樣插入 會顯示出>>

如果表達示(gx<>-1)為真,則
條件結束

還有個要設定的 也是VBS菜單內 有個"移動鼠標到某個位址"
這裡也是設定gx gy 跟上面的意思一樣 為何不用普通控制的滑鼠移動呢!?因為你的gx gy不顧定
所以只好用VBS 來設定鼠標座標


這時我們就可以來設置動作囉~
-------------------------------------------------------------------------------------------
以下為範例文本↓(普通文本版)

調用外部VBS子程序   Call在屏幕區域內查找顏色(0.0.1023.767."0000FF".gx.gy)
如果表達示(gx<>-1)為真,則
  調用外部VBS子程序   Call移動鼠標到某個位址(gx.gy)
  左鍵單擊
條件結束


●這文本的解釋為 在區域內0.0.1023.767內找一個顏色0000FF
找到後給予這顏色所在的點座標gx gy之後假如gx<>-1 (就是有找到gx)
就使用VBS的座標移動 把滑鼠移到gx gy也就是顏色所在點上面 然後點滑鼠左邊一下 結束~
所以熱血江湖來說 就在螢幕內找到牛的顏色 發現了這顏色 就可以直接下來的指令
----------------------------------------------------------------------------

這是原文件的版本↓

VBSCall Call FindColor(0,0,1023,767,"0000FF",gx,gy)
If gx<>-1
VBSCall Call SetCursorPos(gx,gy)
LeftClick 1
EndIf


---------------------------------------------

d.常見問題
說明:
小弟在此舉例各種常見的問題來做個回答


[1].我想編寫查找圖形 可是上面沒說明怎麼辦!?

可以參考jakosa大大發表的查找圖形文章
http://www.33wg.com/33wg/read.php?tid=436738&fpage=1
原理都相同 只是設定的部分不同

[2].我的圖形背景是黑色的 可是背景不是我要的顏色 我要怎麼去除!?

可以使用小畫家 把圖形不要的部分 塗改成純白色 按鍵精靈就會認定此白色為透明

[3].我想編寫喝水 可是我喝水有2種 少於1000按a 少於2000按b
可是當條件少於2000時 a條件也是符合 那怎麼辦呢!?

可以使用"樹狀"來解決問題>
當系統搜索A條件成立時 即刻開始判斷此條件下面的子條件 若A條件下面的樹狀子條件有B跟C 2種
A成立時 便會開始判斷 A條件下面的條件 系統會繼續判斷 是屬於B.C 或是都不是 來決定最後條件下的反應動作
白話的說法就是 假如以現實生活來比喻 就是>A條件:我離開家裡出門去 B條件:天氣晴朗 C條件:下雨

        B:天氣晴朗       -------不帶雨傘
A:我出門<
        C:下雨           -------帶雨傘
所以當A成立時 他繼續判斷是屬於B還是C
即 當我出門時 我會繼續判斷外面天氣是晴朗還是雨天 之後採取子條件的動作

可以用以下方式寫文本
                                      B:X<1050   ------喝2000的水
A:當X<2050 執行下面指令>繼續判斷X →
                                      C:X>1050   ------喝1000的水

腳本↓

Rem 起始標記
Gosub 喝水
Delay 300
Goto 起始標記
Sub 喝水
VBSCall Call ReadMemory(&H02646E94,2,X)
If X<2050
  VBSCall Call ReadMemory(&H02646E94,2,X)
  If X>=1050
    KeyPress 120 1
  EndIf
  If X<1050
    KeyPress 121 1
  EndIf
EndIf

[4].我在搜索打怪時 常常怪還沒死就開始搜尋別的怪 怎麼解決!?

可以嘗試使用看看下面腳本

VBSCall Call FindColor(6,60,1013,629,"000C39",GX,GY)
If GX<>-1
  Rem 1
  VBSCall Call FindColor(GX-50,GY-50,GX+50,GY+50,"000C39",MX,MY)
  If MX<>-1
    VBSCall Call GetCursorPos(MX,MY)
    LeftClick 1
    Delay 1000
    LeftClick 1
    Goto 1
  EndIf
EndIf

我這理念是 當我搜尋到一個顏色之後 我"再度"以那個顏色"週遭一定範圍"再次搜尋
且以第2次搜尋到的結果來成為我執行動作的基準

我的目的是當我第一次搜尋到之後 我就把搜尋範圍 固定在那個怪身上 持續搜尋+動作
這樣就可以持續在一個小範圍內搜尋+執行動作 範圍內沒指定顏色的時候
才會整個子程序結束 這樣就可以把一個小範圍定在一個怪附近 解決亂找怪來打的問題

[5].If MX<>-1   不管有沒有找到 一樣執行下面   MX 一定是小於 或大於-1
那這樣不管有沒有找到都是會執行!?

不會的 個人在此提出說明 表達式的判別 "符合為<>-1(大部分為>=0) 不符合為-1"
所以在表達式內 有找到 一定<>-1 只是在查找座標內 "座標"有找到一定>0 (有找到就是有正數)
所以很多人編寫腳本符合直接打>=0 所以有人會誤解說
所有表達式不符合就是<0 而且<>-1 會變成一定符合
大家可以試試看用<>-1 還有=-1 還做個實驗 用自己桌面查找圖形即可
會發現 當沒有找到時 表達式會=-1 不管等於多少 只有-1 沒有找到的時候 才會有反應


--------------------------------------------

以上內容由本人編寫統整 若有錯誤 還請各位見諒
loooangel 2005/10/05/19:37
級別: *
只看該作者 1 發表于: 2005-10-16
級別: *
只看該作者 2 發表于: 2005-10-17
感謝啦
級別: *
只看該作者 3 發表于: 2006-07-20
Re:m{n貉pw{`b
...
級別: *
只看該作者 4 發表于: 2006-07-21
Re:m{n貉pw{`b
...L懂 QQ sh!! !!
級別: *
只看該作者 5 發表于: 2006-08-07
Re:m{n貉pw{`b
你@@貉@忯sp@DLIlE@^@s
級別: *
只看該作者 6 發表于: 2006-08-23
Re:む教學統整め按鍵精靈常用指令統整教學∼基礎篇
詳盡的解說與舉例
讓我受益良多
級別: *
只看該作者 7 發表于: 2006-09-14


您的意思我知道就比如說:人的眼睛

我所看到的範圍 裡面有我要的東西 我就伸手過去拿~但是阿!~

我用以樣的意思寫腳本 那為什麼它滑鼠都不會動餒??

我在桌面上面有試過它會移到圖案上面 ok∼
我開遊戲重抓色卻它動也不動的    no∼

我搞不懂的事 為什麼在遊戲裡面滑鼠不會動餒??
桌布是死的我可以理解!∼

以下是我自己寫的腳 請大大提供我一些小小的意見ㄅ∼



VBSCall Call FindCenterColor(91,383,782,492,"#98FFFF",gx,gy)
If gx<>-1
  VBSCall Call SetCursorPos(gx,gy)
  RightClick 1
EndIf


請大大方便的時候回覆我一下吧!∼ 謝謝