3

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 に送信されます。

ログインしたユーザーでキーボードイベントが実行されることを確認できる方法はありますか?

4

1 に答える 1

1

を作成したらkeyEvent、投稿する前にモディファイア フラグを設定します。

CGEventFlags flags = kCGEventFlagMaskShift;
CGEventSetFlags(keyEvent, modifierFlags);
于 2015-08-18T05:48:49.030 に答える