YCT56B 本章主題《外掛入門》
01、熱鍵與窗口 | 02、鼠標鍵盤 | 03、仿QQ尾巴 | 04、座標與顏色 | 05、其他常用功能 | 06、兩個外掛 | 07、模塊註冊 | ... ... |
---------------------------------------------------分割線---------------------------------------------------
01、熱鍵與窗口
熱鍵與表單控制項的控制碼,標題,類名...
先來講解熱鍵,細心的用戶在使用QQ時,當開了兩個QQ,第二個在熱鍵時會出現一個提示框,說是熱鍵註冊失敗,原因是熱鍵衝突。
熱鍵是什麼呢?比如QQ上收到了有資訊時,按下 Ctrl + Alt + Z 時會彈出新的聊天對話方塊。
這堛 Ctrl + Alt + Z 一按,不管你當時是在做什麼,都會彈出那個QQ聊天框的組合按鍵,就叫做熱鍵。
由此可見,熱鍵就是屬於那種,不管你在任何的軟體上做什麼事務,只要一按下曾經註冊過的那組按鍵,
系統就會去調用被註冊熱鍵時指定的副程式代碼來執行。
下面我們來設計一個簡單的熱鍵程式,源代碼參考本節第一例。
窗口佈局如下
![]()
然後編寫代碼如下
![]()
熱鍵的編寫如上面的代碼,然後可以調試或編譯成EXE文運行,試試按下 Ctrl + Alt + Q 會有什麼反應,
還有按 home 這個鍵又有什麼反應,如果什麼反應都沒有話,看看代碼上有沒有錯誤,
或 到外掛網站上,下載最新的模組來用。
上面的代碼對於熱鍵進行了初步的講解,不是很明白的話不要緊,用多了後自然會明白的。
再來講解窗口控制碼。
在上面的熱鍵堙A我們用到了一個 _啟動視窗.取視窗控制碼(),,,後面的,視窗控制碼是什麼是很重要的,
在外掛的編程生涯中,離不開這個視窗控制碼,事實上,除了這個視窗控制碼外,還有一大堆的各種各樣的控制碼。
視窗控制碼是一個數值型資料,這個數值佔用4位元組記憶體,等於一個整數型的變數所用的記憶體4位元組長度,
所以可以用整數型變數來存放 視窗控制碼,
視窗控制碼的作用是用來標識某個視窗表單或控制項用的,可以通過這個控制碼對那個視窗進行各種的操作與調整。
外掛就是要用來控置與操作遊戲,所以離不開這個視窗控制碼。
視窗控制碼在有效時間是在某個視窗或控制項初始創建時被系統分配的,直到這個控制項或視窗被銷毀後,視窗控制碼才會失效。
每個控制項在創建時被分配的視窗控制碼都是隨機的,
也就是說,一個軟體,這次運行時他的主視窗句配,與下次運行時的是不同的。
一個視窗控制碼只能標識一個控制項,不會出現兩個相同的控制碼來標識兩個不同的控制項。
上面對於視窗控制碼這個概念進行了初步的講解,可能有些模糊,下面我們就來實際應用一下,實踐才是真理。
再來設計一個程式,介面如下,源代碼參考本節第二例。
![]()
在視窗佈局上,放上一些常用的控制項
![]()
從上例我們瞭解到,視窗控制碼是隨機的,每次都會分配得不同,同時,不管是視窗本身還是視窗上的控制項,都有他們的控制碼。
上例所顯示出的控制碼,是用易語言堛 取視窗控制碼() 得到的,這回我們再去試試,從別的軟體上得到它的視窗控制碼。
上面有提到,可以通過視窗控制碼,控制和操作遊戲軟體或其他別人的軟體,前提還是先取到那個軟體的視窗或控制項現在控制碼。
有了正確的控制碼,才能進行操作。
其實,一個視窗或控制項,它除了有控制碼外,還有其他的一些屬性,
如,視窗的標題,類名,內容,位置與大小等等資訊。
windows作業系統雖然可以同時運行很多個軟體,但是,每次只能有一個軟體來接受用戶的輸入,
也就是指,只能有一個軟體處於可接受用戶操作的啟動狀態。
下面,我們來設計第三個例子,獲取當前正處於啟動狀態的視窗的視窗控制碼,並且,得到這個視窗的標題與類名資訊。
第三例介面如下,源代碼參考本節第三例。
![]()
從第三例中,我們明白了,一個視窗或者控制項,他們的類名是基本不變的,
即使重啟這個軟體也不會變,但對於標題,很多的軟體是可以在運行階段中使用代碼去改
變的或被其他的軟體修改掉的,而視窗控制碼,是每次在被創建時由系統分配的,無法改變,只有重啟軟體才會變。
如果有兩個視窗,他們的標題類名相同的話,
一次只能獲取一個視窗的控制碼,
下次才能再獲取到另一個視窗的控制碼,需要另外加以分析,判斷出哪個控制碼是哪個視窗的才行。
第四例介面如下,源代碼參考本節第四例。
![]()
![]()
對於單開的遊戲,可以使用 取表單控制碼(類名,標題)
來獲取其視窗的控制碼,
對於多開的視窗如還要獲取其視窗內部的控制項控制碼,
則必需得借助 查找視窗(父控制碼,起始控制碼,類名,標題)
另外,從上面的例子,還瞭解到了,原來在使用函數時,
函數中的有些參數被 [] 括弧括起來的被稱為可空參數,可空參數也就是可以省略的參數。
如 取表單控制碼([類名],[標題]) 該函數共有兩個參數,同時兩個參數都是可空可省略的。
例.想要兩個參數都省略可以編寫如下代碼
取表單控制碼() 或
取表單控制碼( , )
例.想要省略第二參數,提供第一參數時
取表單控制碼(視窗類名) 或
取表單控制碼(視窗類名, )
例.想要省略第一個參數只使用第二參數時,注意這堥洏峇F
號把第一參數與第二參數進行分隔
取表單控制碼( 視窗的標題)
例.兩個參數都使用時,與平時的其他函數用法一致
取表單控制碼(視窗類名,視窗標題)
這是外掛第三章堛熔臚@節教材,共分為四例,
分別講解了熱鍵的用法與以窗口標題類名獲取批配的視窗的視窗控制碼,
或用,某個視窗控制碼來獲取該視窗的標題與類名。
=============================================================================================================================
02、鼠標與鍵盤。
子控制項控制碼與滑鼠類比,鍵盤類比 。
本節要講解的是,如果在一個視窗上再分析獲取該視窗內的子控制項的控制碼,
另外還要講解一下,有關如何去類比滑鼠,鍵盤去完成一些動作。
上節就有多次提到,若要分析視窗內控制項的控制碼,需要使用 查找視窗()
這個功能,現在就要講解這個功能是如何實現的。
在一個視窗上的一個控鈕,是屬於這個視窗的子控制項,視窗本身也是一個控制項,
所以,這個視窗也就是這個按鈕的父控制項。
![]()
上圖說明瞭,在視窗上的各種控制項,都是有層次之分的,都有父控制項與子控制項層層相關的,
所以,如果我們想要找到 按鈕3 的這個子控制項的控制碼的話,就必需先找出 _啟動視窗 這個視窗的控制碼,
然後再找出 分組框1 的控制碼,接著還要找出選擇夾1 的控制碼,
最後才到了找 按鈕3 的控制碼,很麻煩的是吧,但也只能這樣一層一層的找下去才行。
當然也有另外的一種比較直接的方法,就是上節的那個,把座標指定到視窗的某處,從而取得該處座標下的控制項的控制碼。
綜合上面的兩種方法,第一種是最好的,但卻也是麻煩的,第二種是最容易實現的,
但卻會出些偏差,如果目標的視窗與其內部的控制項在位置上不固定會移動的話,第二種方式就無效了。
現在我們要用第二種的方式,在滑鼠停留的座標點上,獲取他的控制碼,
然後,以這個控制碼,逐行的得到他的父控制碼上去。
在得到了一個子控制項的所有上級父控制碼後,才可以更好的使用第一種方式來逐層的查找到子控制項的控制碼。
源代碼見本節第一例
![]()
上例演示了,使用 取座標視窗() 與 取父視窗()
兩個功能完成的,對某座標處控制項的分析出及它的所有父級控制項的分析……
再來,讓我們設計一個程式,先獲取到 計算器 的視窗控制碼,再去獲取這個 十六進位 的單選框的控制碼試試,如果能獲取到這個控制碼,說明用戶把計算器切換到了科學型 ,若獲取不到,說明計算器當前是處於 標準型。
源代碼見本節第二例
![]()
上面的兩例,基本上介紹了如何獲取一個子控制項的控制碼後依次獲取其父級控制碼,
同時也介紹了,通過其父級控制碼,再逐級查找到需要的那個子控制項的控制碼。
不知道大家學控制碼的這幾節有沒有學得煩了?^ ^
現在開始,來點稍有意思的功能,讓我們來初步的實現去控置另一個程式吧,
當然,這媮椄O離不開控制碼的。
源代碼見本節第三例
![]()
然後編輯搜索的那個按鈕1的代碼。
![]()
分析出計算器上的四個進制切換單選框的控制碼.
![]()
![]()
![]()
上例對計算器程式上實現了滑鼠的簡單類比,
其實,不管是這個不起眼的計算器程式還是網路遊戲,其類比的原理也都是那麼回事的。
會一樣基本上也就等於會另一樣,同時上例,相信大家也體會到了控制碼是用在什麼時候什麼場合了吧!
下面,我們再來做個再好點的,這回換用鍵盤來類比。
源代碼見本節第四例
![]()
![]()
![]()
![]()
對於一些控制項需用滑鼠去點擊,且對於滑鼠的座標點沒有什麼要求的話,完全可以用 鍵盤按下( 控制碼, #回車鍵) 來代替使用的。
=============================================================================================================================
03、仿QQ尾巴。
本節是為前第一節與第二節的技術做次總結與應用。
記得早期,曾經有一度QQ尾巴病毒比較狂,一旦中了這種病毒,
以後你只要上QQ,一點與某好友聊天,那個QQ尾巴就會自動的在你的聊天資訊後面加上它的一些文字或廣告這類的發送出去。
很多人以為自已的QQ中毒了,壞了,紛紛卸載掉QQ後重新下載安裝,
結果還是不能解決問題,也有人找殺毒軟體,然而殺毒軟體能殺出的卻又沒有幾種,
結果卻還把系統給殺壞了,更有的重裝作業系統等,當然,重裝了作業系統後,解決了問題。
其實,QQ尾巴算不上病毒,也不是木馬,只不過其傳播的方式,與自我保護的的機制採用了一些木馬病毒方面的技術。
這堙A我們要討論的是如何實現像QQ尾巴的那樣,能夠監視到QQ聊天框,把一段預設的內容複製到QQ聊天框堥疇B發送出去。
先需要做的就是,分析出QQ聊天框上的 發送按鈕的控制碼標題與類名,
還有QQ聊天框上的文本框的控制碼,與類名。以及他們的所有父級視窗資訊。
![]()
![]()
分別獲取QQ聊天框上的 發送按鈕 與欲發送出去的 內容文本框 的類名與標題以及它們的所有父級控制項資訊。
多開幾種不同的聊天框,會發現,群聊天視窗,與好友聊天視窗。
臨時會話聊天視窗等的標題都是不同的,為了能分析出。
當前正被啟動的視窗是不是QQ聊 天視窗,就只能使用,視窗的類名進行核對了 #32770 這個就是QQ視窗的類名了,
另外,同樣的QQ主視窗的類名也是這個,很多很多的視窗的類名也都有可能是這樣的,
為了區別用類名找到的視窗是QQ主視窗還 是聊天框,還得再利用QQ聊天框上的 發送按鈕,
幸好這個發送按鈕的標題與類名都是固定的,嘿嘿!
下面讓我們來設計這個仿QQ尾巴的軟體吧。
源代碼見本節第一例
![]()
![]()
運行程式後,然後開任意QQ聊天框,就會發現,軟體會把預定的文本自動發送出去了。
注意,上面的按鈕控制碼是屬於第三層的,,文本框控制碼是屬於第四層的。
效果如下圖
![]()
本節用到了,靜態屬性的局部變數。另外還用到了一個功能 置控制項內容() 另外還有:
取窗口標題()
置窗口標題()
取控制項內容()
置控制項內容()
輸出文本()
粘貼文本()
其實,視窗標題與控制項內容基本上是屬於同一屬性的,兩者之間基本上還是通用的,
但在模組中這兩種的方式是不同的,建議,對於表單時,用取視窗標題與置視窗標題,
對於控制項方面的用取控制項內容與置控制項內容。
=============================================================================================================================
04、座標與顏色。
本節要講解的是滑鼠座標與顏色方面的知識。
在第二節類比滑鼠時曾提到過座標 這個東西。
滑鼠在螢幕或在某控制項上的左邊0與頂邊0起開始以圖元點計算,是以一條橫線,一條縱線的最終的交叉點稱為座標位。
通常,我們的windows作業系統設置的屏暮解析度是 橫800圖元 縱600圖元 或者 橫1024圖元 縱768圖元
而顏色品質為 中(16位) 或 最高(32位)
![]()
在這堙A包括未來的教材所提到的座標,都是以 圖元 為單位的。
下面我們來設計一個程式,檢測一下,
當前滑鼠的正停留在什麼座標點上,並且,取得他的橫坐標距離與縱坐標距離。
源代碼見本節第一例
![]()
由上圖可見,一個滑鼠所停留的位置,會因為不同的視窗的距離不同,而返回的橫縱坐標都是不同的。
當取滑鼠時不提供參數一,返回的座標是相對於螢幕的起始點,
若提供了一個視窗控制碼
則返回的座標是與該視窗控制碼所對應的那個控制項的左邊有頂邊的橫縱距離。
除了可以獲取當前滑鼠停留的座標點外,還是可以用代碼,把滑鼠給移到某座標點上的。
下面就要設計一個,能把滑鼠移動到某處的程式。
源代碼見本節第二例
![]()
程式運行後,會把滑鼠始終移向當前啟動狀態的那個視窗的有一定距離的座標處。
在初級的動作式外掛中,有一項功能是很重要的,就是獲取某座標點上的顏色值,進行判斷,
然後決定該如何做,這樣可以實現外掛的一些智慧工作。
如果說吧,一個遊戲堙A其血條通常會有兩種顏色,在這兩種顏色的臨界點為血值位置,
以紅色代表為有血部份,以灰色代表為失血部份。如果,我們在這個血條的某位置不斷的進行檢查該處的顏色是紅的還是灰的,
如果是灰的就去類比鍵盤去按下某鍵吃藥等動作。這樣的功能就有點意思了,也有了點像按鍵精靈的那類 的功能。
所以,在某座標點上,獲取該圖元點的顏色值就顯示重要了。
源代碼見本節的第三例
![]()
![]()
上面的兩例中的,滑鼠座標是根據視窗控制碼所指定的那個視窗的左邊與頂邊的位置而定位的。
但有時候在實際應用中,這種方式還欠缺點靈活性。
比如說,我們得到了一座標是相對於一個視窗的距離,
而已時,我們又很想知道,
當前的這個座標距離螢幕的左邊與頂邊的距離又是多少時,就得用另外的功能進行轉換了。
下面的實例將演示,如何把控制項的距離座標與螢幕的距離座標之間進行轉換。
![]()
基於上圖所講的內容,我們再來做個演示程式。
本節源代碼見第四例
![]()
![]()
座標轉換是比較簡單,但卻不容易理解與掌握的一項,
雖然只有兩個功能,對於那類視窗的程式或遊戲,是經常用到的……學者需要自已多嘗試實驗幾次,理解堶悸滬麮z一下吧。
=============================================================================================================================
05、其他常用功能。
除了上面有介紹的外,在動作模擬式外掛方面的技術還有一些。
取座標顏色值可以獲取某座標處的當前顏色,然後可以用以判斷,該顏色是否需要監控的那色,再執行相應的代碼。
這埵A講解一項,顏色的掃描。
比如說,我們想要在某個範圍內,找到與某指定顏色值相同的那處座標時,就得用 顏色值掃描() 這個功能,
可以在指定的一個 矩形範圍(即一個方形的)內部進行掃描批配的一個顏色值最先出現的那個座標點,返回該座標。
外掛模組中的這個 顏色值掃描 的功能比較強大的,提供了十種掃描的方向,分別是。
1.從上到下
2.從下到上
3.從左到右
4.從右到左
5.左上右下
6.右上左下
7.右下左上
8.左下右上
9.從外到內
10.從內到外。
另外,還提供了可以自由設置的掃描步長與掃描跨度。
掃描步長是指掃描時一條直線路的每圖元點的間隔,掃描跨度是指每行每圈的素點間隔。
最後,當有成功掃描到時返回真,沒有掃描到批配的顏色時返回假。
如果返回真,可以在最後的一個提供的座標變數中得到,那個圖元所在的螢幕座標位元。
下面來設置這個軟體
源代碼見本節第一例
![]()
上例演示了簡單的顏色掃描的功能。
雖然前幾節,介紹了如何用滑鼠,或用鍵盤去類比單擊等功能,
但是,那些只能針對於一般的控制項,如果是功能表的話,就比較麻煩了!
有沒有更好的辦法直接操作功能表堛漸\能呢,見下面的這例。
源代碼見本節第二例
![]()
在菜單方面的操作的功能還有其他的一些
取視窗功能表()
取子功能表控制碼()
取菜單專案數()
取菜單標題()
啟動菜單()
單擊菜單專案()
選中菜單專案()
下面再來設計一個軟體,可以把別人的軟體上的灰色的按鈕,就是那種控制項處於禁止使用狀態的,
把它的禁止狀態改為假,從而可以使用這類的禁止使用的控制項變成可用。
源代碼見本節第三例
![]()
有時候外掛也得需要有獲取或設置系統螢幕解析度方面的屬性,見下例的實例功能
源代碼見本節第四例
![]()
上圖就是獲取系統的螢幕解析度設置狀態
![]()
注意上面的,參數二 自動恢復的作用。另外需要注意的就是,要設置螢幕的解析度,
必需按照固定的圖元比例,如 寬800 高600 或 寬1024 高768 絕對不用設置像 寬1000 高500這類的系統不支援的比例。
在早年的windows98系統下,很多的軟體上使用的密碼框都是用編輯框的,
那時曾有一種功能比較流行的就是星號密碼顯示,可以把別的軟體上密碼框的內容顯示出來。下面我們就來編這個例子。
源代碼見本節第五例
![]()
這年頭,顯星號的方式也已經不通用了,因為很多的軟體作者都會對密碼框進行特殊處理了的。
這例主要要學習的就是這個 取焦點控制項() 的作用與使用即可。
=============================================================================================================================
06、兩個外掛。
本節,對上面的顏色與模擬進行一次結合與練習,設計兩個簡單的外掛出來玩玩。
下面以九遊的一個大型網路3D遊戲為例,設計一個自動補血的外掛。
![]()
注意上面對血條方面的分析。
下麵來設計程式。
源代碼見本節第一例
![]()
![]()
![]()
![]()
程式的代碼與思路見上面的這幾圖,主要就是在遊戲堥一個指定的座標處顏色進行判斷,
然後去類比指定的鍵盤,類似于按鍵精靈,腳本大師這類的軟體的功能。
下面再來個冒險島的簡單例子。
![]()
源代碼見本節第二例
![]()
上面做了兩個簡單的例子,如果你曾經使用按鍵精靈或腳本大師編過腳本的話,
應該能很容易理解堶悸滬麮z的。
事實上,上面的兩例都是一些動作模擬來完成的,也算不上外掛,
真正的外掛需要有更好更加智慧的功能做進去。
比如記憶體方面封包方面的……
---------------------------------------------------分割線---------------------------------------------------
|