Delphi注入DLL 如何获取当前进程名

Delphi注入DLL 如何获取当前进程名,第1张

比如你想注入的进程是QQEXE

那么首先判断进程是否存在,判断方法如下:

在USES 中加入TLhelp32单元

function Tform1CheckTask(ExeFileName: string): Boolean;\\判断进程是否存在

const

PROCESS_TERMINATE=$0001;

var

ContinueLoop: BOOL;

FSnapshotHandle: THandle;

FProcessEntry32: TProcessEntry32;

begin

result := False;

FSnapshotHandle := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);

FProcessEntry32dwSize := Sizeof(FProcessEntry32);

ContinueLoop := Process32First(FSnapshotHandle,FProcessEntry32);

while integer(ContinueLoop) <> 0 do begin

if ((UpperCase(ExtractFileName(FProcessEntry32szExeFile)) =UpperCase(ExeFileName))

or (UpperCase(FProcessEntry32szExeFile) =UpperCase(ExeFileName))) then

result := True;

ContinueLoop := Process32Next(FSnapshotHandle,FProcessEntry32);

end;

end;

调用方法:

procedure TForm1Button1Click(Sender: TObject);\\按钮上单击事件

begin

if CheckTask('qqexe')=true then\\判断qqexe是否存在

showmessage('QQ进程存在!');//如果存在一个提示

//(当然这里你可以换成你想执行的代码:载入DLL。根据你的需要而定吧)

end;

string strFullPath = ApplicationExecutablePath;

string strFileName = SystemIOPathGetFileName ( strFullPath );

我还以为是程序呢,argv[0]不就行了。如果是动态库的话,就比较麻烦了,先上网down一个busybox的源代码吧,参考一下里面top的实现方式,基本思路就是遍历内核的整个进程链表,根据自己的pid(可以用getpid获得)找到对应的进程名。

Option Explicit

Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long

Private Declare Function EnumProcesses Lib "PSAPIDLL" (lpidProcess As Long, ByVal cb As Long, cbNeeded As Long) As Long

Private Declare Function GetModuleFileNameEx Lib "PSAPIDLL" Alias "GetModuleFileNameExA" (ByVal hProcess As Long, ByVal hModule As Long, ByVal lpFileName As String, ByVal nSize As Long) As Long

Private Declare Function EnumProcessModules Lib "PSAPIDLL" (ByVal hProcess As Long, lphModule As Long, ByVal cb As Long, lpcbNeeded As Long) As Long

Const PROCESS_QUERY_INFORMATION = &H400

Const PROCESS_VM_READ = &H10

Const MAX_PATH As Long = 260

Private Sub Command1_Click()

Dim szProcessName As String

Dim aProcesses() As Long

Dim hMod(0 To 1023) As Long

Dim hProcess As Long

Dim lLen As Long

Dim cbNeeded As Long

Dim cProcesses As Long

Dim lProcessID As Long

Dim K

Dim i As Long

ReDim aProcesses(0 To 1023) As Long

K = List1ListIndex

List1Clear

If (EnumProcesses(aProcesses(0), 1024 4, cbNeeded) <> 0) Then

cProcesses = cbNeeded / 4

For i = 0 To cProcesses - 1

lProcessID = aProcesses(i)

lLen = MAX_PATH

hProcess = OpenProcess(PROCESS_QUERY_INFORMATION Or PROCESS_VM_READ, 0, lProcessID)

If (lProcessID = 0) Then

List1AddItem "System Idle Process"

ElseIf lProcessID < 5 Then

List1AddItem "System"

Else

If (hProcess <> 0) Then

If (EnumProcessModules(hProcess, hMod(0), 1024 4, cbNeeded)) Then

szProcessName = String$(lLen, 0)

LSet szProcessName = "unknown"

GetModuleFileNameEx hProcess, hMod(0), szProcessName, lLen

List1AddItem szProcessName

End If

End If

End If

Next i

If K < 2 Or K > List1ListCount - 1 Then K = List1ListCount - 1

List1ListIndex = K

Else

MsgBox "Failed to get process list", vbCritical

End If

End Sub

以上就是关于Delphi注入DLL 如何获取当前进程名全部的内容,包括:Delphi注入DLL 如何获取当前进程名、c#如何获取当前运行程序的文件名、Linux 下C++程序中如何获取本程序运行时的进程名等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9595643.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-30
下一篇2023-04-30

发表评论

登录后才能评论

评论列表(0条)

    保存