gpt4 book ai didi

objective-c - 从 PID 填充 ProcessSerialNumber 的另一种方法,因为不推荐使用 GetProcessForPID

转载 作者:太空宇宙 更新时间:2023-11-04 02:30:55 24 4
gpt4 key购买 nike

我有一个正在模拟鼠标点击的窗口的 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 中的 runningApplications 不包含此信息,还是我遗漏了一些明显的信息?

最佳答案

AIUI 的基本思想是弃用 PSN 本身以及与其相关的所有 API。您是否有理由不能只使用 CGEventPostToPid

关于objective-c - 从 PID 填充 ProcessSerialNumber 的另一种方法,因为不推荐使用 GetProcessForPID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43320004/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com