1. 程式人生 > 實用技巧 >WIN32 列舉視窗 滑鼠鍵盤事件

WIN32 列舉視窗 滑鼠鍵盤事件

//查詢視窗    
  TCHAR szTitle[MAX_PATH] = {0};                                
    HWND hwnd = ::FindWindow(TEXT("#32770"),"PE工具");                                
    if(hwnd != NULL)                                
    {                                
        //修改視窗標題                            
        ::SetWindowText(hwnd,"
PE工具123"); } else { ::MessageBox(NULL,TEXT("視窗沒有找到"),TEXT("[ERROR]"),MB_OK); }

    //視窗控制                                
                                
    TCHAR szTitle[MAX_PATH] 
= {0}; HWND hwnd = ::FindWindow(TEXT("#32770"),TEXT("PE工具")); 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); }

    //查詢子視窗                                                                
    TCHAR szTitle[MAX_PATH] = {0};                                
    HWND hwnd = ::FindWindow(TEXT("#32770"),"Dialog");                                
    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);                            
    }

//在多個相同類中獲取唯一ID
    TCHAR szTitle[MAX_PATH] = {0};                            
    HWND hwnd = ::FindWindow(TEXT("#32770"),TEXT("吃貨作業"));                            
    if(hwnd != NULL)                            
    {
        //查詢子視窗                        
        HWND hEdit =::GetDlgItem(hwnd,0x3EE); //3EE為ID值                        
        //獲取內容                        
        ::SendMessage(hEdit,WM_GETTEXT,MAX_PATH,(LPARAM)szTitle);                        
        //修改內容                        
        ::SendMessage(hEdit,WM_SETTEXT,0,(LPARAM)"新的內容");                        
    }                            
    else                            
    {                            
        ::MessageBox(NULL,TEXT("視窗沒有找到"),TEXT("[ERROR]"),MB_OK);                        
    }                

//列舉開啟所有子視窗
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("吃貨作業")); if(hWnd != NULL) { ::EnumChildWindows(hWnd,EnumChildProc,0); } else { ::MessageBox(NULL,TEXT("視窗沒有找到"),TEXT("[ERROR]"),MB_OK); } }

//列舉所有開啟視窗                                                        
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,"吃貨作業") == 0)                        
    {                        
        MessageBox(NULL,szTitle,"[視窗]",MB_OK);                      
        return FALSE;                    
    }                        
    return TRUE;                              
}      
                        
VOID EnumOpenWindows()                            
{                            
    EnumWindows(EnumOpenWindowProc,NULL);                        
}                            

//模擬滑鼠點選
TCHAR szTitle[MAX_PATH] = {0};    
    RECT r;    
    HWND hwnd = ::FindWindow(TEXT("#32770"),TEXT("吃貨作業"));    
    if(hwnd != NULL)    
    {    
        HWND hButton = FindWindowEx(hwnd,NULL,"Button","OK");
        
        //獲取視窗座標
        ::GetWindowRect(hButton,&r);
        
        printf("%d %d",r.left,r.top);
        
        //設定滑鼠的位置
        ::SetCursorPos(r.left+10,r.top+5);
        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);
    }

//模擬鍵盤點選(搜尋:鍵盤鍵與虛擬鍵碼對照表)            
    TCHAR szTitle[MAX_PATH] = {0};    
    RECT r;    
    HWND hwnd = ::FindWindow(TEXT("#32770"),TEXT("吃貨作業"));    
    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);
    }