请教关闭自己启动进程的问题! 如我在程序中开启了另一个进程.能否再在程序中关闭它.比如通过其进程句柄或进程ID! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 当然可以!用CreateSnapToolHelp建立进程快照,查找你的进程,killprocess。如何杀死一个进程再csdn上搜索一下就有! 应该是CreateToolhelp32Snapshot:参见:HANDLE WINAPI CreateToolhelp32Snapshot( DWORD dwFlags, DWORD th32ProcessID );下面给一个例子:DWORD id=GetProcessIdFromName("C:\\WINDOWS\\SYSTEM\\PWSTRAY.EXE"); if(id!=NULL) { HANDLE myhandle=OpenProcess(PROCESS_ALL_ACCESS,TRUE,id); DWORD exitcode=0; TerminateProcess(myhandle,exitcode); }DWORD CMainFrame::GetProcessIdFromName(LPCTSTR name){ PROCESSENTRY32 pe; DWORD id = 0; HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0); pe.dwSize = sizeof(PROCESSENTRY32); if( !Process32First(hSnapshot,&pe) ) return 0; CString name1,name2; do { pe.dwSize = sizeof(PROCESSENTRY32); if( Process32Next(hSnapshot,&pe)==FALSE ) break; name1=pe.szExeFile; name2=name; name1.MakeUpper(); name2.MakeUpper(); if(strcmp(name1.GetBuffer(0),name2.GetBuffer(0)) == 0) { id = pe.th32ProcessID; break; } } while(1); CloseHandle(hSnapshot); return id;} http://www.codeproject.com/cpp/kill_process.asp?target=createprocess HANDLE hProcess;启动进程: LPTSTR lpFileName; CString strExeFileName; STARTUPINFO stStartUpInfo; PROCESS_INFORMATION procinfo; //进程的信息 memset(&stStartUpInfo, 0, sizeof(STARTUPINFO)); strExeFileName.Format("Client.exe %d",i); lpFileName=strExeFileName.GetBuffer(strExeFileName.GetLength()); CreateProcess(NULL, lpFileName, NULL, NULL, FALSE, NORMAL_PRIORITY_CLASS, NULL, NULL, &stStartUpInfo, &procinfo); strExeFileName.ReleaseBuffer(); hProcess=procinfo.hProcess; 关闭进程:TerminateProcess(hProcess,0); CloseHandle(hProcess);//释放被终止进程的句柄 webbrowser控件能不能实现 不共享cookie 请教一个mfc的问题,在线等 求《VC++6.0技术内幕》光盘代码 如何制作vc的安装程序? 无奈,谁能帮我解决 关于创建窗口 MFC ActiveX 实现网页打印 Hook线程钩子的问题 如何在windows窗口添加datagrid控件 MFC- CView类派生类构造函数访问属性问题 成心请教:一次生成控件的最大数量是多少? 关于“猫池”的问题
HANDLE WINAPI CreateToolhelp32Snapshot(
DWORD dwFlags,
DWORD th32ProcessID
);
下面给一个例子:DWORD id=GetProcessIdFromName("C:\\WINDOWS\\SYSTEM\\PWSTRAY.EXE");
if(id!=NULL)
{
HANDLE myhandle=OpenProcess(PROCESS_ALL_ACCESS,TRUE,id);
DWORD exitcode=0;
TerminateProcess(myhandle,exitcode);
}DWORD CMainFrame::GetProcessIdFromName(LPCTSTR name)
{ PROCESSENTRY32 pe;
DWORD id = 0;
HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
pe.dwSize = sizeof(PROCESSENTRY32);
if( !Process32First(hSnapshot,&pe) )
return 0;
CString name1,name2;
do
{
pe.dwSize = sizeof(PROCESSENTRY32);
if( Process32Next(hSnapshot,&pe)==FALSE )
break;
name1=pe.szExeFile;
name2=name;
name1.MakeUpper();
name2.MakeUpper();
if(strcmp(name1.GetBuffer(0),name2.GetBuffer(0)) == 0)
{
id = pe.th32ProcessID;
break;
}
} while(1);
CloseHandle(hSnapshot);
return id;
}
启动进程:
LPTSTR lpFileName;
CString strExeFileName;
STARTUPINFO stStartUpInfo;
PROCESS_INFORMATION procinfo; //进程的信息
memset(&stStartUpInfo, 0, sizeof(STARTUPINFO));
strExeFileName.Format("Client.exe %d",i);
lpFileName=strExeFileName.GetBuffer(strExeFileName.GetLength()); CreateProcess(NULL, lpFileName, NULL, NULL, FALSE,
NORMAL_PRIORITY_CLASS, NULL,
NULL, &stStartUpInfo, &procinfo); strExeFileName.ReleaseBuffer(); hProcess=procinfo.hProcess;
关闭进程:
TerminateProcess(hProcess,0);
CloseHandle(hProcess);//释放被终止进程的句柄