Java JNA FindWindow() - 查找函数“FindWindow”时出错:找不到指定的过程
Posted
技术标签:
【中文标题】Java JNA FindWindow() - 查找函数“FindWindow”时出错:找不到指定的过程【英文标题】:Java JNA FindWindow() - Error looking up function 'FindWindow': The specified procedure could not be found 【发布时间】: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
。您可以使用他们的定义,或者如果您更喜欢使用自己的定义,您可以查看您的设置与他们的设置有何不同。
【参考方案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");
【讨论】:
以上是关于Java JNA FindWindow() - 查找函数“FindWindow”时出错:找不到指定的过程的主要内容,如果未能解决你的问题,请参考以下文章
全网首发:There is an incompatible JNA native library installed on this system/6.1.2/4.0.1
全网首发:There is an incompatible JNA native library installed on this system/6.1.2/4.0.1