2010-12-02 74 views

回答

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

你或许应该使用类参数以及(在一个为空在我的第一行),如果你知道它,所以它是不太可能,你会意外地发现,恰巧有其他一些程序的窗口相同的标题。

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

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

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

编辑2:如果您不是为Unicode编译,请在“窗口标题”之前删除“L”,并使用char缓冲区而不是wchar_t。

1

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

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

相关问题