Visual c++ 如何使用窗口标题获取进程id和进程名称

Visual c++ 如何使用窗口标题获取进程id和进程名称,visual-c++,Visual C++,我想通过使用窗口标题获取进程id和进程名称 我的开发环境是Visual C++ 2008 怎么做 谢谢,按标题搜索窗口是不可靠的。但如果您想这样做,首先需要找到指定标题的窗口句柄。您可以使用函数轻松地完成此操作。找到HWND后,可以使用函数获取进程id UPD:要获取进程名,您需要获取并使用进程句柄 如果您知道,您可能也应该使用class参数(在我的第一行中为NULL的参数),这样您就不太可能意外地发现其他程序的窗口恰好具有相同的标题 当然,类名也不能保证在程序之间是唯一的,但是这种组合比单独

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

怎么做


谢谢,按标题搜索窗口是不可靠的。但如果您想这样做,首先需要找到指定标题的窗口句柄。您可以使用函数轻松地完成此操作。找到HWND后,可以使用函数获取进程id

UPD:要获取进程名,您需要获取并使用进程句柄

如果您知道,您可能也应该使用class参数(在我的第一行中为NULL的参数),这样您就不太可能意外地发现其他程序的窗口恰好具有相同的标题

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

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

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

Edit2:如果您不是为unicode编译,请删除“窗口标题”之前的“L”,并使用字符缓冲区而不是wchar\t

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);
    }
}