1 回答

TA貢獻1836條經驗 獲得超5個贊
目前,方法 EnumProcessModulesEx 未映射到 JNA,因此您必須制作自己的 Psapi 自定義版本,在我的例子中,它看起來像這樣:
import com.sun.jna.Native;
import com.sun.jna.platform.win32.Psapi;
import com.sun.jna.platform.win32.WinDef.HMODULE;
import com.sun.jna.platform.win32.WinNT.HANDLE;
import com.sun.jna.ptr.IntByReference;
import com.sun.jna.win32.W32APIOptions;
public interface CustomPsapi extends Psapi{
Psapi INSTANCE = Native.load("psapi", Psapi.class,
W32APIOptions.DEFAULT_OPTIONS);
public void EnumProcessModulesEx(HANDLE hProcess, HMODULE[] lphModule, int cb,
IntByReference lpcbNeeded, int dwFilterFlag);
}
然后您可以加載自定義類并使用您映射的方法。
public static CustomPsapi c_psapi = Native.load("psapi", CustomPsapi.class);
為了讓所有 DLL 正確顯示,您需要使用現在映射的 EnumProcessModulesEx 方法,并將所有模塊的標志作為最后一個參數 (0x03),因此該方法應如下所示:
c_psapi.EnumProcessModulesEx(process, modules, 1024, new IntByReference(1024), 0x03);
添加回答
舉報