Как получить значение ключа с помощью Какао, независимо от того, фокусируется он на окне или нет - PullRequest
2 голосов
/ 06 января 2011

Я хочу получить значение ключа с какао, когда не фокусируюсь на окне.Если ты это знаешь, пожалуйста, научи меня.

Ответы [ 3 ]

3 голосов
/ 06 января 2011

Если я понимаю вопрос, вы хотите знать, когда нажимается клавиша, даже если ваше приложение / окно не является передним окном?

Если это так, вы смотрите либо с помощью +[NSEvent addGlobalMonitorForEventsMatchingMask:handler:] (только 10.6+) или с использованием CGEventTap.

1 голос
/ 30 июня 2011

Чтобы использовать addGlobalMonitorForEventsMatchingMask или CGEventTap, ваше приложение должно быть запущено с правами root Я не смог заставить работать метод NSEvent, но CGEventTap оштрафован как root.

Преимущества метода CGEventTap:

  • Вы получаете все события, даже те из ваших собственных приложений. (Другой метод не отправляет вам ваши собственные события.)
  • Вы можете использовать события на разных уровнях (перед сервером окон, перед сервером сеансов и т. Д.)
  • При желании вы можете изменить события.
0 голосов
/ 21 января 2011

Я недавно задал этот вопрос и использовал addGlobalMonitorForEventsMatchingMask, как предлагает Дэйв Делонг, на что указал мне @ NSGod.

У меня были проблемы с определением синтаксиса блока, хотяЯ приведу цитату из кода, который я отправил в ответ:

      // register for keys throughout the device...
   [NSEvent addGlobalMonitorForEventsMatchingMask:NSKeyDownMask handler:^(struct NSEvent *event){

    NSString *chars = [[event characters] lowercaseString];
    unichar character = [chars characterAtIndex:0];

    NSLog(@"keydown globally! Which key? This key: %c", character);

    }];

Следует помнить о блоках, которые передаются непосредственно в вызов метода.У меня есть более подробное описание, добавленное к моему собственному вопросу , но если вы следуете приведенному выше синтаксису и думаете о блоке как о «встроенном методе делегата», вам следует поступить просто отлично.

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