如何使用窗口标题来获取进程ID和进程名称

时间:2010-12-02 10:33:08

标签: visual-c++

我想通过使用窗口标题获取进程ID和进程名称 我的开发环境是visual c ++ 2008

怎么做。

感谢

2 个答案:

答案 0 :(得分:1)

按标题搜索窗口是不可靠的。但是如果你想这样做,首先你需要找到指定标题的窗口句柄。您可以使用EnumWindows功能轻松完成此操作。当您找到HWND时,您可以使用GetWindowThreadProcessId函数来获取进程ID。

UPD:要获取流程名称,您需要使用OpenProcess处理流程并使用GetProcessImageFileName

答案 1 :(得分:0)

HWND hw = FindWindow(NULL, L"Window Title");

if (hw)
{
    DWORD dwProcessId = 0;
    DWORD dwThreadId = GetWindowThreadProcessId(hw, &dwProcessId);

    HANDLE hProcess = OpenProcess(PROCESS_QUERY_INFORMATION, FALSE, dwProcessId);

    if (hProcess)
    {
         wchar_t *szExeName[1024] = {0};
         if (QueryFullProcessImageName(hProcess, 0, szExeName, _countof(szExeName))
         {
            // ...
         }
         CloseHandle(hProcess);
    }
}

如果你知道的话,你应该也可以使用class参数(在我的第一行中为NULL),这样你就不太可能意外地找到碰巧具有相同标题的其他程序窗口。

当然,类名不保证在程序之间是唯一的,但组合比单独使用标题更可靠。

您可以使用Spy ++轻松获取窗口类。

编辑:QueryFullProcessImageName需要Vista,但您可以根据DReJ的答案将该行替换为使用GetProcessImageFileName的那一行。

Edit2:如果您没有编译unicode,请在“Window Title”之前删除“L”并使用char缓冲区而不是wchar_t。