C++ 如何获得当前电脑里运行的所有进程ID?并关闭指定的进程?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++ 如何获得当前电脑里运行的所有进程ID?并关闭指定的进程?相关的知识,希望对你有一定的参考价值。
C++ 如何获得当前电脑里运行的所有进程ID?并关闭指定的进程?
HANDLE GetProcessHandle(int nID)return OpenProcess(PROCESS_ALL_ACCESS, FALSE, nID);
HANDLE GetProcessHandle(LPCTSTR pName)
HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if (INVALID_HANDLE_VALUE == hSnapshot)
return NULL;
PROCESSENTRY32 pe = sizeof(pe) ;
BOOL fOk;
for (fOk = Process32First(hSnapshot, &pe); fOk; fOk = Process32Next(hSnapshot, &pe))
if (!_tcscmp(pe.szExeFile, pName))
CloseHandle(hSnapshot);
return GetProcessHandle(pe.th32ProcessID);
return NULL;
关闭进程
int killpro(CString a)//CString a里面就是进程名字。
PROCESSENTRY32 pe32;
pe32.dwSize =sizeof(pe32);
HANDLE hpro=::CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
if(hpro==INVALID_HANDLE_VALUE)
return 0;
BOOL nowrun=Process32First(hpro,&pe32);
while(nowrun)
if(pe32.szExeFile ==a)
DWORD proid=pe32.th32ProcessID;
HANDLE hprocess=::OpenProcess(PROCESS_ALL_ACCESS,FALSE,proid);
if(hprocess!=NULL)
::TerminateProcess(hprocess,0);
::CloseHandle(hprocess);
nowrun=::Process32Next(hpro,&pe32);
参考技术A 楼下正解
只不过TerminateProcess不需要再First Next 了吧~~
直接给点空间保存着信息算了~
VC如何获得当前线程的ID
用CreateThread创建线程后,怎么在线程函数中获得当前线程的ID,。。。此外,我创建2个线程输出多行字符,希望出现的是交错的顺序,但偏偏出现的顺序是顺序执行两个函数的顺序,为什么?
图片:
还有一处更简单的哈,就是在你创建进程的时候就知道了:如
m_hThread = ::CreateThread(NULL, 0, MyThreadProc, this, 0, &m_threadID);//最后一个参数就是线程ID
另外,你想出现的是交错的顺序也很简单,就是做好互斥工作就是了,在线程的相应位置调用WaitForSingleObject();不要忘了解锁即可,我是用SetEvent();最好后面加上Sleep(10);这样看到的效果就更明显了! 参考技术A CreateThread函数共六个参数,第六个参数能获得线程ID,不要设置成NULL。
你说这个顺序问题,应该是你没设置Sleep(),循环每个输出之间你设置一个Sleep。
以上是关于C++ 如何获得当前电脑里运行的所有进程ID?并关闭指定的进程?的主要内容,如果未能解决你的问题,请参考以下文章