OSX でキーボード イベントをシミュレートするデーモン (ルート プロセス) に次のコードがあります。
CGEventRef keyEvent = CGEventCreateKeyboardEvent (NULL, (CGKeyCode)keyCode, keyDown);
CGEventPost(kCGHIDEventTap, keyEvent);
CFRelease(keyEvent);
私が User1 にいて、デーモンがルート コンテキストに読み込まれると、キーボード イベントが正常にシミュレートされます。User2 に切り替えると、Shift キーを除くすべてのイベントが正常に実行されます。現在User2でログインしているのに、なぜかShiftキーのキーボードイベントがUser1で実行されてしまいます。
また、シフト マスクを使用してみました。
CGEventRef event1 = CGEventCreateKeyboardEvent(NULL, (CGKeyCode)keyCode, true);//'z' keydown event
CGEventSetFlags(event1, kCGEventFlagMaskShift);//set shift key down for above event
CGEventPost(kCGHIDEventTap, event1);//post event
CFRelease(event1);
これも User1 で正常に動作します。user2 に切り替えて、上記のように主要なイベントを実行すると、User1 の最前面のアプリケーションでこれらのイベントが実行されます。Shift キーを押した場合、または Shift マスクを使用してキーを押した場合のイベントは、現在ログインしているユーザーではなく、User1 に送信されます。
ログインしたユーザーでキーボードイベントが実行されることを確認できる方法はありますか?