2011-09-21 56 views
0

是否可以使用JNA映射以下宏函数?JNA使用宏

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

我试图地图StdCallLibraryb这个功能,但似乎并没有工作 (功能未发现异常被抛出)。

基本上我试图在桌面的列表视图中找到特定项目的索引。 我有我打算找到的物品的名称。

编辑: 我已经使用发送邮件功能尝试,我得到下面的异常

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)); 
} 

} 
+0

我想你想要SendMessage()或PostMessage(),而不是GetMessage()。 –

+0

一旦你调用了正确的函数,调用GetLastError()来查看它是否正确执行。 – technomage

回答

3

代码由于宏在编译时纯粹存在,无法使用JNA来调用它。

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

+0

嗨Joachim感谢您的快速回复。我编辑了我的答案,包含我使用消息功能时遇到的问题 – paktrick