首页 > 解决方案 > 如何跟踪属于另一个应用程序的窗口的位置

问题描述

当使用 Zoom 或 Skype/Teams 在 macOS 上共享特定窗口时,它们会在该窗口(属于不同的应用程序)周围绘制一个红色或绿色的高亮边框,以表明它正在被共享。边框实时跟随目标窗口,具有调整大小、z 顺序更改等。

参见示例:

在此处输入图像描述

可以使用哪些 macOS API 和技术来实现此效果?

标签: objective-cmacoscocoacore-graphics

解决方案


CGWindowListCopyWindowInfo您可以使用沙盒应用程序可用的相关 API 和相关 API找到窗口的位置。

这是一个非常快速和高效的 API,速度足以被轮询。SonOfGrab示例代码是尝试这些东西的绝佳平台。

您还可以使用+[NSEvent addGlobalMonitorForEventsMatchingMask:handler:](在沙盒中提供)安装全局事件点击来跟踪鼠标向下、拖动和鼠标向上事件,然后您可以在用户开始或释放拖动时立即响应。这样你的反应就会很敏捷。

(绘制边框将通过创建您自己的透明窗口来完成,该窗口略大于您正在跟踪的窗口,并且与您正在跟踪的窗口处于同一窗口层。然后简单地在其中绘制一个漂亮的绿色框。我不太确定设置z-order。这部分的细节最好作为一个单独的问题。)


推荐阅读