win api取得外部应用程序进程句柄
如何用winapi获取任意一个应用程序的进程句柄,比如我想结束掉一个名字叫hj的进程,该进程没有窗口,我只是在任务管理器里看到了这个名字。我查资料找到了CreateToo...
如何用win api获取任意一个应用程序的进程句柄,比如我想结束掉一个名字叫 hj 的进程,该进程没有窗口,我只是在任务管理器里看到了这个名字。我查资料找到了CreateToolhelp32Snapshot、Process32First、Thread32Next、OpenProcess、TerminateProcess这几个函数。但是对怎么找出指定进程还是不知道怎么弄,请各位给出详细写法,或者用其他方法更好 谢谢
展开
展开全部
C++没有直接实现通过进程名获取句柄的方法,LZ查到的函数是正确解法,我写一个样例,里面有一个GetProcessByName,LZ拿去用好了,虽然不是C#里GetProcessesByName那样方便的东西:
#include <windows.h>
#include <tlhelp32.h>
#include <tchar.h>
using namespace std;
HANDLE GetProcessByName(WCHAR * name)
{
int error;
HANDLE result = NULL;
HANDLE hProcess = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
if(hProcess==NULL)
return NULL;
PROCESSENTRY32 prc32;
prc32.dwSize = sizeof(prc32);
BOOL bHave = Process32First(hProcess,&prc32);
while(bHave)
{
if(wcscmp(name,prc32.szExeFile)==0)
{
result = OpenProcess(PROCESS_ALL_ACCESS,FALSE,prc32.th32ProcessID);
break;
}
bHave = Process32Next(hProcess,&prc32);
}
CloseHandle(hProcess);
return result;
}
int main()
{
HANDLE hPrc = GetProcessByName(L"Kuaiwan.exe");
if(hPrc)
TerminateProcess(hPrc,0);
return 0;
}
这个例子是把快玩给结束掉,希望对LZ有参考价值,具体来说就是先用CreateToolhelp32Snapshot拍照,然后使用Process32First等遍历,找到合适的进程名,获取句柄,然后返回
#include <windows.h>
#include <tlhelp32.h>
#include <tchar.h>
using namespace std;
HANDLE GetProcessByName(WCHAR * name)
{
int error;
HANDLE result = NULL;
HANDLE hProcess = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
if(hProcess==NULL)
return NULL;
PROCESSENTRY32 prc32;
prc32.dwSize = sizeof(prc32);
BOOL bHave = Process32First(hProcess,&prc32);
while(bHave)
{
if(wcscmp(name,prc32.szExeFile)==0)
{
result = OpenProcess(PROCESS_ALL_ACCESS,FALSE,prc32.th32ProcessID);
break;
}
bHave = Process32Next(hProcess,&prc32);
}
CloseHandle(hProcess);
return result;
}
int main()
{
HANDLE hPrc = GetProcessByName(L"Kuaiwan.exe");
if(hPrc)
TerminateProcess(hPrc,0);
return 0;
}
这个例子是把快玩给结束掉,希望对LZ有参考价值,具体来说就是先用CreateToolhelp32Snapshot拍照,然后使用Process32First等遍历,找到合适的进程名,获取句柄,然后返回
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询