2016-03-18 12 views
1

Так что это код, который я, однако, кажется, oversimplistic мне, что, вероятно, почему он не ловить нажатия клавиш пользователем, как это было мое намерение этого мини-проекта:Ключи и основные объекты, требуется NSView?

#import <Foundation/Foundation.h> 
#import <Cocoa/Cocoa.h> 


@interface keyObject : NSObject 
- (void)mouseDown:(NSEvent *)theEvent; 
@end 




@implementation keyObject 
- (void)mouseDown:(NSEvent *)theEvent { 
    NSLog(@"keypress detected!"); 
} 

@end 


int main(int argc, const char * argv[]) { 
    @autoreleasepool { 
     NSLog(@"test"); 
     keyObject * myObject = [[keyObject alloc] init]; 
    } 
    while (1) { 
    // Waiting for event to trigger? 
    } 
    return 0; 
} 

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

ответ

2

Вы можете использовать следующие NSEvent метод:

+ (id)addLocalMonitorForEventsMatchingMask:(NSEventMask)mask 
            handler:(NSEvent * _Nullable (^)(NSEvent *))block 

Для мониторинга ключевых событий, вероятно, вы должны предоставить NSKeyDownMask | NSKeyUpMask в NSEventMask.

См. Apple documentation regarding monitoring events.

Answers to this question также могут быть вам полезны, хотя они охватывают общесистемные события keyDown вместо локальных приложений вашего приложения.

+0

А я тоже старался сделать его системным, а на самом деле хе-хе. В любом случае, так можно было бы реализовать это в методе main() ?: [NSEvent addGlobalMonitorForEventsMatchingMask: обработчик NSKeyDownMask:^(событие NSEvent *) {// Активировать приложение при нажатии cmd + ctrl + alt + T if ([event modifierFlags ] == 1835305 && [[event eventsIgnoringModifiers] сравните: @ "t"] == 0) {[NSApp activateIgnoringOtherApps: YES]; }}]; – Pigman168

+0

@ Pigman168, у вас не должно быть проблем с использованием этого подхода в 'main'. Единственное, что вам, вероятно, потребуется настроить и запустить экземпляр 'NSRunLoop' (и, возможно, установить' NSApplication') для получения событий. 'NSApplicationMain (argc, argv)' обычно делает эту настройку для вас. –

+0

Спасибо, что так много! Я попробую это позже вечером. Мои извинения за (потенциально) ужасное форматирование моего комментария, я нахожусь на своем телефоне, который несколько ограничен. – Pigman168