Login | Register   
LinkedIn
Google+
Twitter
RSS Feed
Download our iPhone app
TODAY'S HEADLINES  |   ARTICLE ARCHIVE  |   FORUMS  |   TIP BANK
Browse DevX
Sign up for e-mail newsletters from DevX


Tip of the Day
Language: VB6,WIn9x,,Win2K
Expertise: Intermediate
Feb 6, 2001

GetProcessModules - The list of DLLs and OCXes a process uses

Const MAX_MODULE_NAmeInfo = 255
Const MAX_PATH = 260
Const TH32CS_SNAPMODULE = &H8

Private Type MODULEENTRY32
    dwSize As Long
    th32ModuleID As Long
    th32ProcessID As Long
    GlblcntUsage As Long
    ProccntUsage As Long
    modBaseAddr As Long
    modBaseSize As Long
    hModule As Long
    szModule As String * 256
    szExePath As String * MAX_PATH
End Type

Private Declare Function CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (ByVal _
    dest As Any, ByVal source As Any, ByVal bytes As Long) As Long
Private Declare Function CreateToolhelpSnapshot Lib "kernel32" Alias _
    "CreateToolhelp32Snapshot" (ByVal lFlags As Long, ByVal lProcessID As Long) _
    As Long
Private Declare Function Module32First Lib "kernel32" (ByVal hSnapshot As Long, _
    lpmeInfo As MODULEENTRY32) As Long
Private Declare Function Module32Next Lib "kernel32" (ByVal hSnapshot As Long, _
    lpmeInfo As MODULEENTRY32) As Long
Private Declare Sub CloseHandle Lib "kernel32" (ByVal hPass As Long)
Private Declare Function GetCurrentProcessId Lib "kernel32" () As Long

' Return the list of DLLs and OCXes that a process uses
' if argument if omitted, the current process is used
'
' names are stored starting at element 1 in the result array
' thus UBound(result) gives the number of modules
' in general, the first element is the name of the EXE file.

' NOTES: works only on Win 9x and 2000 (not on NT)

Function GetProcessModules(Optional ByVal processID As Long = -1) As String()
    Dim meInfo As MODULEENTRY32
    Dim success As Long
    Dim hSnapshot As Long
    ReDim res(0) As String
    Dim count As Long
    
    ' provide a default argument, if missing
    If processID = -1 Then processID = GetCurrentProcessId
    
    ' get information about the given process
    hSnapshot = CreateToolhelpSnapshot(TH32CS_SNAPMODULE, processID)
    ' exit now if process ID is invalid
    If hSnapshot = 0 Then GoTo ExitProc
    
    ' prepare the structure for receiving info
    meInfo.dwSize = Len(meInfo)
    
    ' get info on the first module
    success = Module32First(hSnapshot, meInfo)
    Do While success
        ' consider only modules belonging to the specified process
        If meInfo.th32ProcessID = processID Then
            count = count + 1
            ' make room in the array, if needed
            If count > UBound(res) Then
                ReDim Preserve res(count + 100) As String
            End If
            ' store the result
            res(count) = Left$(meInfo.szExePath, InStr(meInfo.szExePath & _
                vbNullChar, vbNullChar) - 1)
        End If
        ' continue the search
        success = Module32Next(hSnapshot, meInfo)
    Loop
    
    ' close the snapshot
    CloseHandle hSnapshot
    
ExitProc:
    ' trim out elements in excess
    ReDim Preserve res(0 To count) As String
    
    GetProcessModules = res
End Function



Francesco Balena
 
Comment and Contribute

 

 

 

 

 


(Maximum characters: 1200). You have 1200 characters left.

 

 

Sitemap
Thanks for your registration, follow us on our social networks to keep up-to-date