【问题标题】:Java JNA FindWindow() - Error looking up function 'FindWindow': The specified procedure could not be foundJava JNA FindWindow() - 查找函数“FindWindow”时出错:找不到指定的过程
【发布时间】:2014-03-24 14:24:06
【问题描述】:

我正在尝试使用JNA 将名为MyWindowTitle 的窗口置于前面。

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.

【问题讨论】:

  • JNA 附带标准窗口函数的定义。看看com.sun.jna.platform.win32.User32。您可以使用他们的定义,或者如果您更喜欢使用自己的定义,您可以查看您的设置与他们的设置有何不同。

标签: java jna user32


【解决方案1】:

检查函数的拼写。您可以使用dependency walker 来查看该函数是否存在于您的dll 中。

Ps : 当我打开 user32.dll 时,这些是我发现的函数

:FindWindowA,FindWindowExA,FindWindowExW,FindWindowW 

【讨论】:

    【解决方案2】:

    您可以使用以下调用 FindWindowEx 的代码。注意FindFidow不会根据这篇文章搜索子窗口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");     
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2012-05-29
      • 1970-01-01
      • 2012-06-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多