More on Keyboard Event posting
More on Keyboard Event posting
- Subject: More on Keyboard Event posting
- From: Dave DeLong <email@hidden>
- Date: Mon, 29 Sep 2008 09:25:35 -0600
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
_______________________________________________
Cocoa-dev mailing list (email@hidden)
Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com
Help/Unsubscribe/Update your Subscription:
This email sent to email@hidden