
比如你想注入的进程是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++程序中如何获取本程序运行时的进程名等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)