我正在尝试模拟键盘输入Ctrl + Up来打开任务控制,并引用了这里的代码:
https://stackoverflow.com/a/10745616/8556692
#import <Cocoa/Cocoa.h>
int main(int argc, const char * argv[]) {
@autoreleasepool {
NSLog(@"Open Mission Control");
CGEventSourceRef src =
CGEventSourceCreate(kCGEventSourceStateHIDSystemState);
CGEventRef ctrld = CGEventCreateKeyboardEvent(src, 0x3B, true);
CGEventRef ctrlu = CGEventCreateKeyboardEvent(src, 0x3B, false);
CGEventRef upd = CGEventCreateKeyboardEvent(src, 0x7E, true);
CGEventRef upu = CGEventCreateKeyboardEvent(src, 0x7E, false);
CGEventSetFlags(upd, kCGEventFlagMaskControl);
CGEventSetFlags(upu, kCGEventFlagMaskControl);
CGEventTapLocation loc = kCGHIDEventTap; // kCGSessionEventTap also works
CGEventPost(loc, ctrld);
CGEventPost(loc, upd);
usleep(20000);
CGEventPost(loc, upu);
CGEventPost(loc, ctrlu);
CFRelease(ctrld);
CFRelease(ctrlu);
CFRelease(upd);
CFRelease(upu);
CFRelease(src);
}
NSLog(@"Done");
return 0;//NSApplicationMain(argc, argv);
}
但是失败了。
我尝试用这段代码来模拟Cmd+Space(0x38 + 0x31 + Command Mask),成功了一次,我想我的代码一定有问题......
最佳答案
我也遇到了这个问题。除 kCGEventFlagMaskControl 之外的所有标志(kCGEventFlagMaskCommand、kCGEventFlagMaskShift)均有效。我添加了 kCGEventFlagMaskSecondaryFn ,如下所示 Simulated key command not working since OS upgrade现在可以了。
CGEventSetFlags(upd, kCGEventFlagMaskControl | kCGEventFlagMaskSecondaryFn);
CGEventSetFlags(upu, kCGEventFlagMaskControl | kCGEventFlagMaskSecondaryFn);
关于cocoa - 如何在 Mac OSX 中模拟 ctrl+up?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61872579/