Я работаю над программой, которая должна отправлять нажатия клавиш в другие (не сфокусированные) окна.
Для Windows я использую следующую встроенную функцию из WinAPI:
SendMessage( HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam );
hWnd
является дескриптором целевого окна, Msg
установлен на код события нажатия клавиши вниз / вверх, а wParam
используется для указания кода клавиши.
Есть ли эквивалент в этом в API Mac OS?или любой другой способ достижения того же эффекта без необходимости выводить целевое окно на передний план?Я ищу решения, которые могут быть реализованы на одном из следующих языков: Java, C ++, C, AppleScript.
Обновление прогресса:
Я нашел функцию CGEventTapCreateForPSN (...) в API CoreGraphics и согласно документации он должен делать именно то, что я хочу.НО я не знаю, как получить к нему доступ из программы на Java.Насколько я знаю, API-интерфейс CoreGraphics доступен только из Objective-C и Swift, которые я не знаю, как интегрировать в Java-программу.Я могу выполнить код C и C ++, используя JNI, и AppleScript, выполнив процесс osascript
.Я не очень знаком с этими тремя языками, поэтому я не знаю, есть ли способ каким-либо образом выполнить код Objective-C или Swift из них (или из Java), любая помощь с этим очень ценится.
Я рассматриваю возможность создания программы Swift или Objective-C, компиляции и сохранения ее в файле .jar программы Java, а затем извлечения ее во временную папку и выполнения при необходимости отправки событий нажатия клавиши.Думаю, это сработает, но мне бы очень понравилось, если бы существовало более элегантное решение, которое не требует выполнения второй программы каждый раз, когда я хочу отправить нажатие клавиши.