根据进程号获取进程路径函数(原创):
2005-05-25 21:18
369 查看
这个问题在论坛上被很多人问过,我这里写个函数,公开源代码:
对应CSDN论坛帖子为:
http://community.csdn.net/Expert/topic/4035/4035607.xml?temp=.353039
源代码:
Private Declare Function OpenProcess Lib "kernel32.dll" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Private Declare Function EnumProcessModules Lib "psapi.dll" (ByVal hProcess As Long, ByRef lphModule As Long, ByVal cb As Long, ByRef cbNeeded As Long) As Long
Private Declare Function GetModuleFileNameExA Lib "psapi.dll" (ByVal hProcess As Long, ByVal hModule As Long, ByVal ModuleName As String, ByVal nSize As Long) As Long
Private Declare Function CloseHandle Lib "kernel32.dll" (ByVal hObject As Long) As Long
'根据进程号获取进程路径函数,原创:
Function GetProcessPathByProcessID(PID As Long) As String
On Error GoTo Z
Dim cbNeeded As Long
Dim szBuf(1 To 250) As Long
Dim Ret As Long
Dim szPathName As String
Dim nSize As Long
Dim hProcess As Long
hProcess = OpenProcess(&H400 Or &H10, 0, PID)
If hProcess <> 0 Then
Ret = EnumProcessModules(hProcess, szBuf(1), 250, cbNeeded)
If Ret <> 0 Then
szPathName = Space(260)
nSize = 500
Ret = GetModuleFileNameExA(hProcess, szBuf(1), szPathName, nSize)
GetProcessPathByProcessID = Left(szPathName, Ret)
End If
End If
Ret = CloseHandle(hProcess)
If GetProcessPathByProcessID = "" Then
GetProcessPathByProcessID = "SYSTEM"
End If
Exit Function
Z:
End Function
'我的系统VB进程ID为1716
'下面的结果显示了VB进程的路径为:D:/Microsoft Visual Studio/VB98/VB6.EXE
Private Sub Command1_Click()
MsgBox GetProcessPathByProcessID(1716)
End Sub
'-------------------------------------------
' 转载请注明出处
' 作者:唐细刚
' 邮箱:tanaya@163.com
'-------------------------------------------
对应CSDN论坛帖子为:
http://community.csdn.net/Expert/topic/4035/4035607.xml?temp=.353039
源代码:
Private Declare Function OpenProcess Lib "kernel32.dll" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Private Declare Function EnumProcessModules Lib "psapi.dll" (ByVal hProcess As Long, ByRef lphModule As Long, ByVal cb As Long, ByRef cbNeeded As Long) As Long
Private Declare Function GetModuleFileNameExA Lib "psapi.dll" (ByVal hProcess As Long, ByVal hModule As Long, ByVal ModuleName As String, ByVal nSize As Long) As Long
Private Declare Function CloseHandle Lib "kernel32.dll" (ByVal hObject As Long) As Long
'根据进程号获取进程路径函数,原创:
Function GetProcessPathByProcessID(PID As Long) As String
On Error GoTo Z
Dim cbNeeded As Long
Dim szBuf(1 To 250) As Long
Dim Ret As Long
Dim szPathName As String
Dim nSize As Long
Dim hProcess As Long
hProcess = OpenProcess(&H400 Or &H10, 0, PID)
If hProcess <> 0 Then
Ret = EnumProcessModules(hProcess, szBuf(1), 250, cbNeeded)
If Ret <> 0 Then
szPathName = Space(260)
nSize = 500
Ret = GetModuleFileNameExA(hProcess, szBuf(1), szPathName, nSize)
GetProcessPathByProcessID = Left(szPathName, Ret)
End If
End If
Ret = CloseHandle(hProcess)
If GetProcessPathByProcessID = "" Then
GetProcessPathByProcessID = "SYSTEM"
End If
Exit Function
Z:
End Function
'我的系统VB进程ID为1716
'下面的结果显示了VB进程的路径为:D:/Microsoft Visual Studio/VB98/VB6.EXE
Private Sub Command1_Click()
MsgBox GetProcessPathByProcessID(1716)
End Sub
'-------------------------------------------
' 转载请注明出处
' 作者:唐细刚
' 邮箱:tanaya@163.com
'-------------------------------------------
相关文章推荐
- 根据进程号获取进程路径函数(原创):
- delphi根据进程PID获取程序所在路径的函数(用OpenProcess取得句柄,用GetModuleFileNameEx取得程序名)
- delphi根据进程PID获取程序所在路径的函数
- delphi根据进程ID获取进程路径
- 【原创】ABAP根据文件路径获取文件所在目录(续)
- 根据进程名称或者服务名称用WMI获取执行路径和参数
- 根据WHND获取进程的完全路径
- 根据进程ID获取进程路径
- 【原创】ABAP根据文件路径获取文件所在目录
- 根据WHND获取进程的完全路径
- 根据进程ID获取exe路径
- 通过GetProcessImageFileName函数获取进程路径
- Linux下获取当前进程ID、进程名、进程路径
- 记录一下,根据文件路径获取到其所在目录的方法
- c#根据绝对路径获取 带后缀文件名、后缀名、文件名
- 根据路径获取文件夹下的所有文件路径
- 获取文件路径函数之GetModuleFileName()
- 子函数的调用与返回,主函数获取返回值,函数工作路径
- 根据Uri获取文件的绝对路径