2010-12-02 77 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

相關問題