簡體   English   中英

C ++使用進程名稱獲取Windows標題

[英]C++ get windows title using process name

編輯:如何使用進程名獲取Windows標題? 例如獲取chrome.exe的當前標題

您可以使用其進程ID獲取特定窗口的標題。

如果知道執行文件的名稱(例如:Chrome.exe),則可以使用FindWindowEX()獲取Handle或使用CreateToolHelp32Snapshot獲取PID“ Chrome.exe”。

然后使用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;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM