2012年1月9日 星期一

[C++] Kill Process

bool KillProcess(wstring wstrExename)
{
 bool bOK = false;
 WCHAR wszCmd[2048];
 int nSize = 160;
 PROCESS_INFORMATION pi;
 STARTUPINFOW si;
 ZeroMemory(&si, sizeof(STARTUPINFOW));
 ZeroMemory(&pi, sizeof(PROCESS_INFORMATION));
 si.cb = sizeof(STARTUPINFOW);
 si.dwFlags = STARTF_USESHOWWINDOW;
 si.wShowWindow = SW_HIDE;

 swprintf(wszCmd, L"taskkill /F /IM %s", wstrExename.c_str());
 if (CreateProcessW(NULL, wszCmd, NULL, NULL, FALSE, CREATE_NEW_CONSOLE|IDLE_PRIORITY_CLASS, NULL, NULL, &si, &pi))
 {
  int nKillWaitTime = 30000;
  int nRet = WaitForSingleObject(pi.hProcess, nKillWaitTime);
  switch (nRet)
  {
  case WAIT_TIMEOUT:  // Time out
   break;
  case WAIT_OBJECT_0:  // Process over
   break;
  case WAIT_OBJECT_0 + 1: // Don't Know
   break;
  }
  CloseHandle(pi.hProcess);
  pi.hProcess = NULL;
  CloseHandle(pi.hThread);
  pi.hThread = NULL;
  bOK = true;
 }
 return bOK;
}

沒有留言:

張貼留言