我想通过使用窗口标题获取进程ID和进程名称 我的开发环境是visual c ++ 2008
怎么做。
感谢
答案 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。