gpt4 book ai didi

java - 使用JNA检测AppData\LocalLow的位置

转载 作者:行者123 更新时间:2023-11-30 05:03:15 25 4
gpt4 key购买 nike

我正在尝试在 Windows 7 上使用 JNA 检测 Java 上的 AppData\LocalLow 工作的位置。但可用于该作业的最接近的函数是:

W32API.HRESULT SHGetFolderPath(W32API.HWND hwndOwner,int nFolder,W32API.HANDLE
hToken,W32API.DWORD dwFlags,char[] pszPath)

这里有Solution in C#

但就我而言,JAVA + JNA,我想知道如何仅将 LocalLow GUIDSHGetFolderPath 一起使用,或者也许我应该从不同的角度(也许 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);
}

}

最佳答案

您可以扩展Shell32(或创建您自己的类似类)来访问 SHGetKnownFolderPath API:

W32API.HRESULT SHGetKnownFolderPath(
Guid.GUID rfid,
W32API.DWORD dwFlags,
W32API.HANDLE hToken,
char[] pszPath);

关于java - 使用JNA检测AppData\LocalLow的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5953149/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com