【发布时间】:2011-05-10 16:18:31
【问题描述】:
我正在尝试在 Windows 7 上使用 JNA 检测 AppData\LocalLow 在 Java 上工作的位置。但最接近该工作的函数是:
W32API.HRESULT SHGetFolderPath(W32API.HWND hwndOwner,int nFolder,W32API.HANDLE
hToken,W32API.DWORD dwFlags,char[] pszPath)
但就我而言,JAVA + JNA,我想知道如何仅将LocalLow GUID 与SHGetFolderPath 一起使用,或者我应该从不同的角度看待问题(也许JNI 在这里会更好? )
如果有人可以帮忙,谢谢
干杯
编辑: 好的,现在我添加了 SHGetKnownFolderPath,但是在这里,它一直返回给我类似 "?f" 的字符串
static interface Shell32 extends Library {
public static final int MAX_PATH = 260;
public static final String FOLDERID_APPDATALOW = "{A520A1A4-1780-4FF6-BD18-167343C5AF16}";
static Shell32 INSTANCE = (Shell32) Native.loadLibrary("shell32",
Shell32.class, OPTIONS);
public int SHGetKnownFolderPath(Guid.GUID rfid, int dwFlags, HANDLE hToken,
char[] pszPath);
}
public static void main(String[] args) {
char[] pszPath = new char[Shell32.MAX_PATH];
Guid.GUID localLowId = Ole32Util.getGUIDFromString(Shell32.FOLDERID_APPDATALOW);
int hResult = Shell32.INSTANCE.SHGetKnownFolderPath(localLowId, 0, null, pszPath);
if (hResult == 0) {
String path = new String(pszPath);
int len = path.indexOf('\0');
path = path.substring(0, len);
System.out.println(path);
} else {
System.err.println("Error: " + hResult);
}
}
【问题讨论】:
-
您可能需要扩展 StdCallLibrary 而不是 Library,因为 w32 API 使用 stdcall 调用约定。
标签: java winapi java-native-interface jna ffi