用C++很繁琐。其实直接用DOS命令wmic process ,自己再稍做点工作就可以了,清楚,易懂。
char str[]="wmic process where name=\"notepadexe\" get handle,processid,name";
system(str);
上面命令,列出名字叫 notepadexe 的 所有的 进程 的 handle, processid, name
若用:
wmic process where name=\"notepadexe\" get handle,processid,name > atxt
就能把屏幕输出存入 atxt, 写程序打开,读入,很简单。handle 数值 就是句柄。
-_-别人hook了这一句。
我是用的NtOpenProcess
不过也不成功。
但是目前想了一个办法,直接把ntdll的导出表给改了,然后把ntdll重命名复制出来。
1、启动VS,新建C# WinForm项目。
2、在Form1中添加4个Label控件,并布局如下。
3、在Form1中添加代码,如下。
4、完成之后,调试运行,结果如下。
注意事项:
C++不仅拥有计算机高效运行的实用性特征,同时还致力于提高大规模程序的编程质量与程序设计语言的问题描述能力。
通过在正在运行的进程上设置 SeDebugPrivilege 权限,您可以获取进程句柄的任何运行的应用程序。获取进程句柄,然后可以指定 PROCESS_ALL_ACCESS 标志,这将允许该进程句柄,您通常不能在不同 Win32 Api 调用。一些可以成功调用 Win32 Api 包括以下︰
TerminateProcess
CreateRemoteThread
应用程序 #1 (Term01exe)
在 Visual Basic 50 中创建一个新的标准 EXE 项目。
将项目名称更改为 Term01。
将 Form1 重命名为 frmTerm01。
将命令按钮添加到 frmTerm01 中。
为向"终止记事本。"Command1 设置标题
将下面的代码添加到 frmTerm01 中︰
Option Explicit
Private Sub Command1_Click()
' This is a simple application that attempts
' to shut down any process that is passed in through
' the command line
Call TerminateProcess(CLng(Command$), 0)
End Sub
向项目中添加一个标准模块并将其重命名为 MdlApi01。
将下面的代码添加到 MdlApi01 中︰
Option Explicit
Declare Function TerminateProcess Lib "kernel32" _
(ByVal hProcess As Long, _
ByVal uExitCode As Long) As Long
保存项目并使 exe 文件 (Term01exe)。
以上就是关于C++ 获取进程句柄问题全部的内容,包括:C++ 获取进程句柄问题、openprocess 不能获取进程句柄、C++中如何获取当前窗口句柄等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)