C++ Win32 遍历窗口
查找指定窗口
#include <iostream>
#include <windows.h>
using namespace std; int main()
{
TCHAR szTitle[MAX_PATH] = { };
HWND hWnd = ::FindWindow(L"#32770", L"x32Inject");
if (hWnd != NULL)
{
// 修改窗口标题
::SetWindowText(hWnd, L"Hello World!");
}
else
{
::MessageBox(, L"窗口没找到", L"提示", );
}
return ;
}
窗口控制
#include <windows.h> int main()
{
TCHAR szTitle[MAX_PATH] = { };
HWND hWnd = ::FindWindow(L"#32770", L"x32Inject");
if (hWnd != NULL)
{
// 切换窗口
SwitchToThisWindow(hWnd, false);
Sleep();
// 关闭窗口
::SendMessage(hWnd, WM_CLOSE, , );
}
else
{
::MessageBox(, L"窗口没找到", L"提示", );
}
return ;
}
查找子窗口
#include <windows.h> int main()
{
TCHAR szTitle[MAX_PATH] = { };
HWND hWnd = ::FindWindow(L"#32770", L"x32Inject");
if (hWnd != NULL)
{
// 查找子窗口
HWND hEdit = ::FindWindowEx(hWnd, NULL, L"Edit", L"");
// 设置标题
::SetWindowText(hEdit, L"test");
// 修改内容(本案例,内容和标题是一样的)
::SendMessage(hEdit, WM_SETTEXT, , (LPARAM)L"Hello World!");
}
else
{
::MessageBox(, L"窗口没找到", L"提示", );
}
return ;
}
#include <windows.h> int main()
{
TCHAR szTitle[MAX_PATH] = { };
HWND hWnd = ::FindWindow(L"#32770", L"x32Inject");
if (hWnd != NULL)
{
// 查找子窗口
HWND hEdit = ::GetDlgItem(hWnd, 0x3EA);
// 获取内容
::SendMessage(hWnd, WM_GETTEXT, MAX_PATH, (LPARAM)szTitle);
// 修改内容
::SendMessage(hEdit, WM_SETTEXT, , (LPARAM)L"Hello World!");
}
else
{
::MessageBox(, L"窗口没找到", L"提示", );
}
return ;
}
枚举子窗口
#include <windows.h>
#include <stdio.h> BOOL CALLBACK EnumChildProc(HWND hwnd, LPARAM lParam)
{
TCHAR szTitle[MAX_PATH] = { };
::GetWindowText(hwnd, szTitle, MAX_PATH);
;; MessageBox(, szTitle, L"子窗口", MB_OK);
return TRUE;
} int main()
{
TCHAR szTitle[MAX_PATH] = { };
HWND hWnd = ::FindWindow(L"#32770", L"x32Inject");
if (hWnd != NULL)
{
::EnumChildWindows(hWnd, EnumChildProc, NULL);
}
else
{
::MessageBox(, L"窗口没找到", L"提示", );
}
getchar();
return ;
}
枚举所有打开的窗口
#include <windows.h>
#include <stdio.h> BOOL CALLBACK EnumWindowsProc(HWND hwnd, LPARAM lParam)
{
TCHAR szTitle[MAX_PATH] = { };
::GetWindowText(hwnd, szTitle, MAX_PATH);
wprintf(L"%s\n", szTitle);
if (wcscmp(szTitle, L"x32Inject") == )
{
::MessageBox(, szTitle, L"窗口", );
}
return TRUE;
} int main()
{
::EnumWindows(EnumWindowsProc, NULL);
getchar();
return ;
}
模拟鼠标点击
#include <windows.h>
#include <stdio.h>
// 隐藏控制台运行
#pragma comment(linker,"/subsystem:\"windows\" /entry:\"mainCRTStartup\"") int main()
{
TCHAR szTitle[MAX_PATH] = { };
RECT r;
HWND hWnd = ::FindWindow(L"#32770", L"x32Inject");
if (hWnd != NULL)
{
HWND hButton = ::FindWindowEx(hWnd, NULL, L"Button", L"选择程序");
// 获取选择程序窗口坐标
::GetWindowRect(hButton, &r);
// 设置鼠标位置
::SetCursorPos(r.left + , r.top + );
Sleep();
// 鼠标左键单击
mouse_event(MOUSEEVENTF_LEFTDOWN, , , , ); // 按下左键
mouse_event(MOUSEEVENTF_LEFTUP, , , , ); // 松开左键
}
else
{
::MessageBox(, L"没有找到窗口!", L"提示", MB_OK);
}
getchar();
return ;
}
模拟键盘点击(搜索:键盘键与虚拟键码对照表)
#include <windows.h>
#include <stdio.h>
// 隐藏控制台运行
#pragma comment(linker,"/subsystem:\"windows\" /entry:\"mainCRTStartup\"") int main()
{
TCHAR szTitle[MAX_PATH] = { };
RECT r;
HWND hWnd = ::FindWindow(L"#32770", L"SemaphoreEx");
if (hWnd != NULL)
{
HWND hEdit = ::GetDlgItem(hWnd, 0x3E8);
// 获取选择程序窗口坐标
::GetWindowRect(hEdit, &r);
// 设置鼠标位置
::SetCursorPos(r.left + , r.top + );
Sleep();
// 鼠标左键单击
mouse_event(MOUSEEVENTF_LEFTDOWN, , , , ); // 按下左键
mouse_event(MOUSEEVENTF_LEFTUP, , , , ); // 松开左键
// 模拟键盘
keybd_event(, , , );
keybd_event(, , KEYEVENTF_KEYUP, );
Sleep();
keybd_event(, , , );
keybd_event(, , KEYEVENTF_KEYUP, );
Sleep();
keybd_event(, , , );
keybd_event(, , , );
keybd_event(, , KEYEVENTF_KEYUP, );
keybd_event(, , KEYEVENTF_KEYUP, );
}
else
{
::MessageBox(, L"没有找到窗口!", L"提示", MB_OK);
}
getchar();
return ;
}
C++ Win32 遍历窗口的更多相关文章
- 根据获取的窗口句柄遍历窗口Edit控件
网上说遍历窗口控件有两种方法: 1),使用EnumChildWindows,没有深究, 学习网址如下:http://blog.sina.com.cn/s/blog_60ac1c4b010116 ...
- ]用EnumChildWindows遍历窗口的方法
最近项目有需要,得到一个非自己实现的窗口控件对象.于是想起曾经做过类似功能.总结如下: 调用EnumChildWindows(this->m_hWnd, EnumChildProc, NULL) ...
- c++ win32下窗口的最小化到托盘以及还原
框架是用visual studio创建的win32控制台模板,然后自己添加最小化及还原部分代码. 需要额外包含的头文件: #include <shellapi.h> #include &l ...
- Win32 设置窗口透明度 SetLayerTransparent
注意: 在调用SetLayeredWindowAttributes 之前,需要给窗口加上WS_EX_LAYERED属性,否则会无效 void SetLayerTransparent(HWND hWnd ...
- Delphi 查找标题已知的窗口句柄,遍历窗口控件句柄(转)
用我的方法来控制其他程序窗体上的窗口控件,必须先了解什么是 回调函数.我的理解是这样的: 回 调函数写出来不是自己的程序去调用的,反而是让其他的东西去调用,比如windows操作系统,比如其他的程序等 ...
- 如何让win32 c++窗口不出现在任务栏
把窗口作为某一个窗口的子窗口,然后设置WS_POPUP就可以了.使用CreateWindow时的第三个参数设置为WS_CHILD|WS_POPUP.
- Win32子窗口的创建
本文主要是在一个主窗口下创建一个子窗口.主窗口有一个菜单,菜单下只有设置一个选项,点击设置选项,弹出设置界面,点击设置界面关闭则关闭.我在开发的时候遇到两个问题,第一就是一点设置关闭就整个应用都关了, ...
- FMX+Win32,窗口无法保持原样,应该是个bug
从FMX发布开始,一直有这问题,大家看看是不是一个bug,应该如何修复? 新建一个FMX Application,运行后,点击窗口标题栏右上角的“最大化”按钮,此时窗口是最大化的.在windows最底 ...
- Delphi 查找标题已知的窗口句柄,遍历窗口控件句柄
有了回调函数的概念及上面的例子,我们可以继续了.其实想要找到一个标题已知的窗口句柄,用一个API函数就可以了:FindWindow.其函数原形是:function FindWindow(lpClass ...
随机推荐
- 对异步处理的http接口进行性能测试
以前对接口做性能测试,接口都是同步处理的,请求之后等待响应结果就知道处理结果了,这样只要看这个接口是否异常,如果无异常无报错记录这个接口的响应时间.TPS等性能指标进行分析就可以了,最近在工作中遇到了 ...
- NTP时钟同步配置
NTP在Linux下有两种时钟同步方式: 直接同步(也称跳跃同步)和平滑同步(也称微调同步). 直接同步 使用ntpdate命令进行同步,直接进行时间变更. 如果服务器上存在一个12点运行的任务,当前 ...
- excel VBA 密码设置问题
Excel中VBA设置密码的步骤如下: 1.右键点击任何工作表,选择VBAProject属性: 2.在新对话框总,选择“保护”选项卡: 3.勾选查看时锁定,输入密码即可.
- python路径相关技巧
在文件C:\work\python\rqalpha\rqalpha\utils\config.py 找文件:C:\work\python\rqalpha\rqalpha\config.yml 则通过下 ...
- 使用EF 4.1的DbContext的方法大全
简述:EF4.1包括Code First和DbContext API.DbContext API为EF提供更多的工作方式:Code First,Database First和Model First. ...
- [LeetCode] 313. Super Ugly Number 超级丑陋数
Write a program to find the nth super ugly number. Super ugly numbers are positive numbers whose all ...
- byte类型的取值为什么是-128~127
参考:https://blog.csdn.net/qq_22771739/article/details/84496115 https://blog.csdn.net/boatalways/artic ...
- 【Java语言特性学习之一】设计模式
设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代码可靠性. 毫无疑问,设计模式于 ...
- docker+k8s基础篇三
Docker+K8s基础篇(三) kubernetes上的资源 A:k8s上的常用资源 Pod的配置清单 A:Pod上的清单定义 B:Pod创建资源的方法 C:spec下其它字段的介绍 Pod的生命周 ...
- LeetCode 162. 寻找峰值(Find Peak Element) 29
162. 寻找峰值 162. Find Peak Element 题目描述 峰值元素是指其值大于左右相邻值的元素. 给定一个输入数组 nums,其中 nums[i] ≠ nums[i+1],找到峰值元 ...