zoukankan      html  css  js  c++  java
  • 零基础逆向工程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

  • 相关阅读:
    第三周作业
    第二周作业
    第一周作业
    第三次作业
    第二次作业
    c语言最后一次作业
    第14、15教学周作业
    第七周作业
    第六周随笔
    第四周作业
  • 原文地址:https://www.cnblogs.com/flatcc/p/7912013.html
Copyright © 2011-2022 走看看