将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中如何做到这一点?