查找指定窗口

#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 遍历窗口的更多相关文章

  1. 根据获取的窗口句柄遍历窗口Edit控件

    网上说遍历窗口控件有两种方法: 1),使用EnumChildWindows,没有深究,     学习网址如下:http://blog.sina.com.cn/s/blog_60ac1c4b010116 ...

  2. ]用EnumChildWindows遍历窗口的方法

    最近项目有需要,得到一个非自己实现的窗口控件对象.于是想起曾经做过类似功能.总结如下: 调用EnumChildWindows(this->m_hWnd, EnumChildProc, NULL) ...

  3. c++ win32下窗口的最小化到托盘以及还原

    框架是用visual studio创建的win32控制台模板,然后自己添加最小化及还原部分代码. 需要额外包含的头文件: #include <shellapi.h> #include &l ...

  4. Win32 设置窗口透明度 SetLayerTransparent

    注意: 在调用SetLayeredWindowAttributes 之前,需要给窗口加上WS_EX_LAYERED属性,否则会无效 void SetLayerTransparent(HWND hWnd ...

  5. Delphi 查找标题已知的窗口句柄,遍历窗口控件句柄(转)

    用我的方法来控制其他程序窗体上的窗口控件,必须先了解什么是 回调函数.我的理解是这样的: 回 调函数写出来不是自己的程序去调用的,反而是让其他的东西去调用,比如windows操作系统,比如其他的程序等 ...

  6. 如何让win32 c++窗口不出现在任务栏

    把窗口作为某一个窗口的子窗口,然后设置WS_POPUP就可以了.使用CreateWindow时的第三个参数设置为WS_CHILD|WS_POPUP.

  7. Win32子窗口的创建

    本文主要是在一个主窗口下创建一个子窗口.主窗口有一个菜单,菜单下只有设置一个选项,点击设置选项,弹出设置界面,点击设置界面关闭则关闭.我在开发的时候遇到两个问题,第一就是一点设置关闭就整个应用都关了, ...

  8. FMX+Win32,窗口无法保持原样,应该是个bug

    从FMX发布开始,一直有这问题,大家看看是不是一个bug,应该如何修复? 新建一个FMX Application,运行后,点击窗口标题栏右上角的“最大化”按钮,此时窗口是最大化的.在windows最底 ...

  9. Delphi 查找标题已知的窗口句柄,遍历窗口控件句柄

    有了回调函数的概念及上面的例子,我们可以继续了.其实想要找到一个标题已知的窗口句柄,用一个API函数就可以了:FindWindow.其函数原形是:function FindWindow(lpClass ...

随机推荐

  1. win10如何删除自己设置过的头像

    把      %appdata%\Microsoft\Windows\AccountPictures  输入到地址栏  然后删除你想删除的照片即可

  2. MySql通过数据库文件恢复数据库

    以表”Table”为例: 如类型是MyISAM, 数据文件则以”Table.frm””Table.MYD””Table.MYI””三个文件存储于”/data/$databasename/”目录中. 如 ...

  3. [E2E_L7 51CTO]进一步解析OpenVINO提供的例子并且独立出来(win+vs)

    一.例子概览 上图中标红的都是可以运行的例子,在上一个博客中已经提示.其它的是工具等辅助内容. 例子可以简单分为3类,一类是 这个是和OpenCV相关的,可以参考: 一类是 这个是入门的,优先学习 余 ...

  4. Python3.7安装(解决ssl问题)

    摘自:https://blog.csdn.net/love_cjiajia/article/details/82254371 python3.7安装(解决ssl的问题) 1) 安装准备 yum -y ...

  5. PP篇11 增、改生产订单组件BAPI

    增.改生产订单组件BAPI BAPI_ALM_ORDER_MAINTAIN USE BAPI_ALM_ORDER_MAINTAIN TO CREATE OR CHANGE PM WORK ORDER ...

  6. centos7升级openssh

    注意: openssl版本(openssl版本要大于1.0.1,zlib版本要大于1.1.4) 一.安装依赖包 yum -y install gcc make perl # zlib zlib-dev ...

  7. sorted内置函数

    对List.Dict进行排序,Python提供了两个方法 --------------------------------sorted--------------------------------- ...

  8. ADB 常用命令及详解

    1.pull文件 adb pull (文件路径) (想要pull的路径) MacBook-Pro:~ caris$ adb pull /sdcard/Android/data/com.xiwi.log ...

  9. SQL死锁情况汇总排查

    select dbname,entity_name,count(1) as locks from (SELECT request_session_id AS spid, DB_NAME(resourc ...

  10. 罗辑思维首席架构师:Go微服务改造实践

    转自:http://www.infoq.com/cn/news/2018/05/luojisiwei 方圆 曾先后在 Cisco,新浪微博从事基础架构研发工作.十多年一直专注于后端技术的研发,在消息通 ...