Objective c 从PID填充ProcessSerialNumber的另一种方法,因为GetProcessForPID已被弃用

Objective c 从PID填充ProcessSerialNumber的另一种方法,因为GetProcessForPID已被弃用,objective-c,c,macos,Objective C,C,Macos,我有一个模拟鼠标点击的窗口的CGWindowID和PID(int)。我可以使用以下代码段成功模拟mousedown和mouseup事件: NSEvent *customEvent = [NSEvent mouseEventWithType: NSEventTypeLeftMouseUp location: point mod

我有一个模拟鼠标点击的窗口的CGWindowID和PID(int)。我可以使用以下代码段成功模拟mousedown和mouseup事件:

NSEvent *customEvent = [NSEvent mouseEventWithType: NSEventTypeLeftMouseUp
                                              location: point
                                         modifierFlags: 0 | NSEventModifierFlagCommand
                                             timestamp:[NSDate timeIntervalSinceReferenceDate]
                                          windowNumber:[self.windowID intValue]
                                               context: nil
                                           eventNumber: 0
                                            clickCount: 1
                                              pressure: 0];

ProcessSerialNumber psn = { 0, kNoProcess };
    OSStatus err = GetProcessForPID(PID, &psn);
    if (err == noErr) {
        CGEvent = [customEvent CGEvent];
        CGEventPostToPSN(&psn, CGEvent);

        CGEvent = [customEvent CGEvent];
        CGEventPostToPSN(&psn, CGEvent);
    }
我担心的是GetProcessForPID已被弃用,因此我正在寻找替代方法来填充ProcessSerialNumber结构,以便使用CGEventPostToPSN。ProcessSerialNumber是包含高值和低值的结构:

struct ProcessSerialNumber {
  UInt32              highLongOfPSN;
  UInt32              lowLongOfPSN;
};
如果没有一种方法可以使用PID来获取它,那么我如何为已经运行的另一个进程找到它?我已尝试侦听NSWorkspaceDidActivateApplicationNotification并单击目标窗口,但该通知不包含序列号高值和低值


NSWorkSpace launchedApplications在结果数组中也包含此信息,但自10.7以来也不推荐使用。从NSWorkspace运行的应用程序不包含此信息,或者我遗漏了一些明显的信息吗?

AIUI基本思想是PSN本身以及与之相关的所有API都已弃用。有什么原因不能直接使用
CGEventPostToPid

我也偶然发现了这个,该死的。真不敢相信这段时间我没有看到PID方法和PSN方法。CGEventPostToPSN也应该被标记为不推荐的,所以开发人员被指向Pid方法。。。不过,谢谢你标记这个!苹果在他们的文档页面上有一个方便的报告问题的小表格,也许值得留下一个简短的说明。