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

Поймать системное событие как Cmd-Tab или Spotlight в приложении Какао

В приложении Cocoa я пытаюсь найти способ улавливать системные события, такие как переключатель приложений, обычно запускаемый с помощью Cmd-Tab или прожектора, обычно запускаемого Cmd-Space. Я ищу либо способ поймать ключевое событие, либо любой другой способ, который сказал бы мне, что одно из этих событий вот-вот произойдет, и в идеале отменил бы его.

Приложение для удаленного рабочего стола Apple Screen Sharing делает это, так что это должно быть возможно. Он перехватывает эти события и отправляет их на подключенный удаленный компьютер.

Вот что я уже пробовал:

  • Перехват событий с помощью метода sendEvent в NSApplication. Я вижу все события, такие как нажатие клавиши Cmd и нажатие клавиши Tab, но когда оба нажаты, я ничего не вижу.
  • Регистрация прослушивателя горячих клавиш Carbon. Я могу зарегистрировать что-нибудь вроде Cmd + Q, но опять же, когда я регистрирую Cmd + Tab, он не отвечает.

Есть другие идеи?


Ответы:


1

См. Отводы событий.

02.06.2011

2

Нашел! В моем файле WindowViewController.m

#import <Carbon/Carbon.h>

void *oldHotKeyMode;

- (void)windowDidBecomeKey:(NSNotification *)notification{
    oldHotKeyMode = PushSymbolicHotKeyMode(kHIHotKeyModeAllDisabled);
}
- (void)windowDidResignKey:(NSNotification *)notification{
    PopSymbolicHotKeyMode(oldHotKeyMode);
}

Это просто волшебство! и он соответствует новому требованию Apple к песочнице для Mac App Store!

27.09.2011

3

Я расскажу, как ловить cmd + tab. Но учтите, что будет работать только в полноэкранном режиме. Я считаю, что в оконном режиме это невозможно. Код довольно прост. Это незначительное исправление кода SDL для Mac - обновление для обработки вкладки cmd + в полноэкранном режиме.

NSEvent *event = [NSApp nextEventMatchingMask:NSAnyEventMask 
    untilDate:[NSDate distantPast] inMode:NSDefaultRunLoopMode dequeue:YES ];
    if ( event == nil ) {
        break;
    }
if (([event type] == NSKeyDown) && 
    ([event modifierFlags] & NSCommandKeyMask)
 &&([[event characters] characterAtIndex:0] == '\t')
{
     do something here
}
27.06.2011
  • Это нормально с правилами песочницы Appstore? 19.05.2019
  • Новые материалы

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

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

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

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

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

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

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