Globales NSEvent abfangen

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Globales NSEvent abfangen

    Hallo,

    ich beginne mich gerade in Objective C und die ganze Mac Welt einzuarbeiten. Als erstes Projekt möchte ich ein kleines Tool schreiben, dass das aktive Fenster via Shortcut auf halbe Bildschirmgröße setzt, damit man ganz einfach zwei Fenster nebeneinander hat, ohne sie mit der Maus extra anpassen zu müssen.

    Ich habe gelesen, dass es mit Carbon möglich ist, globale Shortcuts abzufangen. Jedoch gehört die Zukunft Cocoa und ich habe einige Beispiele gefunden, mit denen es zumindest unter 10.6 auch mit Cocoa möglich sein sollte, so etwas zu realisieren.

    Soweit funktioniert mein Code auch, jedoch nur wenn das Fenster meiner Anwendung nicht aktiv ist. Wenn meine Anwendung sich im Vordergrund befindet, werden die Key Events nicht an meine Anwendung übergeben.

    Es wäre super, wenn ihr mal ein Auge über meinen Code werfen könntet. Ich bin für jeden Tipp sehr dankbar!

    Quellcode

    1. - (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
    2. [NSEvent addGlobalMonitorForEventsMatchingMask:NSKeyDownMask handler:
    3. ^(NSEvent*event)
    4. {
    5. int flags = [event modifierFlags];
    6. /*
    7. possible modifier keys:
    8. NSAlphaShiftKeyMask, NSShiftKeyMask, NSControlKeyMask, NSAlternateKeyMask, NSCommandKeyMask
    9. */
    10. int modKeyDown = flags & NSAlternateKeyMask;
    11. //NSLog(@"%@", event);
    12. if(modKeyDown)
    13. {
    14. NSAppleScript *aScript = nil;
    15. //NSLog(@"%@", script);
    16. switch ([event keyCode]) {
    17. case 124:
    18. NSLog(@"Right");
    19. aScript = [[NSAppleScript alloc] initWithSource: @"say \"right\""];
    20. break;
    21. case 123:
    22. NSLog(@"Left");
    23. aScript = [[NSAppleScript alloc] initWithSource: @"say \"left\""];
    24. break;
    25. case 126:
    26. NSLog(@"Up");
    27. aScript = [[NSAppleScript alloc] initWithSource: @"say \"up\""];
    28. break;
    29. case 125:
    30. NSLog(@"Down");
    31. aScript = [[NSAppleScript alloc] initWithSource: @"say \"down\""];
    32. break;
    33. default:
    34. break;
    35. }
    36. if(aScript) {
    37. [aScript executeAndReturnError:nil];
    38. }
    39. [aScript release];
    40. }
    41. }
    42. ];
    43. };
    Alles anzeigen
  • Original von dan
    Ja, denn die Motivation ist bei einem echten Usecase ungleich höher als bei irgendwelchen hello world apps. Das hat schon bei ganz anderen Sachen geklappt :)

    Na, dann wünsche ich dir viel Erfolg.
    Es hat noch nie etwas gefunzt. To tear down the Wall would be a Werror!
    25.06.2016: [Swift] gehört zu meinen *Favorite Tags* auf SO. In welcher Bedeutung von "favorite"?