void CUtility::showWindowByProcessID(DWORD dwProcessID, LPTSTR lpszClassName)
{
HWND hWnd = ::GetTopWindow(0);
DWORD dwThreadPID = 0;
while(hWnd)
{
DWORD pID;
DWORD dwThreadID = ::GetWindowThreadProcessId(hWnd, &pID);
HANDLE hProc = ::OpenProcess(PROCESS_QUERY_INFORMATION, 0, pID);
if(dwProcessID == pID)
{
dwThreadPID = dwThreadID;
char szTemp[MAX_PATH] = {0, };
::GetClassName(hWnd, szTemp, sizeof(szTemp));
if(!strcmp(szTemp, lpszClassName))
::ShowWindow(hWnd, SW_RESTORE);
}
hWnd = ::GetNextWindow(hWnd, GW_HWNDNEXT);
CloseHandle(hProc);
}
}
void CUtility::showProcess(CString szProcessName, LPTSTR lpszClassName)
{
HANDLE hProcessSnap = NULL;
bool bRet = false;
PROCESSENTRY32 pe32 = {0};
hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if(hProcessSnap == (HANDLE) - 1)
return;
pe32.dwSize = sizeof(PROCESSENTRY32);
if(Process32First(hProcessSnap, &pe32))
{
bool bCurrent = false;
MODULEENTRY32 me32 = {0};
do
{
bCurrent = getProcessModule(pe32.th32ProcessID, szProcessName);
if(bCurrent || szProcessName == pe32.szExeFile)
{
HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, false, pe32.th32ProcessID);
if(hProcess)
{
DWORD dwID = GetProcessId(hProcess);
showWindowByProcessID(dwID, lpszClassName);
}
}
} while (Process32Next(hProcessSnap, &pe32));
}
CloseHandle(hProcessSnap);
}