将user32.dll中的SendMessage与java中的jna一起使用-错误

将user32.dll中的SendMessage与java中的jna一起使用-错误,java,winapi,jna,sendmessage,user32,Java,Winapi,Jna,Sendmessage,User32,我尝试使用: LRESULT WINAPI SendMessage(_In_ HWND hWnd, _In_ UINT Msg, _In_ WPARAM wParam, _In_ LPARAM lParam); 在使用jna的Java中,我不断遇到一个错误: Exception in thread "AWT-EventQueue-0" java.lang.UnsatisfiedLinkError: Error looking up

我尝试使用:

LRESULT WINAPI SendMessage(_In_  HWND hWnd, _In_  UINT Msg,
                           _In_  WPARAM wParam, _In_  LPARAM lParam);
在使用jna的Java中,我不断遇到一个错误:

Exception in thread "AWT-EventQueue-0" java.lang.UnsatisfiedLinkError: Error looking up function 'SendMessage'
这是我的界面:

public interface User32 extends StdCallLibrary {
Pointer GetForegroundWindow();
int SendMessage(Pointer hWnd, int msg, int num1, int num2);
我这样称呼它:

Pointer hW = user32.GetForegroundWindow();
user32.SendMessage(hW, 0x0201, 0, 0);
user32.SendMessage(hW, 0x0202, 0, 0);

hWnd是正确的。我的错误在哪里?

JNA在user32.dll中找不到函数“SendMessage”,因为没有导出该名称的函数

这是因为SendMessage是一个旧名称,由其他编译器自动映射到匹配的ANSI或UNICODE版本的函数-
SendMessageA
SendMessageW

使用显示DLL(如DependencyWalker)导出函数的工具,您可以看到Windows 7的user32.DLL(例如)只知道函数
SendMessageA
SendMessageW
,但不知道
SendMessage

您使用的函数定义与ANSI版本类似,因此应改用
SendMessageA


顺便说一句,如果您使用32位或64位Java和user32.dll,这没有任何区别。我写的两个版本都是如此。

JNA在user32.dll中找不到函数“SendMessage”,因为没有导出该名称的函数

这是因为SendMessage是一个旧名称,由其他编译器自动映射到匹配的ANSI或UNICODE版本的函数-
SendMessageA
SendMessageW

使用显示DLL(如DependencyWalker)导出函数的工具,您可以看到Windows 7的user32.DLL(例如)只知道函数
SendMessageA
SendMessageW
,但不知道
SendMessage

您使用的函数定义与ANSI版本类似,因此应改用
SendMessageA


顺便说一句,如果您使用32位或64位Java和user32.dll,这没有任何区别。我写的东西对两个版本都是正确的。

您使用的是Java 32位还是64位版本?我想我都安装了-如何检查?如何运行程序?您使用的是Java 32位还是64位版本?我想我都安装了-如何检查?如何运行程序?啊,谢谢!!它是有效的。。。但是它总是点击0,0,我认为这个位置是用lParam值发送的。它的正确格式是什么?0x0201是WM_LBUTTONDOWN,因此您可以在这里找到文档:不,我是指单击的位置-正如您所看到的,我已经为“clickevent”提供了正确的值,请查看WM_LBUTTONDOWN的LPRAM文档。它在我发布的链接后面。它正在等待一个可以使用的word参数:word MAKEWORD(BYTE bLow,BYTE bHigh);但是我用java怎么做呢?啊,谢谢!!它是有效的。。。但是它总是点击0,0,我认为这个位置是用lParam值发送的。它的正确格式是什么?0x0201是WM_LBUTTONDOWN,因此您可以在这里找到文档:不,我是指单击的位置-正如您所看到的,我已经为“clickevent”提供了正确的值,请查看WM_LBUTTONDOWN的LPRAM文档。它在我发布的链接后面。它正在等待一个可以使用的word参数:word MAKEWORD(BYTE bLow,BYTE bHigh);但在java中如何做到这一点?