SPY++的使用

Spy++ (SPYXX.EXE) 是一个基于 Win32 的实用工具,它提供系统的进程、线程、窗口和窗口消息的图形视图。使用 Spy++ 可以执行下列操作: 
1、显示系统对象(包括进程、线程和窗口)之间关系的图形树。 
2、搜索指定的窗口、线程、进程或消息。 
3、查看选定的窗口、线程、进程或消息的属性。 
4、直接从视图中选择窗口、线程、进程或消息。 
5、通过鼠标定位,使用查找程序工具选择窗口。 
6、使用复杂的消息日志选择参数设置消息选项。
 
示例1:利用spy找到窗口类名及标题
HWND proc = FindWindow("TForm1","NetSetMan");   
if(proc)   
{   
    HWND h1 = NULL;   
    char className[32];   
    char capitalName[32];   
  
    while(h1 = FindWindowEx(proc,h1,NULL,NULL))   
    {   
        GetClassName(h1,className,sizeof(className));   
        CWnd::FromHandle(h1)->GetWindowText(capitalName,sizeof(capitalName));   
        printf("%s:%s/n",className,capitalName);   
  
        HWND h2 = NULL;   
        //while(h2 = FindWindowEx(h1,h2,NULL,NULL))   
        //{   
        //  GetClassName(h2,className,sizeof(className));   
        //  CWnd::FromHandle(h2)->GetWindowText(capitalName,sizeof(capitalName));   
        //  printf("/t%s:%s/n",className,capitalName);   
        //     
        //  if(strcmp(capitalName,"应用") == 0)   
        //  {   
        //      CWnd::FromHandle(h2)->SendMessage(BM_CLICK);   
        //  }   
        //}   
           
        if(h2 = FindWindowEx(h1,NULL,"TTntButton.UnicodeClass","应用"))   
        {   
            CWnd::FromHandle(h2)->SendMessage(BM_CLICK);   
        }   
    }   
}else  
{   
    printf("process not found!/n");   
}
 
示例2:当控件没有标题时可以通过排列位置找到该控件
HWND proc = FindWindow("MrTalk_clazz","MediaRing Talk");   
HWND my1 = NULL;   
HWND my2 = NULL;   
if(proc)   
{   
    HWND h1 = NULL;   
    char className[32];   
    char capitalName[32];   
  
    while(h1 = FindWindowEx(proc,h1,NULL,NULL))   
    {   
        GetClassName(h1,className,sizeof(className));   
        CWnd::FromHandle(h1)->GetWindowText(capitalName,sizeof(capitalName));   
        //printf("%s:%s/n",className,capitalName);   
  
        int index = 0;   
        HWND h2 = NULL;   
        while(h2 = FindWindowEx(h1,h2,NULL,NULL))   
        {   
            ++index;   
            GetClassName(h2,className,sizeof(className));   
            CWnd::FromHandle(h2)->GetWindowText(capitalName,sizeof(capitalName));   
            //printf("/t%s:%s/n",className,capitalName);   
  
            if(index == 6)   
            {   
                my1 = h2;   
                ((CComboBox *)CWnd::FromHandle(h2))->SetCurSel(0);      
            }   
  
            if(index == 17)   
            {   
                my2 = h2;   
                CWnd::FromHandle(h2)->SendMessage(BM_CLICK);   
            }   
        }   
    }   
}else  
{   
    printf("process not found!/n");   
}

 

posted @ 2011-03-27 15:28  Leung文  阅读(512)  评论(0编辑  收藏  举报