2019-09-05 15:20:52 +00:00
|
|
|
#include "bridge.h"
|
|
|
|
|
|
|
|
#import <Foundation/Foundation.h>
|
2019-09-05 16:34:03 +00:00
|
|
|
#include "AppDelegate.h"
|
2019-09-05 15:20:52 +00:00
|
|
|
extern "C" {
|
2019-09-05 16:34:03 +00:00
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
#include <vector>
|
|
|
|
|
|
|
|
|
|
|
|
void register_keypress_callback(void * self, KeypressCallback callback) {
|
|
|
|
keypress_callback = callback;
|
|
|
|
interceptor_instance = self;
|
2019-09-05 15:20:52 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
int32_t initialize() {
|
|
|
|
AppDelegate *delegate = [[AppDelegate alloc] init];
|
|
|
|
NSApplication * application = [NSApplication sharedApplication];
|
|
|
|
[application setDelegate:delegate];
|
|
|
|
}
|
|
|
|
|
|
|
|
int32_t eventloop() {
|
|
|
|
[NSApp run];
|
2019-09-05 16:34:03 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
void send_string(const char * string) {
|
|
|
|
// Convert the c string to a UniChar array as required by the CGEventKeyboardSetUnicodeString method
|
|
|
|
NSString * nsString = [NSString stringWithUTF8String:string];
|
|
|
|
CFStringRef cfString = (__bridge CFStringRef)nsString;
|
|
|
|
std::vector<UniChar> buffer(nsString.length);
|
|
|
|
CFStringGetCharacters(cfString, CFRangeMake(0, nsString.length), buffer.data());
|
|
|
|
|
|
|
|
// Send the event
|
|
|
|
CGEventRef e = CGEventCreateKeyboardEvent(NULL, 0x31, true);
|
|
|
|
CGEventKeyboardSetUnicodeString(e, buffer.size(), buffer.data());
|
|
|
|
CGEventPost(kCGHIDEventTap, e);
|
|
|
|
CFRelease(e);
|
|
|
|
}
|
|
|
|
|
|
|
|
void delete_string(int32_t count) {
|
|
|
|
for (int i = 0; i<count; i++) {
|
|
|
|
CGEventRef keydown;
|
|
|
|
keydown = CGEventCreateKeyboardEvent (NULL, 0x33, true);
|
|
|
|
CGEventPost(kCGHIDEventTap, keydown);
|
|
|
|
CFRelease(keydown);
|
|
|
|
|
|
|
|
usleep(2000);
|
|
|
|
|
|
|
|
CGEventRef keyup;
|
|
|
|
keyup = CGEventCreateKeyboardEvent (NULL, 0x33, false);
|
|
|
|
CGEventPost(kCGHIDEventTap, keyup);
|
|
|
|
CFRelease(keyup);
|
|
|
|
|
|
|
|
usleep(2000);
|
|
|
|
}
|
2019-09-05 15:20:52 +00:00
|
|
|
}
|