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);
  
 }

Posted by 명혀니
,