在 C++ 中如何通过名称获取进程句柄?
我正在尝试获取 example.exe 的进程句柄,以便我可以对其调用 TerminateProcess
。 我怎样才能做到这一点? 请注意,它没有窗口,因此 FindWindow
将不起作用。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
我正在尝试获取 example.exe 的进程句柄,以便我可以对其调用 TerminateProcess
。 我怎样才能做到这一点? 请注意,它没有窗口,因此 FindWindow
将不起作用。
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(7)
查看:MSDN 文章
您可以使用 < code>GetModuleName (我认为?)来获取名称并进行检查。
Check out: MSDN Article
You can use
GetModuleName
(I think?) to get the name and check against that.如果您不介意使用
system()
,那么执行system("taskkill /f /im process.exe")
会比这些其他方法容易得多。If you don't mind using
system()
, doingsystem("taskkill /f /im process.exe")
would be significantly easier than these other methods.OpenProcess 来自 MSDN 的函数
:
打开另一个本地进程的句柄并获得完全访问权限,必须启用SeDebugPrivilege权限。
OpenProcess Function
From MSDN:
To open a handle to another local process and obtain full access rights, you must enable the SeDebugPrivilege privilege.
另外,如果您想在 OpenProcess 中使用 PROCESS_ALL_ACCESS,您可以尝试以下操作:
Also, if you'd like to use PROCESS_ALL_ACCESS in OpenProcess, you could try this:
以下代码显示了如何使用 toolhelp 和 OpenProcess 来获取进程的句柄。 为简洁起见,删除了错误处理。
The following code shows how you can use toolhelp and OpenProcess to get a handle to the process. Error handling removed for brevity.
有两种基本技术。 第一个使用 PSAPI; MSDN 有一个使用
EnumProcesses
,OpenProcess
,EnumProcessModules
和GetModuleBaseName
。另一个使用 Toolhelp,我更喜欢它。 使用
CreateToolhelp32Snapshot
获取进程列表,使用Process32First
遍历它和Process32Next
,它提供模块名称和进程 ID,直到找到所需的进程 ID,然后调用OpenProcess< /code>
获取句柄。
There are two basic techniques. The first uses PSAPI; MSDN has an example that uses
EnumProcesses
,OpenProcess
,EnumProcessModules
, andGetModuleBaseName
.The other uses Toolhelp, which I prefer. Use
CreateToolhelp32Snapshot
to get a snapshot of the process list, walk over it withProcess32First
andProcess32Next
, which provides module name and process ID, until you find the one you want, and then callOpenProcess
to get a handle.可以使用以下代码:
用法:
获取句柄应该是显而易见的,只需调用
OpenProcess()
或类似的内容。The following code can be used:
Usage:
Getting a handle should be obvious, just call
OpenProcess()
or similar on it.