Использование CGEventSetIntegerValueField для редактирования события клавиатуры дает ошибку
Итак, я задал еще один вопрос здесь:
Как определить разницу между событием с нажатой клавиатурой и сгенерированным?
Одним из ответов, который был предложен, было использование поля "нажатия мыши" (маловероятно, что оно будет использоваться для события клавиатуры), чтобы пометить событие по мере необходимости.
Итак, я пытаюсь:
CGEventSetIntegerValueField(myKeyboardEvent,
kCGMouseEventPressure,
0xFEEDFACE);
Проблема в:
- Я не знаю что
0xFEEDFACE
средства. Что это значение по умолчанию для? Что я должен установить это? Как я могу проверить, было ли это отмечено мной? - Запуск приведенного выше кода дает мне ошибку:
<Error>: kCGErrorIllegalArgument: CGEventSetIntegerValueField: invalid event
1 ответ
0xFEEDFACE
это просто фиктивная ценность. Это одно из четырехбайтовых чисел с глупыми шестнадцатеричными написаниями, которые будут выделяться, когда вы смотрите на память.
Функция принимает три аргумента: событие, CGEventField
(который является enum
) и int64_t
(8-байтовое целое число со знаком), диапазон допустимых значений которого, вероятно, зависит от поля. я использовал 0xFEEDFACE
чтобы указать, что вы можете попытаться поместить туда произвольное "магическое" значение *, а затем проверить его при получении события, используя CGEventGetIntegerValueField
, Если ваше событие получает новое событие с вашим "магическим номером", то оно (почти наверняка) было отправлено вами. В противном случае оно было отправлено системой.
Подводя итоги и отвечая на ваши явные вопросы: этот аргумент ни к чему не приводит; вы должны передать что-то произвольное, что вряд ли будет использоваться системой событий (вы можете проверить серию событий, отправленных системой, чтобы увидеть, как выглядят "реальные" значения); идея заключается в том, что ваше произвольное значение позволяет вам проверить, что событие было отмечено вами.
Что касается ошибки, похоже, я ошибся. Я подумал, что вы могли бы установить любое поле для любого типа события (например, используя поле "нажатия мыши" на событии клавиатуры, поскольку система почти наверняка не установит это) для передачи произвольной информации (и так определите события, которые вы сами построили). Однако, похоже, что Event Services не позволят вам сделать это. Могут быть и другие поля, которые вы можете использовать, но я точно не знаю.
* Я предполагал, что вы поймете, что это мусорная ценность; извиняюсь.