typedef struct tagWNDINFO { DWORD dwProcessId; HWND hWnd; } WNDINFO, *LPWNDINFO; BOOL CALLBACK EnumWindowsProc(HWND hWnd,LPARAM lParam) { DWORD dwProcessId; GetWindowThreadProcessId(hWnd, &dwProcessId); LPWNDINFO pInfo = (LPWNDINFO)lParam; if(dwProcessId == pInfo->dwProcessId) { HWND hParent = NULL; HWND hSelf = hWnd; do { hParent = GetParent(hSelf); if (!hParent) { return TRUE; } else { char Text[MAX_PATH] = {0}; int nLen = ::GetWindowText(hParent,Text,MAX_PATH); hSelf = hParent; pInfo->hWnd = hParent; } } while (hParent != hSelf); } return !(BOOL)pInfo->hWnd; } HWND GetProcessMainWnd(DWORD dwProcessId) { WNDINFO wi; wi.dwProcessId = dwProcessId; wi.hWnd = NULL; EnumWindows(EnumWindowsProc,(LPARAM)&wi); return wi.hWnd; } HWND hWnd = GetProcessMainWnd(g_ProcessID);