1

pid が指定されたプロセスに仮想キープレスを送信する次のコードがあります。

    NSRunningApplication* app = [NSRunningApplication
                                 runningApplicationWithProcessIdentifier: pid];
    [app activateWithOptions: (NSApplicationActivateAllWindows | NSApplicationActivateIgnoringOtherApps)];

    event1 = CGEventCreateKeyboardEvent (NULL, (CGKeyCode)cg_key_code, true);
    event2 = CGEventCreateKeyboardEvent (NULL, (CGKeyCode)cg_key_code, false);

    CGEventPost(kCGHIDEventTap, event1);
    CGEventPost(kCGHIDEventTap, event2);

キープレスを送信したいプロセスは、予想どおり、すぐに前面に出てきます。しかし問題は、最初のキープレスが、私のアプリケーションが前面に出る前に前面にあったアプリケーションに行くことです。テスト[app isActive]すると、初めて false が返されます。最初のキーの後、すべてがうまくいきます。

なぜこうなった?プロセスを前面に出した、キーイベントを投稿していますが。

4

3 に答える 3

1

を使用する代わりに、 をCGEventPost()使用してCGEventPostToPSN()ください。これにより、イベントが特定のプロセスに配信されます。次のようなコードを使用して、プロセスのシリアル番号を取得できます。

ProcessSerialNumber psn;
GetProcessForPID(app.processIdentifier, &psn);
于 2015-03-01T21:45:49.377 に答える