CGEventPost - возможная ошибка при симуляции событий клавиатуры?

Для меня такая же ошибка произошла, потому что я переименовал пространство имен класса Program. Поле «Объект запуска» на вкладке «Приложение» проекта все еще ссылается на старое пространство имен. Выбор нового объекта запуска решил проблему, а также удалил устаревшую запись из этого списка. Вы также можете обновить поле «По умолчанию пространство имен» на той же вкладке «Приложение».

13
задан erickson 30 January 2010 в 16:06
поделиться

2 ответа

Я нашел надежный способ размещать измененные события клавиатуры - это не следует примеру из документации Apple (которая не работает), но, похоже, имеет смысл, а главное, WORKS (РАБОТЫ).

Вместо того, чтобы посылать сообщения 'shift key down' и 'shift key up' (как указано в документации), вам нужно установить флаг модификатора на клавиатуре. Вот как вывести заглавную букву Z.

CGEventRef event1, event2;
event1 = CGEventCreateKeyboardEvent(NULL, (CGKeyCode)6, true);//'z' keydown event
CGEventSetFlags(event1, kCGEventFlagMaskShift);//set shift key down for above event
CGEventPost(kCGSessionEventTap, event1);//post event

Затем я отпускаю клавишу 'z' для полноты (также включается флаг сдвига, хотя и не уверен, что это правильно).

event2 = CGEventCreateKeyboardEvent(NULL, (CGKeyCode)6, false);
CGEventSetFlags(event2, kCGEventFlagMaskShift);
CGEventPost(kCGSessionEventTap, event2);

Наконец (и причудливо) вы должны отправить событие 'key up' для клавиши shift:

  e5 = CGEventCreateKeyboardEvent(NULL, (CGKeyCode)56, false);
CGEventPost(kCGSessionEventTap, e5);

Не забудьте отпустить события, как только закончите с ними.

Надеюсь, это кому-нибудь пригодится - у меня ушло много времени на то, чтобы заставить это работать.

23
ответ дан 1 December 2019 в 18:55
поделиться

Какое-нибудь отношение к жучку этого парня ?

2
ответ дан 1 December 2019 в 18:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: