gpt4 book ai didi

java - JNA 使用宏

转载 作者:行者123 更新时间:2023-12-02 00:37:08 25 4
gpt4 key购买 nike

是否可以将以下宏函数与JNA映射?

int ListView_FindItem(
HWND hwnd,
int iStart,
const LPLVFINDINFO plvfi
);

我尝试使用 StdCallLibraryb 映射此函数,但这似乎不起作用(抛出函数未找到异常)。

基本上我正在尝试在桌面 ListView 中查找特定项目的索引。我有我想要查找的项目的名称。

编辑:我尝试使用发送消息功能,但出现以下异常

Exception in thread "main" java.lang.UnsatisfiedLinkError: Error looking up function   
'GetMessage': The specified procedure could not be found.

at com.sun.jna.Function.<init>(Function.java:179)
at com.sun.jna.NativeLibrary.getFunction(NativeLibrary.java:347)
at com.sun.jna.NativeLibrary.getFunction(NativeLibrary.java:327)
at com.sun.jna.Library$Handler.invoke(Library.java:203)
at $Proxy0.GetMessage(Unknown Source)
at javaapplication4.Main.main(Main.java:43)
Java Result: 1

这是我使用的代码

public class Main {


public static class LVFINDINFO extends Structure {
public int flags =1002;
public String psz = "new folder3";
public LPARAM lParam ;
public POINT pt;
public int vkDirection;
}
public static class MSG extends Structure {
public HWND hWnd;
public int message;
public int wParam =-1;
public LVFINDINFO lParam1;
public int time;
public POINT pt;

public MSG(LVFINDINFO lParam) {
lParam1 = lParam;
}
}

public static void main(String[] args) {
User32 user32 = (User32) Native.loadLibrary("User32", User32.class);

LVFINDINFO i = new LVFINDINFO();
MSG m = new MSG(i);
user32.GetMessage(m, user32.GetDesktopWindow(), 0, 0);

System.out.println(user32.GetMessage(m, user32.GetDesktopWindow(), 0, 0));
}

}

最佳答案

由于宏纯粹存在于编译时,因此无法使用 JNA 调用它。

您需要查看该宏实际执行的操作并执行该操作。根据the documentation它发送the LVM_FINDITEM message 。您需要了解如何使用 JNA 发送该消息。

关于java - JNA 使用宏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7496530/

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