2013-06-26 28 views
1

有沒有辦法從所有正在運行的進程的完整列表中檢查哪個進程正在接收用戶輸入?例如:有沒有辦法來檢查哪個進程正在接收用戶輸入?

PROCESSENTRY32 procentry; 
HANDLE hproc; 
BOOL retval, ProcFound = false; 

hproc = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); //GetsSnapshotOfAllProcesses 
if(hproc == INVALID_HANDLE_VALUE) 
{ // If Couldnt get snapshot 
    MessageBox(NULL, "Unable To Get Snapshot", "LoaderError", MB_OK); 
    return false; 
} 
procentry.dwSize = sizeof(PROCESSENTRY32); // Initialize 
retval = Process32First(hproc, &procentry); //Copies Snapshot procentry 

while(retval) 
{ 
    **if(UserInput == TRUE))** 
    { 
    return procentry.th32ProcessID; // 
    } 
    retval = Process32Next(hproc, &procentry); // 
} 
return 0; 

}

有沒有可以讓我檢查哪些進程正在接收用戶輸入的功能?

if(UserInput == TRUE)) 

此外,有沒有辦法將進程轉換爲字符串?

+1

'GetForegroundWindow'會告訴你哪個窗口,用戶當前正在處理。你應該能夠從返回的窗口句柄中獲得進程。 –

+2

獲取頂部窗口並檢查它是否包含對話框? 然後,如果爲true,則獲取與該窗口句柄關聯的進程? – AlexK

+0

如果可能,我想從流程中獲取窗口,而不是從窗口獲取該流程。 – moonbeamer2234

回答

2

GetForegroundWindow()GetWindowThreadProcessId()是要走的路:

DWORD dwProcessID = 0; 
HWND hFGWnd = GetForegroundWindow(); 
if (hFGWnd != NULL) 
    GetWindowThreadProcessId(hFGWnd, &dwProcessID); 
return dwProcessID; 
相關問題