Имитация OPT (или других модификаторов) с помощью `CGEventCreateKeyboardEvent`` CGEventSetFlags` `CGEventPost` - PullRequest
0 голосов
/ 02 ноября 2019

Я пытаюсь смоделировать нажатие клавиши и клавишу 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?

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