Как я получаю события клавиатуры в окне NSStatusWindowLevel, в то время как мое приложение не является frontmost?

Посмотрите на ParserOptions

int32_t arrow::csv::ParseOptions::header_rows = 1

Его можно определить как третий аргумент в TableReader::Make(...).

static Status   Make(MemoryPool *pool, std::shared_ptr< io::InputStream > input, const ReadOptions &, const ParseOptions &, const ConvertOptions &, std::shared_ptr< TableReader > *out)

Проверьте документацию: https://arrow.apache.org/docs/cpp/namespacearrow_1_1csv.html

и эти тестовые файлы: https: / /github.com/apache/arrow/tree/3cf8f355e1268dd8761b99719ab09cc20d372185/cpp/src/arrow/csv

5
задан Kristof Van Landschoot 27 November 2008 в 15:27
поделиться

3 ответа

Существует две опции:

  1. Использовать GetEventMonitorTarget() с прикрепляемым - на Углероде выполняет цикл для захвата событий клавиатуры. Пример кода доступен на этой странице в CocoaDev.

  2. Зарегистрируйте прерывание события в CGEventTapCreate. Пример кода может быть найден в этом потоке из списка рассылки разработчика Apple.

Править: Обратите внимание, что эти методы только работают, если Вы помечаете, “Включают доступ для вспомогательных устройств” в Универсальной предпочтительной области Доступа.

3
ответ дан 15 December 2019 в 01:13
поделиться

Обновление:
Apple на самом деле, кажется, изменила все снова запускающееся с 10.5 BTW (я недавно обновил, и мой пример кода не работал прежде).

Теперь можно действительно только получить keydown события, настраивающие касание события, если Вы - или корневые или вспомогательные устройства, включены, независимо на котором уровне Вы планируете получить и независимо если Вы выбрали для получения (который позволяет Вам изменять и даже отбрасывать события), или быть слушают только. Можно все еще получить информацию, когда флаги изменились (на самом деле даже изменяют их), и другие события, но keydown ни при каких других обстоятельствах.

Однако с помощью углеродного обработчика событий и метода RegisterEventHotKey () позволяет Вам регистрировать горячую клавишу, и Вы будете уведомлены, когда это будет нажато, Вы ни не должно быть, поддерживают это, и при этом Вам не нужно ничто как вспомогательные включенные устройства. Я думаю, что Quicksilver, вероятно, делает его тот путь.

0
ответ дан 15 December 2019 в 01:13
поделиться

Более простой маршрут, который может работать лучше на Вас, должен сделать Ваше приложение только для фона. Обсуждение CocoaDev LSUIElement plist ключ объясняет, как настроить его. В основном Ваше приложение не появится в прикреплении или переключателе приложения, и не заменит строку меню текущего приложения при активации. С пользовательской точки зрения это никогда не 'активное' приложение, но любые окна, которые Вы открываете, могут быть активированы и обычно отвечать на события. Единственный протест состоит в том, что Вы никогда не будете добираться для показа строки меню, таким образом, необходимо будет, вероятно, создать NSStatusItem (одно из тех меню значка, которые обнаруживаются на правой стороне строки меню) управлять (т.е. выходить, поднять prefs, и т.д.) приложение.

Править: Я полностью забыл о флажке Non-Activating Panel в Интерфейсном Разработчике. Необходимо использовать NSPanel вместо NSWindow для получения этого выбора. Эта установка позволяет Вашей панели принять щелчки и ввод с клавиатуры, не активируя Ваше приложение. Я держу пари, что некоторое соединение этой установки и Углеродных Горячих клавиш API - то, что QuickSilver использует для их UI.

1
ответ дан 15 December 2019 в 01:13
поделиться
Другие вопросы по тегам:

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