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。