objective-c - 如何跟踪属于另一个应用程序的窗口的位置
问题描述
当使用 Zoom 或 Skype/Teams 在 macOS 上共享特定窗口时,它们会在该窗口(属于不同的应用程序)周围绘制一个红色或绿色的高亮边框,以表明它正在被共享。边框实时跟随目标窗口,具有调整大小、z 顺序更改等。
参见示例:
可以使用哪些 macOS API 和技术来实现此效果?
解决方案
CGWindowListCopyWindowInfo
您可以使用沙盒应用程序可用的相关 API 和相关 API找到窗口的位置。
这是一个非常快速和高效的 API,速度足以被轮询。SonOfGrab示例代码是尝试这些东西的绝佳平台。
您还可以使用+[NSEvent addGlobalMonitorForEventsMatchingMask:handler:]
(在沙盒中提供)安装全局事件点击来跟踪鼠标向下、拖动和鼠标向上事件,然后您可以在用户开始或释放拖动时立即响应。这样你的反应就会很敏捷。
(绘制边框将通过创建您自己的透明窗口来完成,该窗口略大于您正在跟踪的窗口,并且与您正在跟踪的窗口处于同一窗口层。然后简单地在其中绘制一个漂亮的绿色框。我不太确定设置z-order。这部分的细节最好作为一个单独的问题。)
推荐阅读
- android - 如何在我的科尔多瓦应用程序的 ionic 3 文本输入中限制特殊字符的输入?
- javascript - 在单击事件上更改元素节点列表的样式
- android-studio - 如何在 Android Studio 3.1.4 中正确添加 rhino - Android
- neo4j - 即使在 neo4j 中存在重复节点,也返回 1 个节点
- javascript - 如何在javascript中调用同一函数内部和外部的函数
- python - 在块中加载数据时 Pandas None 类型
- python - Python 加载 windows 库 C# 转换
- tornadofx - TornadoFX:标签未更新
- php - 单击聊天按钮时将用户移动到使用 AJAX 的聊天页面| 重要的
- python - 我可以找出导致我的 Python MemoryError 的分配请求吗?