2014-02-22 105 views
0

我正試圖在名爲MyWindowTitle的窗口中使用JNAJava JNA FindWindow() - 查找函數'FindWindow'時出錯:無法找到指定的程序

import com.sun.jna.Native; 
import com.sun.jna.win32.StdCallLibrary; 
import com.sun.jna.platform.win32.WinDef.HWND; 

public class ToFront { 

public static interface User32 extends StdCallLibrary { 
    final User32 instance = (User32) Native.loadLibrary ("user32", User32.class); 
    HWND FindWindow(String winClass, String title); 
    boolean ShowWindow(HWND hWnd, int nCmdShow); 
    boolean SetForegroundWindow(HWND hWnd); 

} 


public static void main(String[] args) { 
    HWND hwnd = User32.instance.FindWindow(null, "MyWindowTitle"); 
    User32.instance.ShowWindow(hwnd, 9); 
    User32.instance.SetForegroundWindow(hwnd); 
} 

} 

我得到以下異常java.lang.UnsatisfiedLinkError: Error looking up function 'FindWindow': The specified procedure could not be found.

+0

JNA帶有標準窗口函數的定義。看看'com.sun.jna.platform.win32.User32'。你可以使用他們的定義,或者如果你喜歡使用自己的定義,你可以看到你的設置與他們的不同。 – jdigital

回答

2

檢查你函數的拼寫。您可以使用dependency walker來查看該函數是否存在於您的dll中。

PS:當我打開user32.dll中那些功能我發現

:FindWindowA,FindWindowExA,FindWindowExW,FindWindowW 
1

您可以使用下面的代碼調用FindWindowEx。請注意,FindFindow根據這篇文章不搜索子窗口http://msdn.microsoft.com/en-us/library/windows/desktop/ms633499(v=vs.85).aspx

import com.sun.jna.Native; 
import com.sun.jna.platform.win32.User32; 
import com.sun.jna.platform.win32.WinDef.HWND; 
import com.sun.jna.win32.StdCallLibrary; 

public class SomeClass 
{ 
    public static interface User32 extends StdCallLibrary 
    { 
     final User32 instance = (User32) Native.loadLibrary ("user32", User32.class); 
     HWND FindWindowExA(HWND hwndParent, HWND childAfter, String className, String windowName); 
     HWND FindWindowA(String className, String windowName); 
    } 

    public static void main(String[] args) 
    { 
     HWND hwndShell = User32.instance.FindWindowExA(null, null, "Shell_TrayWnd", null); 
     HWND hWnd = User32.instance.FindWindowExA(hwndShell, null, "Start", "Start");  
    } 
} 
相關問題