一个form一个button一个ListOption ExplicitPrivate Declare Function LdrEnumerateLoadedModules Lib "ntdll.dll" (ByVal Flags As Long, ByVal CallbackFunction As Long, ByVal Context As Long) As LongPrivate Sub Command1_Click()
    LdrEnumerateLoadedModules 0, AddressOf CallbackFunction, 0
End Sub一个模块Option ExplicitPrivate Type LIST_ENTRY
    Flink As Long
    Blink As Long
End TypePrivate Type UNICODE_STRING
    Length As Integer
    MaxLength As Integer
    Buffer As Long
End TypePrivate Type LDR_DATA_TABLE_ENTRY
    InLoadOrderLinks As LIST_ENTRY
    InMemoryOrderLinks As LIST_ENTRY
    InInitializationOrderLinks As LIST_ENTRY
    DllBase As Long
    EntryPoint As Long
    SizeOfImage As Long
    FullDllName As UNICODE_STRING
    BaseDllName As UNICODE_STRING
    Flags As Long
    LoadCount As Integer
    TlsIndex As Integer
    '...省略
End TypePrivate Declare Function lstrlenW Lib "kernel32" (ByVal lpString As Long) As Long
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)Public Sub CallbackFunction( _
                             DataTableEntry As LDR_DATA_TABLE_ENTRY, _
                             ByVal Context As Long, _
                             StopEnumeration As Long _
                             )
    Dim strModuleName As String
    
    strModuleName = String(lstrlenW(DataTableEntry.FullDllName.Buffer) * 2, 0)
    
    CopyMemory ByVal strModuleName, ByVal DataTableEntry.FullDllName.Buffer, DataTableEntry.FullDllName.Length
    
    Form1.List1.AddItem StrConv(strModuleName, vbFromUnicode)
End Sub