做了一個輔助登陸vpn的小東東——總結一下

由於關了網頁就自動退出vpn了,所以想改變一下。讓vpn的登錄狀態保持在一個自己開發的客戶端上。

 

主要技術點,1,操縱指定窗口 2,操縱html中的指定元素

1,操縱指定窗口的過程:用GetProcessbyName獲取感興趣的進程HANDLE;枚舉進程中的每一個線程,調用EnumThreadWindows;在回調函數中調用GetWindowText根據窗口標題來獲取線程中感興趣的窗口句柄;調用FindWindowEx獲取窗口所包含的子窗口的句柄;調用SendMessage向子窗口發送相應的windows消息,達到操作窗口的目的。

2,操縱html中的指定元素:用webbrowser獲取html文件的控制權;通過捕獲navigating事件來捕捉彈出的https安全框,並通過1中技術自動點擊https安全框中的確認按鈕;通過捕獲documentcompleted事件註冊文檔對象的contextmenushowing和click事件,來達到控制document對象左右鍵點擊的目的,在前一個事件中顯示自己定義的右鍵菜單,將鼠標點處的html對象放到右鍵對象的tag中,並阻止消息下傳,在後一個事件中需要根據是否是來自程序的點擊來決定消息是否下傳,在自己定義的右鍵菜單的命令響應中,根據保存在tag中的html對象,獲取相應的xpath和value作爲配置項保存起來。

3,根據保存的配置項,每次連接時,自動根據xpath找到輸入的位置,然後從ui獲取輸入並且填入相應的位置,最後自動點擊提交按鈕,提交輸入。這個實際是個命令解析的過程,但是由於webbrowser有獨立的後臺執行線程,導致響應的事件如navigating和documentcompleted事件與當前線程異步,但是我們又需要在這些事件發生的點上進行響應的操作,又不好在webbrowser後臺加入同步控制機制,用while忙等可以實現,我們用了timer來實現定時觀測。

4,在ui的設計上用到了一個托盤的技術:用一個notifyIcon控件,配一個顯示圖標和contextmenu;捕獲窗口的deactivate事件使窗口消失;捕獲notifyIcon的雙擊事件使窗口還原;當然也可以捕獲contextmenu中的命令來實現。

 

參考資料羅列一下:

 

 

http://www.7747.net/kf/201011/77514.html

http://www.51cto.com/specbook/22/4218.htm

http://www.zxbc.cn/html/20070419/191.html

http://topic.csdn.net/t/20010806/23/226517.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章