Macos 如何等待Mac OS X应用程序完全激活

Macos 如何等待Mac OS X应用程序完全激活,macos,cocoa,macos-carbon,Macos,Cocoa,Macos Carbon,我的应用程序是一个调试器,当用户在代码中从一行转到另一行时,我需要经常在目标应用程序和调试器应用程序之间切换活动进程。我目前正在使用SetFrontProcessWithOptions(…,kSetFrontProcessFrontWindowOnly)调用来完成此任务 我遇到的问题是,SetFrontProcessWithOptions()调用在应用程序完全激活之前返回SetFrontProcessWithOptions()在进程变为活动进程时返回,但在其主窗口被前移并激活之前返回。如果我再次

我的应用程序是一个调试器,当用户在代码中从一行转到另一行时,我需要经常在目标应用程序和调试器应用程序之间切换活动进程。我目前正在使用
SetFrontProcessWithOptions(…,kSetFrontProcessFrontWindowOnly)
调用来完成此任务

我遇到的问题是,
SetFrontProcessWithOptions()
调用在应用程序完全激活之前返回
SetFrontProcessWithOptions()
在进程变为活动进程时返回,但在其主窗口被前移并激活之前返回。如果我再次调用SetFrontProcess太快而无法重新激活我的调试器应用程序,Mac OS X会变得混乱,windows的分层也会变得混乱。从视觉上看,错误的窗口似乎处于活动状态,键盘和菜单焦点指向似乎处于非活动状态的窗口

调用
SetFrontProcessWithOptions()
进行轮询后,我尝试使用
GetFrontProcess()
进行轮询,但是
GetFrontProcess()
会立即返回我的代码通过
SetFrontProcessWithOptions()
激活的PSN,即使该进程的窗口尚未完全激活


有人知道一种方法来确定应用程序何时已完全激活,其主窗口已准备好接收键盘输入吗?

我想知道是否
NSRunningApplication*clientApp=[NSRunningApplication runningApplicationWithProcessIdentifier:(pid_t)pid]
,然后在
clientApp.active
上使用键值观察将比
GetFrontProcess()
轮询提供更好的答案?谢谢您的建议。我尝试了一下,但和GetFrontProcess一样,
clientApp.active
在应用程序的窗口被激活之前会报告YES。