```cpp
typedef _ProcessHwnd
{
DWORD ProcessID;
HWND hwndProcess;
} PROCESSHWND, * PPROCESSHWND;
DWORD GetHWNDForProcess(DWORD ProcessID, PHWND ProcessHWND);
BOOL CALLBACK FindProcessHWNDThruEnum(HWND hwnd, LPARAM lParam);
// example function
// returns 0 if success, results of GetLast Error if not
// ProcessID is the process you are interested in
// ProcessHWND will have the process' associated window handle.
// Or NULL, if the process doesn't have a window
//
// Usage: GetHWNDForProcess(ProcId, &ProcHWND);
//
DWORD GetHWNDForProcess(DWORD ProcessID, PHWND ProcessHWND)
{
DWORD ErrValue = 0;
BOOL fEnumWindows = FALSE;
PROCESSHWND prochwndFind;
// Initialize the structure
memset(&prochwndFind, 0, sizeof(prochwndFind));
prochwndFind.ProcessID = ProcessID;
fEnumWindows = EnumWindows(FindProcessHWNDThruEnum, (LPARAM) &prochwndFind);
// Make sure EnumWindows succeeded
if(fEnumWindows){
*ProcessHWND = prochwndFind.hwndProcess;
}else{
ErrValue = GetLastError();
}
return ErrValue;
}
// The EnumWindowsProc callback
BOOL CALLBACK FindProcessHWNDThruEnum(HWND hwnd, LPARAM lParam)
{
PPROCESSHWND prochwndFind;
DWORD ThisProcessID = 0;
DWORD ThisThreadID = 0; // For completeness, not needed
prochwndFind = (PPROCESSHWND) lParam;
ThisThreadID = GetWindowThreadProcessId(hwnd, &ThisProcessID);
if(ThisProcessID == prochwndFind.ProcessID)
{
prochwndFind.hwndProcess = hwnd);
return FALSE;
}else{
return TRUE;
}
}
```
No comments:
Post a Comment