我尝试使用:
LRESULT WINAPI SendMessage(_In_ HWND hWnd, _In_ UINT Msg,
_In_ WPARAM wParam, _In_ LPARAM lParam);
在Java中使用jna并且我一直收到错误:
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是对的。我的错在哪里?
答案 0 :(得分:6)
JNA在user32.dll中找不到函数“SendMessage”,因为没有导出该名称的函数。
这是因为SendMessage是一个旧名称,由其他编译器自动映射到函数的匹配ANSI或UNICODE版本 - SendMessageA
和SendMessageW
。
使用显示像DependencyWalker这样的DLL的导出函数的工具,您可以看到Windows 7的user32.dll仅知道函数SendMessageA
和SendMessageW
,但不知道SendMessage
。
您使用的函数定义类似于ANSI版本,因此您应该使用SendMessageA
代替。
顺便说一句。如果您使用的是32位或64位Java和user32.dll,则没有任何区别。我写的内容对两个版本都是正确的。