'参数1 进程窗口名、类名或者进程名,参数2 模块名 ,参数3 模块所在的路径关键字 比如 C盘 WINDOWS 目录下的路径 就填写 "WINDOWS" 即可
'这个函数一般不怎么用,一般用上面的 GetProcessModuleHandle 函数就可以了,那么这个函数为啥我要写呢? 因为 有的时候 同模块名 但是路径不同 并且这2个模块 版本也不同,只是模块名相同。这个时候 就需要区分 路径关键字了
'比如d3d9.dll这个 模块 一般 某类进程目录下面有,操作系统C盘上也有。 但是 真正调用的是系统的那个模块
' Dim mymod1 As Long
' mymod1 = GetProcessModuleHandleEx("植物大战僵尸中文版", "d3d9.dll","WINDOWS")
Public Function GetProcessModuleHandleEx(ByVal WindowClassVsWindowTextExeName As String, ByVal ModuleName As String, ByVal DLL_Path As String) As Long
Dim pr As PROCESSENTRY32
Dim lp As Long
Dim mo As MODULEENTRY32
Dim LM As Long
Dim i As Long
Dim Temp As Variant
If ModuleName = "" Then GetProcessModuleHandleEx = 0: Exit Function
pr.dwSize = Len(pr)
LM = CreateToolhelp32Snapshot(TH32CS_SNAPmodule, GetPid(WindowClassVsWindowTextExeName))
If LM > 0 Then
mo.dwSize = Len(mo)
If Module32First(LM, mo) Then
Do
Temp = Left(mo.szExePath, InStr(mo.szExePath, Chr(0)) - 1)
Temp = Mid(Temp, InStrRev(Temp, "\") + 1)
If UCase(Temp) = UCase(ModuleName) And InStr(UCase(mo.szExePath), UCase(DLL_Path)) Then '"WINDOWS"
GetProcessModuleHandleEx = mo.modBaseAddr
Exit Function
End If
i = i + 1
Loop Until Module32Next(LM, mo) = 0
End If
CloseHandle (LM)
End If
End Function
'参数1 进程窗口名、类名或者进程名,参数2 模块名 ,参数3 模块所在的路径关键字 比如 C盘 WINDOWS 目录下的路径 就填写 "WINDOWS" 即可
'这个函数一般不怎么用,一般用上面的 GetProcessModuleHandle 函数就可以了,那么这个函数为啥我要写呢? 因为 有的时候 同模块名 但是路径不同 并且这2个模块 版本也不同,只是模块名相同。这个时候 就需要区分 路径关键字了
'比如d3d9.dll这个 模块 一般 某类进程目录下面有,操作系统C盘上也有。 但是 真正调用的是系统的那个模块
' Dim mymod1 As Long
' mymod1 = GetProcessModuleHandleEx("植物大战僵尸中文版", "d3d9.dll","WINDOWS")
VB站 www.zai996.com q1016058890