我正在编写服务应用程序在后台运行,并在Mac OS X上捕获“焦点”窗口。“焦点”窗口表示窗口当前正在接收用户输入。 (在Mac中我认为这称为key window
)
我目前正在使用CGWindowListCopyWindowInfo(kCGWindowListOptionOnScreenOnly, kCGNullWindowID);
获取窗口列表,并获得kCGWindowLayer == 0
的第一个窗口。 (因为列表是从前到后的顺序)。
但事实并非如此。有时如果活动应用程序弹出一个无模式对话框,无模式对话框将成为关键窗口,但它不是kCGWindowLayer == 0
的第一个窗口,所以我会得到一个错误的窗口。
获取活动应用程序的关键窗口的正确方法是什么?或者可以告诉我关键窗口更改的通知回调也没问题。
此外,由于我在不属于我的应用程序的窗口上操作,NSApplication.windowWithWindowNumber可能无效。