// 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)
{
//查找子窗口//使用的扩展是FindWindow
HWND 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;
}
捕捉Win32窗口操作
最新推荐文章于 2022-07-16 13:48:53 发布