QQ窗口抓取及如何进行自动化操作

本文在文章开始,先介绍下窗口的抓取软件,Spy++及AccExplorer32.exe,前者是大名鼎鼎的微软出品,几乎可以抓取所有的Windows窗口及控件(其实也是一个窗口),另外一个也是类似,功能可以互补一下。

首先看看两者的界面,在抓取QQ的【查找联系人/群/企业】的窗口时候的情况:

 
Sp++的界面

 
AccExplorer32.exe界面

两者界面不同,不过基本功能有重叠,Spy++提供的功能可能会更多一些,这两个软件都可以对列出的窗口进行一系列的操作,如可以找到相关的窗口信息,窗口位置,以及对各种窗口操作的信息,包括鼠标、键盘等一系列的操作都可以模拟出来,非常强大。 

为了模拟抓取窗口以及对窗口的各种操作,我们可以通过FindWindow和FindWindowEx、SendMessage、PostMessage等Windows消息来进行处理,便可实现基本的窗口、控件操作,另外按钮的操作,我们则可以模拟鼠标单击某个坐标点的方式实现按钮的单击操作模拟。 模拟的QQ界面窗口如下所示,是一个查找窗口的。

 

我们通过抓取窗口信息,我们看到该窗口下面只有两个可见窗口,分别对应两个输入控件,可以发现该窗口的一个输入(账号和昵称输入框中的任何一个)的Class 名称如下所示:

 

首先我们来创建一个界面,如下所示,用来模拟相关的操作。

 

我们在辅助类中定义几个函数用来实现窗口的操作 

          [DllImport("user32.dll")]

         private  static  extern  IntPtr FindWindowEx(IntPtr parent, IntPtr childAfter,  string  className,  string  windowName);

        [DllImport(
" user32.dll " , EntryPoint  =  " FindWindow " )]
        
private  static  extern  IntPtr FindWindowWin32( string  className,  string  windowName);

        [DllImport(
" user32.dll  " )]
        
public  static  extern  int  GetClassName(IntPtr hWnd, [Out] StringBuilder className,  int  maxCount);

        [DllImport(
" user32.dll " )]
        
private  static  extern  int  SendMessage(IntPtr window,  int  message,  int  wparam,  int  lparam);

        [DllImport(
" user32 " , CharSet  =  CharSet.Auto)]
        
private  extern  static  int  SendMessage(IntPtr hWnd,  int  wMsg,  int  wParam,  string  lpstring);

        [DllImport(
" user32.dll " )]
        
private  static  extern  int  PostMessage(IntPtr window,  int  message,  int  wparam,  int  lparam);

     
  

 

在实际的按钮操作代码中,我们简化了具体的操作,只需要调用辅助类就可以了

          private void btnSearch_Click(object sender, EventArgs e)

        {
            Win32Window win 
=  Win32Window.FindWindow( null this .txtWindowName.Text);
            
if  (win  !=  null )
            {
                ArrayList list 
=  win.Children;
                
foreach  (Win32Window sub  in  list)
                {
                    
if  (sub.Visible  &&  sub.ClassName  ==  " ATL:30A4D1D8 " )
                    {
                        sub.SendMessage(WindowMessage.WM_SETTEXT, 
0 this .txtInput.Text);
                    }
                }
            }
            
int  x  =  288 ;
            
int  y  =  328 ;
            win.ClickWindow(
" left " , x, y,  false );
        }
  

 

其中位置信息时通过Spy++监控出来的信息。

 

最后结果如下所示,实现控件内容的修改,并执行了单击按钮的操作,弹出添加好友确认信息。

 


如果要进行进一步的操作,在继续对弹出的窗口进一步分析即可,其他所有的窗口操作,原理一样,这样就可以实现很多程序的自动模拟操作,是不是很方便呢。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
不要看6分这么贵,下载后等10分钟评价+5星即可返还你的积分!! 这个模块是楼主花了几年时间积累维护而成,对于操作windows窗口非常方便,让你脱身于一大堆api函数 ,可以非常自如地操作windows窗口。 例如网页自动上传文件自动操作很多人可能会困惑。那个打开的windows对话框,怎样自动写入路径然后 再点打开呢??使用我们的框架可以轻而易举的实现,而且非常精准,即使最小化非焦点窗口也可以执行 。 因为并非使用的按键精灵那样固定位置坐标点击按钮什么的技术,我们的是全api架构操作。 注意下载后评论+五星评价可返还你的分数!!如果觉得实在6分委屈了可以搜楼主发布的初版,版本升级 一个就加一分的,你可以下载V1.1的那个是1分,V1.6的就是6分!! '=================================================================================== '描 述:一个操作windows窗口的类,可对窗口进行很多常用的操作(clsWindow.cls) '使用范例:Dim window As New clsWindow ' window.getWindowHwndByTitle "计算器" ' window.closeWindow '编 程:sysdzw 原创开发,如果有需要对模块扩充或更新的话请邮箱发我一份,共同维护 '发布日期:2013/06/01 '博 客:http://hi.baidu.com/sysdzw 'Email :sysdzw@163.com 'QQ :171977759 '版 本:V1.0 初版 2012/12/03 ' V1.1 修正了几个正则相关的函数,调整了部分类结构 2013/05/28 ' V1.2 增加属性Caption,可以获取或设置当前标题栏 2013/05/29 ' V1.3 增加了方法Focus,可以激活当前窗口 2013/06/01 ' 增加了方法Left,Top,Width,Height,Move,处理窗口位置等 ' V1.4 增加了窗口位置调整的几个函数 2013/06/04 ' 增加了得到应用程序路径的函数AppName ' 增加了得到应用程序启动参数的函数AppCommandLine ' V1.5 增加了窗口最大最小化,隐藏显示正常的几个函数 2013/06/06 ' 增加了获取控件相关函数是否使用正则的参数UseRegExp默认F ' V1.6 将Left,Top函数改为属性,可获得可设置 2013/06/10 '===================================================================================
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值