Я пытаюсь смоделировать нажатие клавиши и клавишу OPT в macOS.
CGEventSourceRef source = CGEventSourceCreate( kCGEventSourceStateHIDSystemState );
CGEventRef ev = CGEventCreateKeyboardEvent( source, keycode, is_down );
// CGEventSetFlags( ev, NSEventModifierFlagOption );
CGEventPost( kCGHIDEventTap, ev );
CFRelease( ev );
... с is_down
= true
, затем false
.
Это работает в большинстве ситуаций.
Однако, это не соответствует нативному поведению, если я выполню следующий тест:
Я наведу курсор на ключевое слово (скажем, CGEventRef
) в XCode и + OPT на моей клавиатуре . Ключевое слово подсвечивается синим цветом, и курсор становится ?
. И если я наведу курсор мыши на прямоугольник, он останется выделенным.
Теперь я попробую точно такой же эксперимент с моим синтетическим OPT. Опять ключевое слово подсветка синего цвета. Но курсора нет ?
. И в тот момент, когда я двигаю мышью, подсветка исчезает.
Итак, здесь есть очень тонкое различие.
Что делает операционная система, которой я не являюсь?
Я считал, что события перемещения мыши, возможно, должны быть информированы о том, что модификатор OPT выключенПоэтому я создал EventTap
для сортировки. Но все же я не могу заставить курсор измениться.
Я знаю, что когда происходит естественное событие + OPT, происходит событие NSEventTypeFlagsChanged
. И в моем смоделированном + OPT такие события не запускаются.
Так что, я полагаю, возможно, что Xcode вызывает это событие.
Итак, как вызвать событие NSEventTypeFlagsChanged
?