Nano Hash - криптовалюты, майнинг, программирование

Прослушивание событий воспроизведения/паузы клавиатуры Mac

Некоторые приложения для Mac, такие как iTunes и Spotify, реагируют на кнопки воспроизведения/паузы/следующего/предыдущего на некоторых клавиатурах Apple.

Предположительно, они подключаются к какому-то NSNotification, как я могу сделать то же самое?

19.03.2010

Ответы:


1

Я делаю это, создавая подкласс NSApplication (и устанавливая этот класс в качестве класса приложения в моей целевой информации) следующим образом:

#import <IOKit/hidsystem/ev_keymap.h>

...

- (void)mediaKeyEvent:(int)key state:(BOOL)state
{
 switch (key)
 {
  // Play pressed
  case NX_KEYTYPE_PLAY:
   if (state == NO)
    [(TSAppController *)[self delegate] togglePlayPause:self];
   break;

  // FF pressed
  case NX_KEYTYPE_FAST:
   if (state == YES)
    [(TSAppController *)[self delegate] seekForward:self];
   break;

  // RW pressed
  case NX_KEYTYPE_REWIND:
   if (state == YES)
    [(TSAppController *)[self delegate] seekBack:self];
   break;
 }
}

- (void)sendEvent:(NSEvent *)event
{
 // Catch media key events
 if ([event type] == NSSystemDefined && [event subtype] == NX_SUBTYPE_AUX_CONTROL_BUTTONS)
 {
  int keyCode = (([event data1] & 0xFFFF0000) >> 16);
  int keyFlags = ([event data1] & 0x0000FFFF);
  int keyState = (((keyFlags & 0xFF00) >> 8)) == 0xA;

  // Process the media key event and return
  [self mediaKeyEvent:keyCode state:keyState];
  return;
 }

 // Continue on to super
 [super sendEvent:event];
}

«Состояние» в -mediaKeyEvent:state: для вверх/вниз. В моем приложении имеет смысл реагировать на клавишу воспроизведения/паузы только тогда, когда она резервируется (нажатие завершено), но я постоянно реагирую на события RW/FF, пока клавиша не нажата для поиска.

Я хотел бы знать о лучшем способе сделать это, если он существует. В настоящее время, если пользователь не отключит эти клавиши в глобальных сочетаниях клавиш, он управляет моим приложением и iTunes. :-)

Этот код уже давно используется в моем приложении для расшифровки и работает хорошо (не считая глобальной проблемы с сочетанием клавиш, описанной выше).

19.03.2010
  • Бррр, волшебные числа. Вас могут заинтересовать NX_SUBTYPE_AUX_CONTROL_BUTTONS и NX_KEYUPMASK/NSKeyUpMask (последнее — 0x800 в переменной keyFlags). 20.03.2010
  • Да, я собирался упомянуть именно эту фразу, но подумал, что лучше охватить ее. :-) Спасибо за константы. 20.03.2010
  • RegisterEventHotKey может позволить вам получить контроль над этими горячими клавишами? Если вы зарегистрируете горячую клавишу, такую ​​​​как Cmd + Space, вы можете остановить ее обработку Dock, а также вашим приложением. 31.05.2013
  • RegisterEventHotKey() — это вызов Carbon. Углерод устарел, и следует ожидать, что эти API исчезнут в любое время. На самом деле, я удивлен, что он продержался так долго. 31.05.2013
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..