Извиняюсь, если это глупый / легкий вопрос, но все еще привыкаю ко всему на земле Mac.
Дэйв был достаточно любезен, чтобы ответить на вопрос здесь: Измените NSEvent, чтобы отправить другойчем та, которая была нажата
, что привело к следующему коду, который прекрасно работает:
#import <Cocoa/Cocoa.h>
CGEventRef myCGEventCallback(CGEventTapProxy proxy, CGEventType type, CGEventRef event, void *refcon) {
//0x0b is the virtual keycode for "b"
//0x09 is the virtual keycode for "v"
if (CGEventGetIntegerValueField(event, kCGKeyboardEventKeycode) == 0x0B) {
CGEventSetIntegerValueField(event, kCGKeyboardEventKeycode, 0x09);
}
return event;
}
int main(int argc, char *argv[]) {
//return NSApplicationMain(argc, (const char **)argv);
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
CFRunLoopSourceRef runLoopSource;
CFMachPortRef eventTap = CGEventTapCreate(kCGHIDEventTap, kCGHeadInsertEventTap, kCGEventTapOptionDefault, kCGEventMaskForAllEvents, myCGEventCallback, NULL);
if (!eventTap) {
NSLog(@"Couldn't create event tap!");
exit(1);
}
runLoopSource = CFMachPortCreateRunLoopSource(kCFAllocatorDefault, eventTap, 0);
CFRunLoopAddSource(CFRunLoopGetCurrent(), runLoopSource, kCFRunLoopCommonModes);
CGEventTapEnable(eventTap, true);
CFRunLoopRun();
CFRelease(eventTap);
CFRelease(runLoopSource);
[pool release];
exit(0);
}
Благодаря некоторым полезным сообщениям об ошибках (не может быть двух) main"методы) Я понял, что мне нужно поместить этот код в файл main.m
(верно?).Это означает, что я перезаписываю метод по умолчанию:
int main(int argc, char *argv[]) {
return NSApplicationMain(argc, (const char **)argv);
}
Что означает, что ни один из моих других кодов на основе Objective C не запускается.Но если я раскомментирую этот бит (или предприму любую другую попытку вызвать NSApplicationMain), то цикл запуска main.m
- это то, что не запускается.
Я думаю, это довольно просто для опытного парня из Mac, но яМне трудно оборачиваться вокруг него.Спасибо.