標籤:表徵圖 info 自動 直接 焦點 控制項 右鍵 程式 引擎
7 - 對QQ登入介面的自動輸入思路分析
在開始寫代碼之前我們得好好研究一下QQ的登入介面。本項目中操作的QQ版本號碼為:8.9.5(22062)
自動輸入在c#開發上方法有二:1是擷取輸入框控制項控制代碼然後進行賦值;2是對輸入框控制項進行類比鍵盤輸入,好比我們手打q號密碼變成程式自動幫我們打一樣。
那麼我們怎麼擷取QQ的輸入框控制代碼呢?需要用到一個工具:spy++,運行spy++如:
關於spy++軟體的擷取辦法我想不必多說了吧,搜尋引擎搜一下spy就能下載到了。
在spy++這軟體上我們需要用到的功能只有兩個,我在上已經標註了,AB兩個地方,在B地區右鍵可以重新整理當前案頭的所有程式視窗(本篇暫不需要,提前說明),至於A我們現在開始使用。
單擊A開啟“視窗搜尋”視窗,滑鼠左鍵按住表徵圖,移動滑鼠到需要擷取控制代碼的控制項上就能在搜尋視窗上顯示相應的屬性資訊。
細心的同學應該能發現,在wpf程式上的輸入框、按鈕等控制項無法擷取到控制代碼,而在winform上的程式卻能。同樣是c#的東西這是為什麼呢?借用知乎上的一個回答:winform程式是對傳統windows介面元素的封裝,通過gdi繪製。wpf程式是全新的dx渲染繪製的介面,也脫離了對傳統windows控制項的依賴
簡單的說呢就是wpf的控制項並非控制項,而是畫上去與表單結為一體的東西;winform的控制項是獨立於表單的。(個人理解)
我們回到正題,研究QQ登入介面幹嘛要說這些?先等等,你有沒有想過,qq登入介面是用哪種技術實現的ui呢?我們別急回答,直接用spy++去試試就知道了!
顯而易見
答案是:qq登入介面也是“控制項”表單繪製為一體的。
qq登入介面的“控制項”無法擷取到控制代碼,看來現在自動輸入上方法1是不能用了,所以我們只能使用方法2了。
那麼問題來了,用方法2(類比鍵盤輸入)需要滿足什麼條件?答:輸入焦點。
我們需要將輸入焦點定位在qq號碼/密碼輸入框中,怎麼定位?滑鼠,單擊一下輸入框,OK。
這時候我們需要用到“類比滑鼠操作”的相關技術,讓程式將滑鼠指標移動到qq號碼輸入框內,然後點擊一下輸入框。問題來了,且不談類比滑鼠操作,我們怎麼知道輸入框的座標呢?沒有座標就不能類比滑鼠去點擊輸入框的位置了啊。別急,編程是無所不能的。首先,我們需要擷取到qq登入視窗的幾個資訊:1視窗控制代碼,2座標,3視窗大小。然後就能對輸入框的位置進行計算啦,是不是很簡單呀。
綜上分析,QQ登入介面的自動輸入步驟應如下:
1,擷取登入視窗控制代碼;
2,獲得視窗大小;
3,獲得視窗座標;
4,計算兩個輸入框的位置;
5,類比滑鼠選中輸入框獲得輸入焦點;
6,類比鍵盤輸入,將qq號、密碼輸入。
OK,本篇部落格到此進入尾聲,下一篇,將是項目的結束篇,將思路分析變成代碼,學習如何使用“類比滑鼠操作”、擷取視窗控制代碼、類比鍵盤輸入!
C# WPF MVVM QQ密碼管家項目(7,對QQ登入介面的自動輸入思路分析)