Имитация событий нажатия клавиш для ioquake3 в Mac OSX - PullRequest
0 голосов
/ 12 октября 2010

В настоящее время я пишу приложение, которое имитирует события нажатия клавиш в Mac OSX для управления ioquake3. Мой текущий подход заключается в создании событий нажатия клавиш с помощью Quartz Event Services. Это прекрасно работает, например, с TextEdit, но не с помощью ioquake3.

CGKeyCode keyCode = 126; // 126 is the "up" key
CGEventRef event1 = CGEventCreateKeyboardEvent (NULL, keyCode, true);
CGEventPost(kCGSessionEventTap, event1);
// CGEventPost(kCGHIDEventTap, event1);
// CGEventPost(kCGAnnotatedSessionEventTap, event1);
CFRelease(event1);

CGEventRef event2 = CGEventCreateKeyboardEvent (NULL, keyCode, false);
CGEventPost(kCGSessionEventTap, event2);
// CGEventPost(kCGHIDEventTap, event2);
// CGEventPost(kCGAnnotatedSessionEventTap, event2);
CFRelease(event2);

Я также пытался использовать следующий код для имитации нажатий клавиш, как упомянуто в этом посте :

CGKeyCode keyCode = 126; // 126 is the "up" key
AXUIElementRef axSystemWideElement = AXUIElementCreateSystemWide();
AXUIElementPostKeyboardEvent(axSystemWideElement, 0, keyCode, true);
AXUIElementPostKeyboardEvent(axSystemWideElement, 0, keyCode, false);

Есть ли другой способ создания событий нажатия клавиш в Mac OSX, которые распознаются ioquake3?

1 Ответ

2 голосов
/ 13 октября 2010

Я решил свою проблему и всем, кто заинтересован, вот решение:

Я опишу простой пример, который проясняет ситуацию. Как упоминалось ранее, я использую Quartz Event Services для генерации события нажатия клавиши. Если вы хотите постоянно перемещать персонажа в ioquake3 вперед, вы должны постоянно генерировать ключевое событие «вниз», например:

CGKeyCode keyCode = 126;
CGEventRef eventRef = CGEventCreateKeyboardEvent (NULL, keyCode, true);
CGEventPost(kCGSessionEventTap, eventRef);
CFRelease(eventRef);

Если вы хотите остановить персонажа, вам нужно сгенерировать одно ключевое событие «вверх»:

CGKeyCode keyCode = 126;
CGEventRef eventRef = CGEventCreateKeyboardEvent (NULL, keyCode, false);
CGEventPost(kCGSessionEventTap, eventRef);
CFRelease(eventRef);

Очевидно, я не понимал, как правильно использовать события нажатия клавиш.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...