• Open Menu Close Menu
  • Apple
  • Shopping Bag
  • Apple
  • Mac
  • iPad
  • iPhone
  • Watch
  • TV
  • Music
  • Support
  • Search apple.com
  • Shopping Bag

Lists

Open Menu Close Menu
  • Terms and Conditions
  • Lists hosted on this site
  • Email the Postmaster
  • Tips for posting to public mailing lists
Sent keyboard events differ in debug and release builds
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Sent keyboard events differ in debug and release builds


  • Subject: Sent keyboard events differ in debug and release builds
  • From: Michael Starke <email@hidden>
  • Date: Tue, 02 Dec 2014 20:50:19 +0100

Hello list,

if this topic should be posted elsewhere, I'll gladly ask the question there.

My application send keyboard events to the system to simulate copy/paste and other sorts of behaviour.
This works well as far as I can tell, but I'm running into a hiccup.

The code that sends events is this (more or less as you'd expect)

My current setup is 10.10 SDK, 10.8 deployment target and the described misbehaviour is observable unter 10.9.

- (void)sendPressKey:(CGKeyCode)keyCode modifierFlags:(CGEventFlags)flags {

  CGEventSourceRef eventSource = CGEventSourceCreate(kCGEventSourceStatePrivate);
  if(NULL == eventSource) {
    return; // We could not create our own source, abort!
  }
  CGEventRef pressKey = CGEventCreateKeyboardEvent (eventSource, keyCode, YES);
  CGEventRef releaseKey = CGEventCreateKeyboardEvent (eventSource, keyCode, NO);

  /* The modifer Masks might be set, reset them */
  CGEventSetFlags(pressKey,0);
  CGEventSetFlags(releaseKey, 0);
  /* Set the modifiers to the ones we want */
  CGEventSetFlags(pressKey,flags);
  CGEventSetFlags(releaseKey, flags);

  /* Send the event */
  NSLog(@"Seding %@", self);
  CGEventPost(kCGHIDEventTap, pressKey);
  usleep(0.05 * NSEC_PER_MSEC);
  CGEventPost(kCGHIDEventTap, releaseKey);

  CFRelease(pressKey);
  CFRelease(releaseKey);
  CFRelease(eventSource);
}

This works as expected when run in debug mode. But when I compile for release and run, all the key codes work except Tab.
If Tab should be sent, I see a key code 0x5f being recorded. In debug the Tab correctly gets sent as 0x30. My code always creates the keyboard event with the correct modifiers (none) and key code for tab (0x30), so the code does not change in debug or release but I've no clue, why I see this behaviour. Even more so, I cannot pin it down why only in release.

Any suggestion as to why this is happening is highly appreciated.

Regarding the sleep in there, this was added by a contributor to make it wokr under Yosemite.


___m i c h a e l   s t a r k e____
       geschäftsführer
       HicknHack Software GmbH
       www.hicknhack-software.com

___k o n t a k t____
       +49 (170) 3686136
       email@hidden

___H i c k n H a c k   S o f t w a r e   G m b H____
       geschäftsführer - maik lathan | andreas reischuck | michael starke
       bayreuther straße 32
       01187 dresden
       amtsgericht dresden HRB 30351
       sitz - dresden


_______________________________________________

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


  • Follow-Ups:
    • Re: Sent keyboard events differ in debug and release builds
      • From: Michael Starke <email@hidden>
  • Prev by Date: TextEdit Document Icon
  • Next by Date: Re: TextEdit Document Icon
  • Previous by thread: Re: TextEdit Document Icon
  • Next by thread: Re: Sent keyboard events differ in debug and release builds
  • Index(es):
    • Date
    • Thread