Eine andere Möglichkeit wäre, eine CGEventTap zu erstellen, die Ereignisse Maus nach unten erfasst.
Sie müssen dann nur den letzten Ereignistyp merken und das in einer Ihrer NSMenu-Delegiertenmethoden überprüfen.
Hier ist ein Code Beispiel:
CGEventRef MouseClickedEventCallback(CGEventTapProxy proxy, CGEventType type, CGEventRef event, void* refcon)
{
CGPoint location = CGEventGetLocation(event);
switch (type)
{
case kCGEventLeftMouseDown:
{
NSLog(@"Left Mouse pressed at %@", NSStringFromPoint(NSPointFromCGPoint(location)));
break;
}
case kCGEventRightMouseDown:
{
NSLog(@"Right Mouse pressed at %@", NSStringFromPoint(NSPointFromCGPoint(location)));
break;
}
case kCGEventOtherMouseDown:
{
NSLog(@"Other Mouse pressed at %@", NSStringFromPoint(NSPointFromCGPoint(location)));
break;
}
default:
break;
}
return event;
}
- (void)applicationDidFinishLaunching:(NSNotification*)aNotification
{
CGEventMask eventMask = CGEventMaskBit(kCGEventLeftMouseDown)|CGEventMaskBit(kCGEventRightMouseDown)|CGEventMaskBit(kCGEventOtherMouseDown);
CFMachPortRef eventTap = CGEventTapCreate(kCGSessionEventTap, kCGHeadInsertEventTap, 0, eventMask, MouseClickedEventCallback, NULL);
CFRunLoopSourceRef runLoopSource = CFMachPortCreateRunLoopSource(kCFAllocatorDefault, eventTap, 0);
CFRunLoopAddSource(CFRunLoopGetCurrent(), runLoopSource, kCFRunLoopCommonModes);
CGEventTapEnable(eventTap, true);
}
Der Quartz Event Services docs heißt es:
Ereignis Taps erhalten Taste nach oben und Taste gedrückt Ereignisse, wenn eine der folgenden Bedingungen erfüllt ist:
- Der aktuelle Prozess läuft als Root-Benutzer.
- Zugriff für assistive Geräte ist aktiviert. Unter Mac OS X 10.4, können Sie diese Funktion unter Verwendung von Systemeinstellungen, Universal Access Panel, Tastaturansicht aktivieren.
Ich habe, dass verdoppeln und es scheint, dass Sie wirklich Mausereignisse nicht Hilfsmittel ermöglichen müssen erhalten. Wenn [[[NSApplication sharedApplication] currentEvent] buttonNumber]
macht, was Sie wollen, würde ich definitiv damit gehen. Es ist ein höheres Level und daher weniger Code.
dass der beste Weg ist, es zu tun, aber man kann einfach nutzen [[NSApp currentEvent] buttonNumber].NSApp ist eine globale Variable, die auf das Anwendungsobjekt verweist. – ughoavgfhw
Dustin Senos: Du solltest das als Antwort auf deine eigene Frage posten. Ich habe es aufgegriffen. –