C++ Win32 遍历窗口

Posted duxie

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++ Win32 遍历窗口相关的知识,希望对你有一定的参考价值。

查找指定窗口

#include <iostream>
#include <windows.h>
using namespace std;

int main()

    TCHAR szTitle[MAX_PATH] =  0 ;
    HWND hWnd = ::FindWindow(L"#32770", L"x32Inject");
    if (hWnd != NULL)
    
        // 修改窗口标题
        ::SetWindowText(hWnd, L"Hello World!");
    
    else
    
        ::MessageBox(0, L"窗口没找到", L"提示", 0);
    
    return 0;

窗口控制

 

#include <windows.h>

int main()

    TCHAR szTitle[MAX_PATH] =  0 ;
    HWND hWnd = ::FindWindow(L"#32770", L"x32Inject");
    if (hWnd != NULL)
    
        // 切换窗口
        SwitchToThisWindow(hWnd, false);
        Sleep(5000);
        // 关闭窗口
        ::SendMessage(hWnd, WM_CLOSE, 0, 0);
    
    else
    
        ::MessageBox(0, L"窗口没找到", L"提示", 0);
    
    return 0;

 

查找子窗口

 

#include <windows.h>

int main()

    TCHAR szTitle[MAX_PATH] =  0 ;
    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, 0, (LPARAM)L"Hello World!");
    
    else
    
        ::MessageBox(0, L"窗口没找到", L"提示", 0);
    
    return 0;

 

#include <windows.h>

int main()

    TCHAR szTitle[MAX_PATH] =  0 ;
    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, 0, (LPARAM)L"Hello World!");
    
    else
    
        ::MessageBox(0, L"窗口没找到", L"提示", 0);
    
    return 0;

枚举子窗口

 

#include <windows.h>
#include <stdio.h>

BOOL CALLBACK EnumChildProc(HWND hwnd, LPARAM lParam)

    TCHAR szTitle[MAX_PATH] =  0 ;
    ::GetWindowText(hwnd, szTitle, MAX_PATH);
    ;; MessageBox(0, szTitle, L"子窗口", MB_OK);
    return TRUE;


int main()

    TCHAR szTitle[MAX_PATH] =  0 ;
    HWND hWnd = ::FindWindow(L"#32770", L"x32Inject");
    if (hWnd != NULL)
    
        ::EnumChildWindows(hWnd, EnumChildProc, NULL);
    
    else
    
        ::MessageBox(0, L"窗口没找到", L"提示", 0);
    
    getchar();
    return 0;

 

枚举所有打开的窗口

 

#include <windows.h>
#include <stdio.h>

BOOL CALLBACK EnumWindowsProc(HWND hwnd, LPARAM lParam)

    TCHAR szTitle[MAX_PATH] =  0 ;
    ::GetWindowText(hwnd, szTitle, MAX_PATH);
    wprintf(L"%s\n", szTitle);
    if (wcscmp(szTitle, L"x32Inject") == 0)
    
        ::MessageBox(0, szTitle, L"窗口", 0);
    
    return TRUE;


int main()

    ::EnumWindows(EnumWindowsProc, NULL);
    getchar();
    return 0;

 

模拟鼠标点击

 

#include <windows.h>
#include <stdio.h>
// 隐藏控制台运行
#pragma comment(linker,"/subsystem:\"windows\"  /entry:\"mainCRTStartup\"")     

int main()

    TCHAR szTitle[MAX_PATH] =  0 ;
    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 + 10, r.top + 10);
        Sleep(3000);
        // 鼠标左键单击
        mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0); // 按下左键
        mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);  // 松开左键
    
    else
    
        ::MessageBox(0, L"没有找到窗口!", L"提示", MB_OK);
    
    getchar();
    return 0;

 

模拟键盘点击(搜索:键盘键与虚拟键码对照表)

 

 

#include <windows.h>
#include <stdio.h>
// 隐藏控制台运行
#pragma comment(linker,"/subsystem:\"windows\"  /entry:\"mainCRTStartup\"")     

int main()

    TCHAR szTitle[MAX_PATH] =  0 ;
    RECT r;
    HWND hWnd = ::FindWindow(L"#32770", L"SemaphoreEx");
    if (hWnd != NULL)
    
        HWND hEdit = ::GetDlgItem(hWnd, 0x3E8);
        // 获取选择程序窗口坐标
        ::GetWindowRect(hEdit, &r);
        // 设置鼠标位置
        ::SetCursorPos(r.left + 1, r.top + 1);
        Sleep(1000);
        // 鼠标左键单击
        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(66, 0, 0, 0);
        keybd_event(66, 0, KEYEVENTF_KEYUP, 0);
        Sleep(1000);
        keybd_event(16, 0, 0, 0);
        keybd_event(67, 0, 0, 0);
        keybd_event(67, 0, KEYEVENTF_KEYUP, 0);
        keybd_event(16, 0, KEYEVENTF_KEYUP, 0);
    
    else
    
        ::MessageBox(0, L"没有找到窗口!", L"提示", MB_OK);
    
    getchar();
    return 0;

 

以上是关于C++ Win32 遍历窗口的主要内容,如果未能解决你的问题,请参考以下文章

Delphi遍历进程-Win32API

win32遍历cad所有文字

求一个windows下的纯C语言实现的文件夹遍历程序,要可以遍历子文件夹,不要unix下的和C++的。

win32 文件夹遍历获取每个文件夹大小

win32 文件夹遍历获取每个文件夹大小

关于 win32 下磁盘的遍历方法