查找指定窗口

#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. 剑指offer:删除链表中重复的结点

    题目描述: 在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针. 例如,链表1->2->3->3->4->4->5 处理 ...

  2. top中的wa的理解

    CPU使用率:参考 mpstat 手册,%usr + %nice + %sys + %iwoait + %irq + %soft + %steal + %guest + %gnice + %idle ...

  3. 【转】git branch 命令查看分支、删除远程分支、本地分支

    git branch 命令操作 1.查看本地分支 : git branch 前面带有*号的是当前分支 2 .删除本地分支: git branch -d [branchname] 提示删除了一个名为li ...

  4. AnnotatedElementUtils.findMergedAnnotation作用

    // 在element上查询annotationType类型注解 // 将查询出的多个annotationType类型注解属性合并到查询的第一个注解中 // # 多个相同注解合并 org.spring ...

  5. 必备Linux命令

    文章来源:https://macrozheng.github.io/mall-learning/#/reference/linux 开发者必备Linux命令 开发者必备Linux常用命令,掌握这些命令 ...

  6. preg_match 第三个参数,

    //请修改变量p的正则表达式,使他能够匹配str中的姓名 $p = '/name:([\w\s]+)/'; $str = "name:steven jobs"; preg_matc ...

  7. Appium脚本(2):元素检测

    场景: 有的按钮在第一次打开时显示,之后就不显示了,如更新提示.特性介绍等,面对这样的场景写了如下脚本,增加脚本的复用性. no_element_exception_2.py from appium ...

  8. rConfig v3.9.2 授权认证与未授权RCE (CVE-2019-16663) 、(CVE-2019-16662)

    rConfig v3.9.2 authenticated and unauthenticated RCE (CVE-2019-16663) and (CVE-2019-16662) 原文:https: ...

  9. 通过ip远程控制电脑

    现在,很多人都用了不止一台电脑,而同时操作两台电脑是一件比较麻烦的事情,所以,如果能够使用一台电脑的鼠标键盘显示器,去远程控制另一台电脑,那就方便多了. 远程计算机设置 1.先确保本地计算机和远程计算 ...

  10. 算法练习之x的平方根,爬楼梯,删除排序链表中的重复元素, 合并两个有序数组

    1.x的平方根 java (1)直接使用函数 class Solution { public int mySqrt(int x) { int rs = 0; rs = (int)Math.sqrt(x ...