根据进程号获取进程路径函数(原创):

原创 2005年05月25日 21:18:00

这个问题在论坛上被很多人问过,我这里写个函数,公开源代码:

对应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
'-------------------------------------------

根据进程句柄 获得可执行文件路径 的几种方法

通过进程句柄,获得可执行文件的路径,主要有以下几种方法: 第一种方法:也是最常用的方法,是通过GetModuleFileNameEx函数获得可执行文件的模块路径,这个函数从Windows NT 4....
  • hellokandy
  • hellokandy
  • 2016年08月09日 10:42
  • 2579

获取进程全路径

先获取进程PID,通过PID获取eprocess结构后调用KeStackAttachProcess附加到该结构上,然后调用ZwQueryInformationProcess查询进程ProcessIma...
  • zyorz
  • zyorz
  • 2017年04月19日 18:25
  • 362

获得进程的EPROCESS

获得进程的EPROCESS发布日期:2004-06-02文摘内容: 文摘出处:http://www.xfocus.net/articles/200406/706.html创建时间:2004-06-01...
  • Kendiv
  • Kendiv
  • 2005年01月31日 23:16
  • 4044

EPROCESS取进程全路径(xp)

上一篇文章在xp下取路径太麻烦 既然规定在了xp系统下,为什么不硬编码呢? 好吧,走起~~~...
  • Sidyhe
  • Sidyhe
  • 2015年02月08日 17:10
  • 1092

通过PID获取进程路径和进程名的两种方法

通过PID获取进程路径和进程名,使用了psapi.h类,获取进程路径,通过_splitpath()函数,获取路径中的文件名。 _splitpath()使用方法: void _splitpath( ...
  • change518
  • change518
  • 2012年04月25日 10:54
  • 18469

通过进程ID得到进程名

在内核中,通过进程ID,得到进程名称,有多种方法。我使用了两种方法,第一种是使用ZwOpeProcess得到句柄然后ObReferenceObjectByHandle函数得到PEPROCESS结构,然...
  • SysProgram
  • SysProgram
  • 2011年05月21日 11:38
  • 9360

如何在驱动程序(SYS)中得到当前进程的完整路径和进程名?

 首先利用PsGetCurrentProcess或IoGetCurrentProcess函数得到当前进程的句柄,这个句柄是指向_EPROCESS结构的指针,_EPROCESS的结构如下:typedef...
  • xstudio
  • xstudio
  • 2002年05月08日 14:58
  • 828

从FILE_OBJECT里获取完整NT路径和DOS路径

原作者:Tesla.Angela 链接:http://www.m5home.com/bbs/thread-8896-1-1.html 众所周知在FILE_OBJECT.FileName的路径是不带...
  • zhuhuibeishadiao
  • zhuhuibeishadiao
  • 2016年11月29日 20:02
  • 758

vb.net 获取进程列表

这个方法肯定不是最好的,查到的资料还有使用进程快照的,但是不知道为什么vs中不能使用进程的结构体PROCESSENTRY32 Public Declare Function CreateToolhe...
  • haoduo123456789001
  • haoduo123456789001
  • 2016年06月20日 14:34
  • 1214

VB:获取程序运行的当前路径

自己在学习过程中,查资料所掌握的一些小知识,和大家分享,关于APP的内容...
  • hekaidong
  • hekaidong
  • 2008年04月02日 10:27
  • 763
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:根据进程号获取进程路径函数(原创):
举报原因:
原因补充:

(最多只允许输入30个字)