2017-01-29 13 views
1

Windowsインストールからいくつかの情報を取得しようとしています。 私はこれをC#の以下のコードで簡単に行うことができましたが、私はJavaの実装を探しています。ここではいくつかのより多くの研究がタスクを完了するために、どのようにしたらJavaでkernel32.dllを使用する方法

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); 
+2

を/ technotes/guides/jni /)*または* [JNA](https://github.com/java-native-access/jna)を参照してください。 –

+0

私はそれを考え出しました。私はすぐに自分の質問に答えます。 –

答えて

1

は、私は次の変数やメソッドにアクセスする必要があります。 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); 
} 

あなたは、あなたのコードに次のように実行して情報を取得するには:[JNI]の1(http://docs.oracle.com/javase/8/docsが必要になります

WinNT.OSVERSIONINFOEX osVersionInfo = new WinNT.OSVERSIONINFOEX(); 

if (!NativeMethods.GetVersionInfo(osVersionInfo)) { 
    System.out.println("Info failed to load!"); 
} 
関連する問題