零基础逆向工程40_Win32_14_枚举窗口_模拟鼠标键盘

1 查找窗口

1.1 代码案例

//查找指定窗口            
TCHAR szTitle[MAX_PATH] = {0};          
HWND hwnd = ::FindWindow(TEXT("#32770"),TEXT("飞鸽传书  IP Messenger"));            
if(hwnd != NULL)            
{           
    //修改窗口标题        
    ::SetWindowText(hwnd,"新的窗口标题");     
}           
else            
{           
    ::MessageBox(NULL,TEXT("窗口没有找到"),TEXT("[ERROR]"),MB_OK);        
}
            
//窗口控制                      
TCHAR szTitle[MAX_PATH] = {0};          
HWND hwnd = ::FindWindow(TEXT("#32770"),TEXT("飞鸽传书  IP Messenger"));            
if(hwnd != NULL)            
{           
    typedef void (WINAPI *PSWITCHTOTHISWINDOW) (HWND,BOOL);     
    PSWITCHTOTHISWINDOW SwitchToThisWindow;     
    HMODULE hUser32=LoadLibrary("user32.dll");      
    SwitchToThisWindow=(PSWITCHTOTHISWINDOW)GetProcAddress(hUser32,"SwitchToThisWindow");       
            
    //切换窗口      
    SwitchToThisWindow(hwnd,false); 

    Sleep(3000);
    //关闭窗口
    ::SendMessage(hwnd,WM_CLOSE,0,0);
}
else
{
    ::MessageBox(NULL,TEXT("窗口没有找到"),TEXT("[ERROR]"),MB_OK);
}

2 查找子窗口

2.1 使用FindWindowEx()函数查找

TCHAR szTitle[MAX_PATH] = {0};      
HWND hwnd = ::FindWindow(TEXT("#32770"),TEXT("飞鸽传书  IP Messenger"));        
if(hwnd != NULL)        
{       
    //查找子窗口 
    HWND hEdit = FindWindowEx(hwnd,NULL,"Edit",""); 
    //设置标题  
    ::SetWindowText(hEdit,"文本框新的标题");   
    //修改内容  
    ::SendMessage(hEdit,WM_SETTEXT,0,(LPARAM)"新的内容");   
}       
else        
{       
    ::MessageBox(NULL,TEXT("窗口没有找到"),TEXT("[ERROR]"),MB_OK);    
}       

2.2 使用资源ID查找

TCHAR szTitle[MAX_PATH] = {0};
HWND hwnd = ::FindWindow(TEXT("#32770"),TEXT("飞鸽传书  IP Messenger"));
if(hwnd != NULL)
{
    //查找子窗口
    HWND hEdit =::GetDlgItem(hwnd,0x3E9);
    //获取内容
    ::SendMessage(hEdit,WM_GETTEXT,MAX_PATH,(LPARAM)szTitle);
    //修改内容
    ::SendMessage(hEdit,WM_SETTEXT,0,(LPARAM)"新的内容");
}
else
{
    ::MessageBox(NULL,TEXT("窗口没有找到"),TEXT("[ERROR]"),MB_OK);
}

3 枚举子窗口控件

BOOL CALLBACK EnumChildProc(HWND hWnd,LPARAM lParam)            
{           
    TCHAR szTitle[MAX_PATH] = {0};          
    ::GetWindowText(hWnd,szTitle,MAX_PATH);             
    MessageBox(NULL,szTitle,"[子窗口]",MB_OK);             
    return true;            
}           
            
VOID EnumChildWindow()          
{           
    TCHAR szTitle[MAX_PATH] = {0};      
    HWND hWnd = ::FindWindow(TEXT("#32770"),TEXT("飞鸽传书  IP Messenger"));        
    if(hWnd != NULL)        
    {       
        ::EnumChildWindows(hWnd,EnumChildProc,0);   
    }       
    else        
    {       
        ::MessageBox(NULL,TEXT("窗口没有找到"),TEXT("[ERROR]"),MB_OK);    
    }       
}

4 枚举所有打开窗口

BOOL CALLBACK EnumOpenWindowProc(HWND hWnd,LPARAM lParam)           
{           
    TCHAR szTitle[MAX_PATH] = {0};          
    ::GetWindowText(hWnd,szTitle,MAX_PATH);             
    MessageBox(NULL,szTitle,"[窗口]",MB_OK);              
        if(strcmp(szTitle,"飞鸽传书  IP Messenger") == 0)       
    {       
        MessageBox(NULL,szTitle,"[窗口]",MB_OK);      
        return FALSE;   
    }       
    return TRUE;            
} 
VOID EnumOpenWindows()          
{
    EnumWindows(EnumOpenWindowProc,NULL);
}

5 模拟鼠标单击

TCHAR szTitle[MAX_PATH] = {0};  
RECT r; 
HWND hwnd = ::FindWindow(TEXT("#32770"),TEXT("飞鸽传书  IP Messenger"));    
if(hwnd != NULL)    
{   
    HWND hButton = FindWindowEx(hwnd,NULL,"Button","刷新(&R)");
    
    //获取窗口坐标
    ::GetWindowRect(hButton,&r);
    
    printf("%d %d",r.left,r.top);
    
    //设置鼠标的位置
    ::SetCursorPos(r.left+10,r.top+10);
    Sleep(2000);
    //鼠标左键单击
    mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0);//点下左键 
    mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0);//松开左键
}   
else    
{   
    ::MessageBox(NULL,TEXT("窗口没有找到"),TEXT("[ERROR]"),MB_OK);
}   

6 模拟键盘点击

TCHAR szTitle[MAX_PATH] = {0};  
RECT r; 
HWND hwnd = ::FindWindow(TEXT("#32770"),TEXT("飞鸽传书  IP Messenger"));    
if(hwnd != NULL)    
{   
    //HWND hButton = FindWindowEx(hwnd,NULL,"Button","刷新(&R)");
    HWND hEdit =::GetDlgItem(hwnd,0x3E9);
    
    //获取窗口坐标
    ::GetWindowRect(hEdit,&r);
    
    //设置鼠标的位置
    ::SetCursorPos(r.left+1,r.top+1);
    Sleep(1000);
    
    //鼠标左键单击
    mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0);//点下左键 
    mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0);//松开左键
    
    //模拟键盘
    keybd_event(97,0,0,0);
    keybd_event(97,0,KEYEVENTF_KEYUP,0);
    Sleep(1000);
    keybd_event(66,0,0,0);
    keybd_event(66,0,KEYEVENTF_KEYUP,0);
    Sleep(1000);
    keybd_event(16,0,0,0);
    keybd_event(67,0,0,0);
    keybd_event(67,0,KEYEVENTF_KEYUP,0);
    keybd_event(16,0,KEYEVENTF_KEYUP,0);
    
}   
else    
{   
    ::MessageBox(NULL,TEXT("窗口没有找到"),TEXT("[ERROR]"),MB_OK);
}   

键盘键与虚拟键码对照表
MSDN:https://msdn.microsoft.com/en-us/library/windows/desktop/dd375731(v=vs.85).aspx
Blog:https://www.cnblogs.com/del/archive/2007/12/07/987364.html

你可能感兴趣的:(零基础逆向工程40_Win32_14_枚举窗口_模拟鼠标键盘)