C++使用进程名称获取窗口标题

标签 c++

编辑:如何使用进程名称获取窗口标题?例如获取 chrome.exe 的当前标题

最佳答案

您可以使用它的进程 ID 获取特定窗口的标题。

如果您知道执行文件的名称(例如:Chrome.exe),您可以使用 FindWindowEX() 获取 Handle 或使用 PID“Chrome.exe” CreateToolHelp32Snapshot

然后使用 EnumWindows 使用 HANDLE 获取 HWND。

struct param_enum
{
    unsigned long ulPID;
    HWND hWnd_out;
};

HWND find_specific_window(unsigned long process_id)
{
    param_enum param_data;
    param_data.ulPID = process_id;
    param_data.hWnd_out = 0;
    EnumWindows(enum_windows_callback, (LPARAM)&param_data);
    get_window_title(process_id, param_data.hWnd_out);
    return param_data.hWnd_out;
}

BOOL CALLBACK enum_windows_callback(HWND handle, LPARAM lParam)
{
    param_enum& param_data = *(param_enum*)lParam;
    unsigned long process_id = 0;
    GetWindowThreadProcessId(handle, &process_id);
    if (param_data.ulPID != process_id)
    {
        return TRUE;
    }
    param_data.hWnd_out = handle;

    return FALSE;   
}

----------------------------获取句柄---------------- ----------

HANDLE GetHandleFromProcessPath(TCHAR* szExeName, DWORD& dwPID)
{
    HANDLE hExeName = INVALID_HANDLE_VALUE;
    HANDLE hSnap = INVALID_HANDLE_VALUE;
    PROCESSENTRY32 pe32;
    pe32.dwSize = sizeof(PROCESSENTRY32);

    hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);

    if (INVALID_HANDLE_VALUE != hSnap)
    {
        if (Process32First(hSnap, &pe32))
        {
            do 
            {
                //!!! Attention pe32.szExeFile always return exe file name. not window title.
                if (NULL != _tcsstr(pe32.szExeFile, szExeName))
                {
                    hExeName = OpenProcess(PROCESS_ALL_ACCESS, TRUE, pe32.th32ProcessID);
                    dwPID = pe32.th32ProcessID;
                    break;
                }
            } while (Process32Next(hSnap, &pe32));
        }
    }


    return hExeName;
}

关于C++使用进程名称获取窗口标题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45625222/

相关文章:

c++ - VBA 中的 Qt5 Dll 出现错误运行时错误 453

c++ - 无法访问特征线性系统解决方案的元素

c++ - C++17是基于C17的吗?

使用 numpy 和 gdal 的 Python C 扩展在运行时给出 undefined symbol

c++ - 可以在运行时优化浮点零乘法吗?

c++ - 为什么我们甚至需要 VPTR?

c++ - 继承的虚拟类的C++内存布局

c# - 如何从 C# 将窗口句柄传递给 C++ win32 dll

c++ - 运行 intel mkl 示例程序 - 没有这样的文件

c++ - 使用 STL/Boost 查找和修改 vector 中的匹配元素