Тотальная неудачница и убийца жёстких дисков.
#post-id: 2794-22-17
#original-date: 20.03.2008 Thu
#original-time: 10:17 PM
#original-day: 2794
#original-host: WinXP Prof SP2 (Build 2600)
Получение списка загруженных модулей в текущем процессе. Этот код наконец унифицирует окно "О программе" моих программ в Windows 9x и Windows NT. А то у меня используются Tool Help функции, а в WinNT4 их нет... В результате вкладка с модулями просто не показывается.
Код не работает в Win9x. Вообще-то есть версия PSAPI.DLL для Windows 95, но она весит четыре кило, так что выводы делайте сами ^^
#music: Initial D\Initial D D Selection\Mega NRG Man / Get Me Power
#original-date: 20.03.2008 Thu
#original-time: 10:17 PM
#original-day: 2794
#original-host: WinXP Prof SP2 (Build 2600)
Получение списка загруженных модулей в текущем процессе. Этот код наконец унифицирует окно "О программе" моих программ в Windows 9x и Windows NT. А то у меня используются Tool Help функции, а в WinNT4 их нет... В результате вкладка с модулями просто не показывается.
Option Explicit
Type MODULEINFO
lpBaseOfDll As POINTER
SizeOfImage As Long
EntryPoint As POINTER
End Type
' API_HANDLE = Long
' C_BOOL = Long
' POINTER = Long
' BStr = String
Declare Function EnumProcesses Lib "PSAPI.DLL" _
(ByRef pProcessIds As Long, _
ByVal cb As Long, _
ByRef pBytesReturned As Long) As C_BOOL
Declare Function EnumProcessModules Lib "PSAPI.DLL" _
(ByVal hProcess As API_HANDLE, _
ByRef lphModule As API_HANDLE, _
ByVal cb As Long, _
ByRef lpcbNeeded As Long) As C_BOOL
Declare Function GetModuleBaseName Lib "PSAPI.DLL" Alias "GetModuleBaseNameA" _
(ByVal hProcess As API_HANDLE, _
ByVal hModule As API_HANDLE, _
ByVal lpBaseName As BStr, _
ByVal nSize As Long) As Long
Declare Function GetModuleFileNameEx Lib "PSAPI.DLL" _
Alias "GetModuleFileNameExA" _
(ByVal hProcess As API_HANDLE, _
ByVal hModule As API_HANDLE, _
ByVal lpFileName As BStr, _
ByVal nSize As Long) As Long
Declare Function GetModuleInformation Lib "PSAPI.DLL" _
(ByVal hProcess As API_HANDLE, _
ByVal hModule As API_HANDLE, _
ByRef lpmodinfo As MODULEINFO, _
ByVal cb As Long) As C_BOOL
'====================================================================
Public Sub Main()
Const MAX_MODS = 2048
Dim hProcess As API_HANDLE
Dim RC As Long
Dim hMod(0 To MAX_MODS - 1) As API_HANDLE
Dim cbNeeded As Long
Dim TMP As Long
Dim ModuleName As BStr
Dim MI As MODULEINFO
hProcess = GetCurrentProcess()
RC = EnumProcessModules(hProcess, hMod(0), MAX_MODS * 4, cbNeeded)
If RC = 0 Then
MsgBox "Can't enum process modules!", vbCritical
Else
For TMP = 0 To (cbNeeded / 4) - 1
ModuleName = String(1025, 0)
GetModuleFileNameEx hProcess, hMod(TMP), ModuleName, 1024
ModuleName = asGetStringFromPointerA(ModuleName)
Debug.Print ModuleName
RC = GetModuleInformation(hProcess, hMod(TMP), MI, Len(MI))
If RC <> 0 Then
Debug.Print asHexEx4(MI.lpBaseOfDll) & " " _
asHexEx4(MI.EntryPoint) & " " & _
asFormatUnsignedLong(MI.SizeOfImage)
End If
Next TMP
End If
End Sub
Код не работает в Win9x. Вообще-то есть версия PSAPI.DLL для Windows 95, но она весит четыре кило, так что выводы делайте сами ^^
#music: Initial D\Initial D D Selection\Mega NRG Man / Get Me Power