做了一个辅助登陆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

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