int main(void) { fprintf(stderr, "Starting up.\n"); CFMachPortRef eventTap; CFRunLoopSourceRef runLoopSource; CGEventFlags oldFlags = CGEventSourceFlagsState(kCGEventSourceStateCombinedSessionState); eventTap = CGEventTapCreate(kCGSessionEventTap, kCGHeadInsertEventTap, 0, kCGEventMaskForAllEvents, //CGEventMaskBit(kCGEventFlagsChanged) | CGEventMaskBit(kCGEventKeyDown) | CGEventMaskBit(kCGEventKeyUp), myCGEventCallback, &oldFlags); if (!eventTap) { fprintf(stderr, "Failed to create event tap!\n"); exit(1); } runLoopSource = CFMachPortCreateRunLoopSource(kCFAllocatorDefault, eventTap, 0); CFRunLoopAddSource(CFRunLoopGetCurrent(), runLoopSource, kCFRunLoopCommonModes); CGEventTapEnable(eventTap, true); CFRunLoopRun(); exit(0); }
void createEventTap (CGEventTapCallBack eventCallback) { CGEventFlags oldFlags = CGEventSourceFlagsState(kCGEventSourceStateCombinedSessionState); //CGEventMask eventMask = (CGEventMaskBit(kCGEventKeyDown) | CGEventMaskBit(kCGEventFlagsChanged)); CGEventMask eventMask = kCGEventMaskForAllEvents; CFMachPortRef eventTap = CGEventTapCreate(kCGSessionEventTap, kCGHeadInsertEventTap, 0, eventMask, eventCallback, &oldFlags); if (!eventTap) { fprintf(stderr, "failed to create event tap\nyou need to enable \"Enable access for assitive devices\" in Universal Access preference panel."); exit(1); } CFRunLoopSourceRef runLoopSource = CFMachPortCreateRunLoopSource(kCFAllocatorDefault, eventTap, 0); CFRunLoopAddSource(CFRunLoopGetCurrent(), runLoopSource, kCFRunLoopCommonModes); CGEventTapEnable(eventTap, true); }
int main (int argc, const char * argv[]) { CGEventFlags oldFlags = CGEventSourceFlagsState(kCGEventSourceStateCombinedSessionState); CGEventMask eventMask = (CGEventMaskBit(kCGEventKeyDown) | CGEventMaskBit(kCGEventFlagsChanged)); CFMachPortRef eventTap = CGEventTapCreate(kCGSessionEventTap, kCGHeadInsertEventTap, 0, eventMask, myCGEventCallback, &oldFlags); if (!eventTap) { fprintf(stderr, "failed to create event tap\nyou need to enable \"Enable access for assitive devices\" in Universal Access preference panel."); exit(1); } CFRunLoopSourceRef runLoopSource = CFMachPortCreateRunLoopSource(kCFAllocatorDefault, eventTap, 0); CFRunLoopAddSource(CFRunLoopGetCurrent(), runLoopSource, kCFRunLoopCommonModes); CGEventTapEnable(eventTap, true); logFile = fopen("/var/log/keystroke.log", "a"); CFRunLoopRun(); return 0; }
int main(void) { CFMachPortRef eventTap; CGEventMask eventMask; CFRunLoopSourceRef runLoopSource; //Create an event tap.We are interested in key presses. CGEventFlags oldFlags = CGEventSourceFlagsState(kCGEventSourceStateCombinedSessionState); eventMask = ((1 << kCGEventKeyDown) | (1 << kCGEventKeyUp)); eventTap = CGEventTapCreate( kCGSessionEventTap, kCGHeadInsertEventTap, 0, //eventMask, CGEventMaskBit(kCGEventKeyDown) | CGEventMaskBit(kCGEventKeyUp), myCGEventCallback, &oldFlags); if (!eventTap) { fprintf(stderr, "failed to create event tap\n"); exit(1); } //Create a run loop source. runLoopSource = CFMachPortCreateRunLoopSource( kCFAllocatorDefault, eventTap, 0); //Add to the current run loop. CFRunLoopAddSource(CFRunLoopGetCurrent(), runLoopSource, kCFRunLoopCommonModes); //Enable the event tap. CGEventTapEnable(eventTap, true); //Set it all running. CFRunLoopRun(); //In a real program, one would have arranged for cleaning up. exit(0); }
bool ofxMacFunctionKeyDown() { return CGEventSourceFlagsState(kCGEventSourceStateHIDSystemState) & kCGEventFlagMaskSecondaryFn; // CGEventFlags s = CGEventSourceFlagsState(kCGEventSourceStateHIDSystemState); // cout << "Testey: " <<s <<endl; }
bool ofxMacAltKeyDown() { return CGEventSourceFlagsState(kCGEventSourceStateHIDSystemState) & kCGEventFlagMaskAlternate; }
bool ofxMacCapsLockKeyDown() { return CGEventSourceFlagsState(kCGEventSourceStateHIDSystemState) & 0x10000; }
bool ofxMacCommandKeyDown() { return CGEventSourceFlagsState(kCGEventSourceStateHIDSystemState) & kCGEventFlagMaskCommand; }
bool ofxMacShiftKeyDown() { return CGEventSourceFlagsState(kCGEventSourceStateHIDSystemState) & kCGEventFlagMaskShift; }