未找到 Java JNA sendMessage()

Posted

技术标签:

【中文标题】未找到 Java JNA sendMessage()【英文标题】:Java JNA sendMessage() not found 【发布时间】:2013-02-09 15:20:33 【问题描述】:

我正在尝试使用 JNA (Overview) 在最小化或不在顶部(例如鼠标单击)时向应用程序发送消息,并且我发现人们正在使用 com.sun.jna.platform.win32.User32.SendMessageA(hW, 0x0201, 0, 0);

但是我在这个类中找不到这个函数。

如果我做错了,谁能给我一个如何实现它的例子?

代码:

User32 user32;
Pointer hW = user32.GetForegroundWindow().getPointer();
user32.SendMessageA( hW, 0x0201, 0, 0 );

【问题讨论】:

请发布您的代码 其实只有这几行,我尝试用发送消息给hW() user32 在这里为空... 您必须将 JNA JAR 添加到您的类路径中。 Aubin 感谢您的建议,我认为 Chuck Fricano 的答案正是我想要的。我只是需要更多帮助 【参考方案1】:
public interface User32Ext extends User32 
User32Ext USER32EXT = (User32Ext) Native.loadLibrary("user32",

        User32Ext.class, W32APIOptions.DEFAULT_OPTIONS);

HWND FindWindowEx(HWND lpParent, HWND lpChild, String lpClassName,
        String lpWindowName);

HWND GetTopWindow(HWND hwnd);

HWND GetParent(HWND hwnd);

HWND GetDesktopWindow();

int SendMessage(HWND hWnd, int dwFlags, byte bVk, int dwExtraInfo);

int SendMessage(HWND hWnd, int Msg, int wParam, String lParam);

void keybd_event(byte bVk, byte bScan, int dwFlags, int dwExtraInfo);

void SwitchToThisWindow(HWND hWnd, boolean fAltTab);


【讨论】:

【参考方案2】:

你需要自己定义这个函数。并非所有的 windows 函数都是预定义的。

示例:(未经测试 - 仅限使用示例)

public interface MyUser32 extends User32 
    MyUser32 INSTANCE = (MyUser32)Native.loadLibrary("user32", MyUser32.class, W32APIOptions.DEFAULT_OPTIONS);
    LRESULT SendMessage(HWND hWnd, int Msg, WPARAM wParam, LPARAM lParam);

【讨论】:

什么是 wParam 和 lParam plz?,你知道我什么时候可以得到所有 Msg 的列表 在 win API 文档中查找。 msdn.microsoft.com/en-us/library/windows/desktop/…

以上是关于未找到 Java JNA sendMessage()的主要内容,如果未能解决你的问题,请参考以下文章

在 Java 中使用 ImageSearchDll.dll(来自 AutoIt)编辑:JNA

使用 JNA SetForeGroundWindow

makeinfo:未找到命令

LINUX编译JNA产生jna.jar

Java-JNA使用心得

使用 JNA 从 Java 调用 C++ dll 方法并避免方法名称修改