如何在Java中使用kernel32.dll
我正在尝试从Windows安装中获取一些信息。 我可以用下面的C语言代码轻松地做到这一点,但我正在寻找一个Java实现 我需要访问以下变量和方法:如何在Java中使用kernel32.dll,java,kernel32,Java,Kernel32,我正在尝试从Windows安装中获取一些信息。 我可以用下面的C语言代码轻松地做到这一点,但我正在寻找一个Java实现 我需要访问以下变量和方法: internal struct OSVERSIONINFOEX { public Int32 dwOSVersionInfoSize; public Int32 dwMajorVersion; public Int32 dwMinorVersion; public Int
internal struct OSVERSIONINFOEX
{
public Int32 dwOSVersionInfoSize;
public Int32 dwMajorVersion;
public Int32 dwMinorVersion;
public Int32 dwBuildNumber;
public Int32 dwPlatFormId;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 128)]
public String szCSDVersion;
public short wServicePackMajor;
public short wServicePackMinor;
public short wSuiteMask;
public byte wProductType;
public byte wReserved;
}
[DllImport("kernel32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
internal static extern Boolean GetVersionEx(ref OSVERSIONINFOEX osVersionInfo);
[DllImport("kernel32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
internal static extern Boolean GetProductInfo(
[In] Int32 dwOSMajorVersion,
[In] Int32 dwOSMinorVersion,
[In] Int32 dwSpMajorVersion,
[In] Int32 dwSpMinorVersion,
[Out] out Int32 pdwReturnedProductType);
[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
internal static extern Boolean GetSystemMetrics([In] Int32 nIndex);
经过更多的研究,这里是如何完成这项任务。您必须使用JNA库
public interface Kernel32 extends com.sun.jna.platform.win32.Kernel32 {
// Method declarations, constant and structure definitions go here
Kernel32 INSTANCE = (Kernel32)
Native.loadLibrary("kernel32", Kernel32.class, com.sun.jna.win32.W32APIOptions.DEFAULT_OPTIONS);
boolean GetVersionEx(WinNT.OSVERSIONINFOEX osVersionInfo);
boolean GetProductInfo(
int dwOSMajorVersion,
int dwOSMinorVersion,
int dwSpMajorVersion,
int dwSpMinorVersion,
IntByReference pdwReturnedProductType);
boolean GetSystemMetrics(int nIndex);
}
public static boolean GetVersionInfo(WinNT.OSVERSIONINFOEX osVersionInfo) {
return Kernel32.INSTANCE.GetVersionEx(osVersionInfo);
}
要获取信息,请在代码中运行以下命令:
WinNT.OSVERSIONINFOEX osVersionInfo = new WinNT.OSVERSIONINFOEX();
if (!NativeMethods.GetVersionInfo(osVersionInfo)) {
System.out.println("Info failed to load!");
}
你需要一个或一个。谢谢,我想出来了。我很快会回答我自己的问题。