(Mac) 模拟键盘快捷键 - 箭头键不起作用
(Mac) Simulating keyboard shortcuts - Arrow keys don't work
我正在尝试使用 Quartz 事件服务以编程方式触发键盘快捷键:
CGEventSourceRef src = CGEventSourceCreate(kCGEventSourceStateHIDSystemState);
CGEventRef leftDown = CGEventCreateKeyboardEvent(src, 0x7b, true); // creating left arrow down event
CGEventRef leftUp = CGEventCreateKeyboardEvent(src, 0x7b, false); // creating left arrow up event
CGEventSetFlags(leftDown, kCGEventFlagMaskCommand); // setting command key modifier flag
CGEventSetFlags(leftUp, kCGEventFlagMaskCommand); // ""
CGEventTapLocation loc = kCGHIDEventTap;
CGEventPost(loc, leftDown);
CGEventPost(loc, leftUp);
CFRelease(leftDown);
CFRelease(leftUp);
CFRelease(src);
如果您使用的不是箭头键,此代码可用于触发系统功能。但是,如果您使用箭头键,代码只会让您的光标移动。
触发,例如command-space用这段代码(0x31, kCGEventFlagMaskCommand)
成功调出聚光灯,但是如果你将聚光灯映射到command-left_arrow,然后触发command-left_arrow使用此代码,它只会使光标跳到行的开头。
值得注意的一点是,当我尝试触发包含箭头键的系统快捷方式时,Apple Script 的行为方式完全相同。
有解决办法吗?
谢谢你的帮助,我很感激。
由于某些原因,箭头键只能以您期望的方式与 "private" CGEventSourceStateID
一起使用。换行
CGEventSourceRef src = CGEventSourceCreate(kCGEventSourceStateHIDSystemState);
至
CGEventSourceRef src = CGEventSourceCreate(kCGEventSourceStatePrivate);
它会按预期工作。 (在 macOS 10.13.4 上测试)
我正在尝试使用 Quartz 事件服务以编程方式触发键盘快捷键:
CGEventSourceRef src = CGEventSourceCreate(kCGEventSourceStateHIDSystemState);
CGEventRef leftDown = CGEventCreateKeyboardEvent(src, 0x7b, true); // creating left arrow down event
CGEventRef leftUp = CGEventCreateKeyboardEvent(src, 0x7b, false); // creating left arrow up event
CGEventSetFlags(leftDown, kCGEventFlagMaskCommand); // setting command key modifier flag
CGEventSetFlags(leftUp, kCGEventFlagMaskCommand); // ""
CGEventTapLocation loc = kCGHIDEventTap;
CGEventPost(loc, leftDown);
CGEventPost(loc, leftUp);
CFRelease(leftDown);
CFRelease(leftUp);
CFRelease(src);
如果您使用的不是箭头键,此代码可用于触发系统功能。但是,如果您使用箭头键,代码只会让您的光标移动。
触发,例如command-space用这段代码(0x31, kCGEventFlagMaskCommand)
成功调出聚光灯,但是如果你将聚光灯映射到command-left_arrow,然后触发command-left_arrow使用此代码,它只会使光标跳到行的开头。
值得注意的一点是,当我尝试触发包含箭头键的系统快捷方式时,Apple Script 的行为方式完全相同。
有解决办法吗?
谢谢你的帮助,我很感激。
由于某些原因,箭头键只能以您期望的方式与 "private" CGEventSourceStateID
一起使用。换行
CGEventSourceRef src = CGEventSourceCreate(kCGEventSourceStateHIDSystemState);
至
CGEventSourceRef src = CGEventSourceCreate(kCGEventSourceStatePrivate);
它会按预期工作。 (在 macOS 10.13.4 上测试)