WIN32 列舉視窗 滑鼠鍵盤事件
阿新 • • 發佈:2020-07-16
//查詢視窗
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);
}