lngReturn = GetModuleFileNameExA(lngHwndProcess, 0, strModuleName, 1024) '获得程序路径
这条语句使用的时候对有些进程会返回空,不知道怎么回事,该咱们办?

解决方案 »

  1.   

    看看这个有用没有啊Declare Function GetWindowThreadProcessId Lib "user32" (ByVal hWnd As Long, _
                                                            lpdwProcessId As Long) As Long
    Declare Function CloseHandle Lib "Kernel32.dll" (ByVal Handle As Long) As Long
    Declare Function OpenProcess Lib "Kernel32.dll" (ByVal dwDesiredAccessas As Long, _
                     ByVal bInheritHandle As Long, ByVal dwProcId As Long) As Long
    Declare Function GetModuleFileNameExA Lib "psapi.dll" (ByVal hProcess As Long, _
                     ByVal hModule As Long, ByVal ModuleName As String, ByVal nSize As Long) As Long
    Declare Function EnumProcessModules Lib "psapi.dll" (ByVal hProcess As Long, _
                     ByRef lphModule As Long, ByVal cb As Long, ByRef cbNeeded As Long) As Long
       
    Const PROCESS_QUERY_INFORMATION = 1024
    Const PROCESS_VM_READ = 16
    Const MAX_PATH = 260Public Function GetPath(ByVal hWnd As Long) As String
      Dim hProcess   As Long
      Dim ProcID     As Long
      Dim cbNeed     As Long
      Dim ModuleName As String
      Dim nSize      As Long
      Dim lRet       As Long
      Dim mModules(1 To 200) As Long
      GetWindowThreadProcessId hWnd, ProcID
      hProcess = OpenProcess(PROCESS_QUERY_INFORMATION Or PROCESS_VM_READ, 0, ProcID)
      lRet = EnumProcessModules(hProcess, mModules(1), 200, cbNeed)
      If lRet <> 0 Then
         ModuleName = Space(MAX_PATH)
         nSize = 500
         lRet = GetModuleFileNameExA(hProcess, mModules(1), ModuleName, nSize)
         GetPath = Left(ModuleName, lRet)
      End If
      ret = CloseHandle(hProcess)
    End Function
      

  2.   

    同上, 要首先 OpenProcess