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 );
私の理解では、これは別のウィンドウに切り替わるはずですが、代わりにコマンドキーを「離して」Tab文字を入力するだけです。
重要:次のようなものは使いたくありません。
CGEventSetFlags( keyEvent, kCGEventFlagMaskCommand );
どのキーコードが修飾キーであるか、またはイベントにフラグを立てるキーコードの数を知らなくても、キーダウンコマンドとキーアップコマンドの「シリアルチェーン」を送信する必要があります。
これを行う方法はありますか?