2011-09-21 59 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