捕捉Win32窗口操作

来源:互联网 发布:乐视无线显示网络异常 编辑:程序博客网 时间:2024/05/22 14:37
// CreateProcessSuspend.cpp : 定义控制台应用程序的入口点。////在桌面打开记事本,然后通过spy++来查看窗口的类和标题,或者句柄(不推荐直接使用句柄,因为会程序关闭后会改变)#include "stdafx.h"#include <windows.h>#pragma  comment(linker,"/subsystem:\"windows\" /entry:\"mainCRTStartup\"")//隐藏控制台,方便查看效果/*修改窗口标题*/void ModifyWindowText() {TCHAR szTitle[MAX_PATH] = { 0 };HWND hWnd = ::FindWindow(TEXT("Notepad"), TEXT("无标题 - 记事本"));if (hWnd!=NULL){::SetWindowText(hWnd,TEXT("我的记事本"));}else {MessageBox(NULL, TEXT("找不到窗口"), TEXT("提示"),0);}}/*窗口控制*/void DialogConsole() {TCHAR szTitle[MAX_PATH] = { 0 };HWND hWnd = ::FindWindow(TEXT("Notepad"), TEXT("无标题 - 记事本"));if (hWnd != NULL){/*typedef void (WINAPI *PSWITCHTOTHISWINDOW)(HWND, BOOL);PSWITCHTOTHISWINDOW SwitchToThisWindow;HMODULE hUser32 = LoadLibrary("user32.dll");SwitchToThisWindow = (PSWITCHTOTHISWINDOW)GetProcAddress(hUser32, "SwitchToThisWindow");*///切换窗口SwitchToThisWindow(hWnd,true);Sleep(3000);::SendMessage(hWnd, WM_CLOSE, 0, 0);}else {MessageBox(NULL, TEXT("找不到窗口"), TEXT("提示"), 0);}}/*查找子窗口*/void FindSubWnd() {TCHAR szTitle[MAX_PATH] = { 0 };HWND hWnd = ::FindWindow(TEXT("Notepad"), TEXT("无标题 - 记事本"));if (hWnd != NULL){//查找子窗口//使用的扩展是FindWindowHWND hSubWnd = ::FindWindowEx(hWnd, NULL,TEXT("Edit"), TEXT(""));//HWND hSubWnd = GetDlgItem(hWnd, 0xF);::SendMessage(hSubWnd, WM_SETTEXT, 0, (LPARAM)TEXT("新的内容"));}else {MessageBox(NULL, TEXT("找不到窗口"), TEXT("提示"), 0);}}/*枚举子窗口函数*/BOOL CALLBACK EnumSubProc(HWND hwnd,LPARAM lpParam) {TCHAR szTitle[MAX_PATH] = { 0 };::GetWindowText(hwnd, TEXT(szTitle), MAX_PATH);MessageBox(NULL, szTitle, TEXT("hello"), 0);return true;}/*枚举子窗口*/void EnumSubWnd() {TCHAR szTitle[MAX_PATH] = { 0 };HWND hWnd = ::FindWindow(TEXT("Notepad"), TEXT("无标题 - 记事本"));if (hWnd != NULL){::EnumChildWindows(hWnd,EnumSubProc,0);}else {MessageBox(NULL, TEXT("找不到窗口"), TEXT("提示"), 0);}}/*枚举子窗口函数*/BOOL CALLBACK EnumOpenProc(HWND hwnd, LPARAM lpParam) {TCHAR szTitle[MAX_PATH] = { 0 };::GetWindowText(hwnd, TEXT(szTitle), MAX_PATH);MessageBox(NULL, szTitle, TEXT("hello"), 0);if (strcmp(szTitle,TEXT("无标题 - 记事本"))==0){MessageBox(NULL, szTitle, TEXT("找到了"), 0);return false;}return true;}/*枚举子窗口*/void EnumOpenWnd() {TCHAR szTitle[MAX_PATH] = { 0 };HWND hWnd = ::FindWindow(TEXT("Notepad"), TEXT("无标题 - 记事本"));if (hWnd != NULL){::EnumWindows(EnumOpenProc,NULL);}else {MessageBox(NULL, TEXT("找不到窗口"), TEXT("提示"), 0);}}void SimulateKeyEvent() {TCHAR szTitle[MAX_PATH] = { 0 };RECT r;HWND hWnd = ::FindWindow(TEXT("CalcFrame"), TEXT("计算器"));if (hWnd != NULL){::GetWindowRect(hWnd, &r);printf("%d %d", r.left, r.top);//设置鼠标位置::SetCursorPos(r.left+330, r.top+330);Sleep(2000);SwitchToThisWindow(hWnd, true);//鼠标左键单击mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);//点下左键mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);//松开左键}else {MessageBox(NULL, TEXT("找不到窗口"), TEXT("提示"), 0);}}/*模拟键盘输入*/void SimulateKeyBoardInput() {TCHAR szTitle[MAX_PATH] = { 0 };RECT r;HWND hWnd = ::FindWindow(TEXT("Notepad"), TEXT("无标题 - 记事本"));if (hWnd != NULL){HWND hSubWnd = GetDlgItem(hWnd, 0xF);::GetWindowRect(hSubWnd, &r);SwitchToThisWindow(hWnd, true);::SetCursorPos(r.left+100, r.top+100);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(97, 0, 0, 0);keybd_event(97, 0, KEYEVENTF_KEYUP, 0);Sleep(1000);keybd_event(97, 0, 0, 0);keybd_event(97, 0, KEYEVENTF_KEYUP, 0);Sleep(1000);keybd_event(97, 0, 0, 0);keybd_event(97, 0, KEYEVENTF_KEYUP, 0);Sleep(1000);}else {MessageBox(NULL, TEXT("找不到窗口"), TEXT("提示"), 0);}}int main(){//ModifyWindowText();//DialogConsole();//FindSubWnd();//EnumSubWnd();//EnumOpenWnd();//SimulateKeyEvent();SimulateKeyBoardInput();    return 0;}

原创粉丝点击