Advertisement
Guest User

Untitled

a guest
Sep 25th, 2017
68
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.47 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <ApplicationServices/ApplicationServices.h>
  3.  
  4. static CFMachPortRef machPortRef = NULL;
  5.  
  6. CGEventRef specialKeyEventTapCallback(CGEventTapProxy proxy, CGEventType type, CGEventRef event, void *refcon)
  7. {
  8. if (type == kCGEventTapDisabledByTimeout) {
  9. CGEventTapEnable(machPortRef, true);
  10. return event;
  11. }
  12.  
  13. uint64_t subtype = CGEventGetIntegerValueField(event, 99);
  14.  
  15. if (subtype == 8) {
  16. static CGEventFlags allModifiers = (kCGEventFlagMaskShift | kCGEventFlagMaskControl | kCGEventFlagMaskAlternate | kCGEventFlagMaskCommand);
  17. int keycode = ((CGEventGetIntegerValueField(event, 149) & 0xFFFF0000) >> 16);
  18. CGEventFlags flags = CGEventGetFlags(event);
  19.  
  20. if (keycode == NX_KEYTYPE_EJECT && (flags & allModifiers) == 0) {
  21. // filter eject key when no modifiers are pressed
  22. return NULL;
  23. }
  24. }
  25.  
  26. return event;
  27. }
  28.  
  29. int main()
  30. {
  31. CFRunLoopSourceRef eventSrc = NULL;
  32.  
  33. machPortRef = CGEventTapCreate(kCGHIDEventTap, kCGHeadInsertEventTap, kCGEventTapOptionDefault, CGEventMaskBit(NX_SYSDEFINED), (CGEventTapCallBack)specialKeyEventTapCallback, NULL);
  34.  
  35. if (machPortRef == NULL) {
  36. fprintf(stderr, "CGEventTapCreate failed!n");
  37. return 1;
  38. }
  39.  
  40. eventSrc = CFMachPortCreateRunLoopSource(NULL, machPortRef, 0);
  41. CFRunLoopAddSource(CFRunLoopGetCurrent(), eventSrc, kCFRunLoopDefaultMode);
  42.  
  43. CFRunLoopRun();
  44.  
  45. CFRelease(machPortRef);
  46. CFRelease(eventSrc);
  47. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement