我有以下代码可以将虚拟按键发送到给定 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。在第一个键之后,一切顺利。
为什么会这样?即使我在将我的流程推向前台后发布了关键事件。