; 获取进程中加载​​的所有模块,以自身脚本进程为例
OwnPID := DllCall("GetCurrentProcessId")
for i, v in GetProcessModules(OwnPID)
  MsgBox % "Module #" i ":`n" v
; -> C:\Program Files\AutoHotkey\AutoHotkey.exe
; -> C:\Windows\SYSTEM32\ntdll.dll
; -> C:\Windows\System32\KERNEL32.DLL
; -> ...

GetProcessModules(ProcessID) {
  if !(hProcess := DllCall("OpenProcess", "uint", 0x0410, "int", 0, "uint", ProcessID, "ptr"))
    throw Exception("OpenProcess failed", -1)
  if !(DllCall("psapi\EnumProcessModulesEx", "ptr", hProcess, "ptr", 0, "uint", 0, "uint*", size, "uint", 0x03))
    throw Exception("EnumProcessModulesEx failed", -1)
  cb := VarSetCapacity(hModule, size, 0)
  if !(DllCall("psapi\EnumProcessModulesEx", "ptr", hProcess, "ptr", &hModule, "uint", cb, "uint*", size, "uint", 0x03))
    throw Exception("EnumProcessModulesEx failed", -1)
  MODULES := []
  loop % size // A_PtrSize
  {
    size := VarSetCapacity(buf, 0x0104 << 1, 0)
    if !(DllCall("psapi\GetModuleFileNameEx", "ptr", hProcess, "ptr", NumGet(hModule, (A_Index - 1) * A_PtrSize, "ptr"), "ptr", &buf, "uint", size))
      throw Exception("GetModuleFileNameEx failed", -1)
    MODULES[A_Index] := StrGet(&buf)
  }
  return MODULES, DllCall("CloseHandle", "ptr", hProcess)
}

 

声明:站内资源为整理优化好的代码上传分享与学习研究,如果是开源代码基本都会标明出处,方便大家扩展学习路径。请不要恶意搬运,破坏站长辛苦整理维护的劳动成果。本站为爱好者分享站点,所有内容不作为商业行为。如若本站上传内容侵犯了原著者的合法权益,请联系我们进行删除下架。