CGEventTapCreate bricht auf mysteriöse Weise mit Ereignissen ab, bei denen die Taste gedrückt wird

Ich benutzeCGEventTapCreate, um Medientasten von iTunes zu "stehlen", wenn meine App ausgeführt wird. Der Code innerhalb des Rückrufs, den ich an @ übergeCGEventTapCreate überprüft das Ereignis und sendet eine entsprechende Benachrichtigung an die Standardbenachrichtigungszentrale, wenn festgestellt wird, dass es sich um einen der Medienschlüssel handelt.

Now, das funktioniert einwandfrei, wenn ich eine Benachrichtigung für das "key up" -Ereignis poste. Wenn ich das für "Key-Down" -Ereignisse tue, werden in meiner App möglicherweise keine Media-Key-Ereignisse mehr abgerufen und iTunes übernimmt. Irgendwelche Ideen, was dies verursachen kann? Der relevante Teil des Codes ist unter

enum { 
...
  PlayPauseKeyDown = 0x100A00,
  PlayPauseKeyUp = 0x100B00,
...
};

static CGEventRef event_tap_callback(CGEventTapProxy proxy,
                                     CGEventType type,
                                     CGEventRef event,
                                     void *refcon)
{
  if (!(type == NX_SYSDEFINED) || (type == NX_KEYUP) || (type == NX_KEYDOWN))
      return event;

  NSEvent* keyEvent = [NSEvent eventWithCGEvent: event];
  if (keyEvent.type != NSSystemDefined) return event;

  switch(keyEvent.data1)
  {
    case PlayPauseKeyUp:  // <--- this works reliably
    //case PlayPauseKeyDown:  // <--- this will break eventually
      post_notification(@"PlayPauseMediaKeyPressed", nil, nil);
      return NULL;

    ... and so on ...

Antworten auf die Frage(6)

Ihre Antwort auf die Frage