Dưới đây là mã của tôi:OSX Quartz Event Taps: loại sự kiện và làm thế nào để chỉnh sửa sự kiện
#import <ApplicationServices/ApplicationServices.h>
CGEventRef myCGEventCallback(CGEventTapProxy proxy, CGEventType type, CGEventRef event, void *refcon) {
printf("%u\n", (uint32_t)type);
return event;
}
int main (int argc, const char * argv[]) {
CFMachPortRef eventTap;
CFRunLoopSourceRef runLoopSource;
eventTap = CGEventTapCreate(kCGSessionEventTap, kCGHeadInsertEventTap, 0, kCGEventMaskForAllEvents, myCGEventCallback, NULL);
runLoopSource = CFMachPortCreateRunLoopSource(kCFAllocatorDefault, eventTap, 0);
CFRunLoopAddSource(CFRunLoopGetCurrent(), runLoopSource, kCFRunLoopCommonModes);
CGEventTapEnable(eventTap, true);
CFRunLoopRun();
return 0;
}
Đầu tiên .. những gì nếu tôi muốn chỉnh sửa sự kiện này? Ví dụ, tôi nghe cho sự kiện keyDown và nếu nó là "a", tôi chuyển nó thành "b" hoặc chỉnh sửa vị trí chuột trong thời gian thực hoặc chỉ cần chụp một sự kiện và làm cho nó không có hiệu lực (vô hiệu hóa một key ví dụ ..)
Thứ hai .. CGEventType được định nghĩa với một enum liệt kê chỉ một vài loại .. ví dụ khi tôi nhấn CMD tôi nhận được 12, nhưng không khớp với giá trị được chỉ định trong enum .. những gì tôi đang mất tích ??
trả lời cũng bởi Dave DeLong ở đây: http://stackoverflow.com/questions/5785630/modify-nsevent-to -send-a-khác-key-hơn-the-one-that-was-pressed/5785895 # 5785895 – cksubs