自己写的c++ CProgess类

来源:互联网 发布:索尼 游戏机 知乎 编辑:程序博客网 时间:2024/06/07 05:08
class CProcess{public: bool Run(TCHAR* szPath,TCHAR *szCmd = NULL) {  STARTUPINFO si; //一些必备参数设置     memset(&si, 0, sizeof(STARTUPINFO));  si.cb = sizeof(STARTUPINFO);  si.dwFlags = STARTF_USESHOWWINDOW;  si.wShowWindow = SW_HIDE;  PROCESS_INFORMATION pi;  memset(&pi,0,sizeof(PROCESS_INFORMATION));   if(!CreateProcess(szPath,szCmd,NULL,NULL,FALSE,0,NULL,NULL,&si,&pi))  {   return false;  }  if (pi.hProcess!=NULL)  {   CloseHandle(pi.hProcess);   pi.hProcess=NULL;  }  if (pi.hThread!=NULL)  {   CloseHandle(pi.hThread);   pi.hThread=NULL;  }  return true; } BOOL AdjustPrivileges(HANDLE hProcess = GetCurrentProcess()) {  HANDLE hToken = NULL;  TOKEN_PRIVILEGES tkp;  if( ! OpenProcessToken( GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken ) )   return false ;  if (! LookupPrivilegeValue( NULL, SE_SHUTDOWN_NAME, &tkp.Privileges[0].Luid ))   return false ;  tkp.PrivilegeCount = 1;  tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;  return AdjustTokenPrivileges( hToken, FALSE, &tkp, sizeof(TOKEN_PRIVILEGES), (PTOKEN_PRIVILEGES) NULL, 0 ); } bool Kill(LPCTSTR szExeName)  {   bool bRet = false ;  PROCESSENTRY32 pp;  HANDLE hSnap=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);   if ( hSnap == INVALID_HANDLE_VALUE)  {   return false;  }  pp.dwSize =sizeof(PROCESSENTRY32);  BOOL bNext=Process32First(hSnap, &pp);   while(bNext)   {    if (_tcsncicmp(pp.szExeFile, szExeName,_tcslen(szExeName)) == 0)   {        HANDLE hProcessHandle;     hProcessHandle = OpenProcess(PROCESS_TERMINATE, true, pp.th32ProcessID);     if (hProcessHandle != NULL)     {      if (TerminateProcess(hProcessHandle, 0) != NULL)      {       CloseHandle(hProcessHandle);       bRet = true ;      break;     }       }   }    bNext=Process32Next(hSnap, &pp);   }  CloseHandle(hSnap);   hSnap = NULL ;  return bRet; }};