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

标签: function string vb command system
4374人阅读 评论(1) 收藏 举报
分类:

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

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

查看评论

[Win32] 获取进程完整路径

上两篇中,我们讲到了ToolHelp API,Process API和提升Debug权限,这一篇中来说说如何获取进程的程序路径。 获取进程路径其实有很多方法。 方法1。使用ToolHelp API枚举...
  • zuishikonghuan
  • zuishikonghuan
  • 2015-08-18 10:35:49
  • 5257

获取进程全路径

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

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

想获得进程可执行文件的路径最常用的方法是通过GetModuleFileNameEx函数获得可执行文件的模块路径这个函数从Windows NT 4.0开始到现在的Vista系统都能使用,向后兼容性比较好...
  • zjccsg
  • zjccsg
  • 2016-07-16 20:00:55
  • 1233

在Windows上获取进程的可执行文件路径

在Windows上根据进程PID获取其可执行文件的路径,是一个常见的问题。通常我们采用广为人知的API——GetModuleFileNameEx。此函数兼容性极佳,最低支持版本为Windows2000...
  • mkdym
  • mkdym
  • 2013-03-21 19:33:57
  • 2776

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

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

WindowsAPI详解——获得进程可执行文件路径的几种方法

WindowsAPI详解——获得进程可执行文件路径的几种方法   想获得进程可执行文件的路径最常用的方法是通过GetModuleFileNameEx函数获得可执行文件的模块路径这个函数从Windows...
  • thanklife
  • thanklife
  • 2014-03-20 15:47:02
  • 6025

c#调用API(GetModuleFileName)获取程序路径返回乱码有关问题

c#调用API(GetModuleFileName)获取程序路径返回乱码有关问题
  • onlyzkg
  • onlyzkg
  • 2014-10-08 21:39:12
  • 1346

VC++ 通过进程名或进程ID获取进程句柄

VC++ 通过进程名或进程ID获取进程句柄 HANDLE GetProcessHandle(int nID)//通过进程ID获取进程句柄{return OpenProcess(PROCESS_ALL_...
  • luxiaoyu_sdc
  • luxiaoyu_sdc
  • 2011-06-09 18:45:00
  • 15464

VC下通过进程ID获取进程镜像文件路径的方法及其存在的缺陷

        工作中经常会遇到通过进程ID获取进程镜像文件或者其他模块的路径的需求。(转载请指明出处)网上关于方案大致存在两种方案:OpenProcess-&amp;gt;GetModuleFile...
  • breaksoftware
  • breaksoftware
  • 2012-04-20 23:26:22
  • 8089

获取应用程序当前所在实际路径

当前路径与应用程序所在的路径有可能是不同的,特别是在使用CFileDialog(或之类东西的时候)有可能将当前路径改为与应用程序所在路径不同的其他地方。以下就是获取应用程序所在路径的方法(我放在CMa...
  • fandongwei
  • fandongwei
  • 2007-04-15 04:08:00
  • 1360
    个人资料
    持之以恒
    等级:
    访问量: 233万+
    积分: 2万+
    排名: 210
    文章存档
    最新评论