Skip navigation.
 
mlMore on Keyboard Event posting
FROM : Dave DeLong
DATE : Mon Sep 29 17:25:35 2008

Hi everyone,

I eventually figured out my previous problem with keyboard event 
posting when a colleague of mine pointed out the CGPostKeyboardEvent 
had been deprecated.  After digging around some more, we came up with 
the following:

   [window makeFirstResponder:textfield];
   CGEventSourceRef sourceRef = 
CGEventSourceCreate(kCGEventSourceStateCombinedSessionState);
   if (sourceRef == nil) { return; }
   //40 = "k"
   CGEventRef eventDown = CGEventCreateKeyboardEvent(sourceRef, 40, true);
   CGEventSetFlags(eventDown, kCGEventFlagMaskAlternate
+kCGEventFlagMaskShift);
   CGEventRef eventUp = CGEventCreateKeyboardEvent(sourceRef, 40, false);
   CGEventPost(kCGAnnotatedSessionEventTap, eventDown);
   CGEventPost(kCGAnnotatedSessionEventTap, eventUp);
   CFRelease(eventDown);
   CFRelease(eventUp);
   CFRelease(sourceRef);

Running that code will correctly produce an apple symbol in the 
TextField.  Other local commands that we send (Command-A, Command-C, 
Command-Q, etc) all work correctly.  Even shortcuts for Services work.

However some keyevents, such as Command-Space to activate Quicksilver 
on my machine (usually Spotlight) or Shift-Command-3 to take a 
screenshot or Command-Tab to activate the application switcher, only 
produce a system beep.  Any ideas why and how we can get around that?

We thought it might be the event source state used to create the 
CGEventSourceRef, but changing it to kCGEventSourceStateHIDSystemState 
or even kCGEventSourceStatePrivate did not produce the desired results.

Any direction would be appreciated.

Thanks,

Dave

Related mailsAuthorDate
mlMore on Keyboard Event posting Dave DeLong Sep 29, 17:25
mlRe: More on Keyboard Event posting Ken Thomases Sep 30, 00:16
mlRe: More on Keyboard Event posting Dave DeLong Sep 30, 00:21