进程重启 或者进程的关闭 RING3 一般应用程序用 /*开头必不可少的链接库*/ #include <Psapi.h> #pragma comment(lib , "Psapi.lib") BOOL CSIM_ServerDlg::RestartProccess(void) { CString processName=""; CString findProcessName; //关闭的程序名 iJiNum = 10; //DEBUG if (iZheNum > 8) findProcessName = "ZHE.exe"; if (iSNNum > 8) findProcessName = "SN.exe"; if(iJiNum > 8) findProcessName = "JI.exe"; DWORD i_processID=0; HANDLE hProcess; int m_i_runProcessNum=0; //EnumProcesses方法 DWORD m_allProcessArray[1024], m_i_arraySize, m_i_processNum; unsigned int m_i_index=0; HMODULE hMod;//句柄 char m_szProcessName[1024]="";//获取名称 // 获取进程标识列表. if ( !EnumProcesses( m_allProcessArray, sizeof(m_allProcessArray), &m_i_arraySize )) { return FALSE; } //计算有多少个进程. m_i_processNum = m_i_arraySize / sizeof(DWORD); //查找每个进程. for ( m_i_index = 0; m_i_index < m_i_processNum; m_i_index++ ) { i_processID=m_allProcessArray[m_i_index]; hProcess = OpenProcess( PROCESS_TERMINATE /*必不可少*/| PROCESS_QUERY_INFORMATION | PROCESS_VM_READ,FALSE , i_processID ); // 获取进程名称. if ( hProcess ) { if ( EnumProcessModules( hProcess, &hMod, sizeof(HMODULE),&m_i_arraySize)) { GetModuleBaseName( hProcess, hMod, m_szProcessName, sizeof(m_szProcessName) ); processName.Format("%s",m_szProcessName); if(processName.Find(findProcessName)>=0) { TerminateProcess(hProcess,0); CloseHandle(hProcess); break; } } } } Sleep(100); if (iZheNum > 8) { ::ShellExecute(this->m_hWnd , "open" , "Zhe.exe" , "" , "" , SW_SHOW); iZheNum = 0; } if (iSNNum > 8) { ShellExecute(this->m_hWnd , "open" , "SN.exe" , "" , "" , SW_SHOW); iSNNum = 0; } if(iJiNum > 8) { ShellExecute(this->m_hWnd , "open" , "JI.exe" , "" , "" , SW_SHOW); iJiNum = 0; } return 0; }