Java调用的Windows API GetShortPathName(Java call for

2019-06-25 12:12发布

我想在我的Java类使用本地Windows API函数。

我感兴趣的功能是GetShortPathName。 http://msdn.microsoft.com/en-us/library/aa364989%28VS.85%29.aspx

我试图用这个- http://dolf.trieschnigg.nl/eightpointthree/eightpointthree.html但在某些情况下完全用Java崩溃当我使用它,所以它不是我的选项。

现在的问题是我必须在如C编写代码,使DLL,然后使用该DLL的JNI / JNA? 或者,也许我有点可以访问不同的方式,系统API?

我会感谢您的意见。 如果你也许可以张贴一些代码作为例子,我将不胜感激。

...

我发现使用JNA答案



import com.sun.jna.Native;
import com.sun.jna.platform.win32.Kernel32;

public class Utils {

    public static String GetShortPathName(String path) {
        byte[] shortt = new byte[256];

        //Call CKernel32 interface to execute GetShortPathNameA method
        int a = CKernel32.INSTANCE.GetShortPathNameA(path, shortt, 256);
        String shortPath = Native.toString(shortt);
        return shortPath;

    }

    public interface CKernel32 extends Kernel32 {

        CKernel32 INSTANCE = (CKernel32) Native.loadLibrary("kernel32", CKernel32.class);

        int GetShortPathNameA(String LongName, byte[] ShortName, int BufferCount);
    }

}

Answer 1:

感谢您的提示。 以下是我的功能得到改善。 它使用GetShortPathName的Unicode版本

import com.sun.jna.Native;
import com.sun.jna.platform.win32.Kernel32;

public static String GetShortPathName(String path) {
    char[] result = new char[256];

    Kernel32.INSTANCE.GetShortPathName(path, result, result.length);
    return Native.toString(result);
}


文章来源: Java call for Windows API GetShortPathName