1. 程式人生 > >C# WPF MVVM QQ密碼管家項目(7,對QQ登錄界面的自動輸入思路分析)

C# WPF MVVM QQ密碼管家項目(7,對QQ登錄界面的自動輸入思路分析)

gdi qq密碼 分享圖片 進行 技術 實現 密碼 窗體 rdquo

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登錄界面的自動輸入思路分析)