我在 OSX 上的 C++ 中使用 ApplicationServices 和 CGEventPost,我正在尝试查看是否可以按住一个键,但它不起作用。
这是我正在使用的方法:
void postKeyboardEvent( int keyCode, bool keyUp = false )
{
CGEventSourceRef source = CGEventSourceCreate( kCGEventSourceStateHIDSystemState );
CGEventRef keyEvent = CGEventCreateKeyboardEvent( source, (CGKeyCode) keyCode, !keyUp );
CGEventPost( kCGAnnotatedSessionEventTap, keyEvent );
CFRelease( keyEvent );
CFRelease( source );
}
这就是我测试它的方式:
postKeyboardEvent( kVK_Command );
postKeyboardEvent( kVK_Tab );
postKeyboardEvent( kVK_Tab, true );
postKeyboardEvent( kVK_Command, true );
据我了解,这应该将我切换到另一个窗口,但它只是“放开”命令键并键入一个制表符。
重要提示:我不想使用以下内容:
CGEventSetFlags( keyEvent, kCGEventFlagMaskCommand );
我需要发送按键和按键命令的“串行链”,而不必知道哪些键码是修饰键或用多少个来标记事件。
有没有办法做到这一点?