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个线程输出多行字符,希望出现的是交错的顺序,但偏偏出现的顺序是顺序执行两个函数的顺序,为什么?
图片:

获取当前进程的ID很简单,一种方法是调用GetCurrentThreadId()函数即可;
还有一处更简单的哈,就是在你创建进程的时候就知道了:如
m_hThread = ::CreateThread(NULL, 0, MyThreadProc, this, 0, &m_threadID);//最后一个参数就是线程ID

另外,你想出现的是交错的顺序也很简单,就是做好互斥工作就是了,在线程的相应位置调用WaitForSingleObject();不要忘了解锁即可,我是用SetEvent();最好后面加上Sleep(10);这样看到的效果就更明显了!
参考技术A CreateThread函数共六个参数,第六个参数能获得线程ID,不要设置成NULL。
你说这个顺序问题,应该是你没设置Sleep(),循环每个输出之间你设置一个Sleep。

以上是关于C++ 如何获得当前电脑里运行的所有进程ID?并关闭指定的进程?的主要内容,如果未能解决你的问题,请参考以下文章

vc++ 怎么结束 别的进程里面的一个线程?

C++获得当前系统所有进程

如何在脚本中获取进程ID

获取正在运行的进程列表

由进程ID获得进程名或路径有啥方法

Java如何得到当前进程ID号