cocoa - 检测另一个应用程序的窗口何时被移动/调整大小

标签 cocoa

我正在创建一个 OS X 应用程序,它将充当其他一些应用程序的伴侣。它将自身与最顶部应用程序的一侧对齐,就像侧边栏一样。目前,我只是定期获取打开的窗口列表,并将我的应用程序与最上面的窗口对齐。我正在使用 NSTimer 执行此操作:

[NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(findHostWindow) userInfo:nil repeats:YES];

在 findHostWindow 中,我得到了一个窗口列表:

CFArrayRef windowDefs =
    CGWindowListCopyWindowInfo(kCGWindowListOptionOnScreenOnly | kCGWindowListExcludeDesktopElements, kCGNullWindowID);

我搜索 windowDefs 以找到我理想的主机窗口。它很复杂而且有点无关紧要。然后我找到主机窗口的边界:

CFDictionaryRef bounds = (CFDictionaryRef)CFDictionaryGetValue(idealHostWindowDef, kCGWindowBounds);

然后我执行捕捉/停靠逻辑来模拟侧边栏。

我有两个担忧:

  1. 轮询在性能方面效率不高
  2. 代码很难看
  3. 当我的窗口响应主机窗口的移动/调整大小时,存在明显的延迟

对于这样的事情有更好的方法吗?也许是一个系统事件,当任何窗口移动/调整大小时提醒应用程序?

NSWindow 中是否有一些更新方法可以在重绘窗口之前重写以执行此操作,而不是基于间隔的方法?

编辑:据我所知,Accessibility API 可能会提供对此的支持,但它不是实时的。它仅在用户完成移动/调整窗口大小后报告。

最佳答案

我知道你能够通过 JavaScript 操作网页的前端。这包括实时操作。可能找到一种方法来添加触发时的事件。

http://null-byte.wonderhowto.com/how-to/use-javascript-injections-locally-manipulate-websites-you-visit-0130601/

抱歉无法提供更多帮助

关于cocoa - 检测另一个应用程序的窗口何时被移动/调整大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24253930/

相关文章:

objective-c - NSOutlineView 单元格具有相同值时的问题

cocoa - 改变 NSbox Objective C 的可见性

cocoa - 文本编辑期间 Nscell 大小不随行高增加

cocoa - 如何使用确定的 NSProgressIndicator 来检查 NSTask 的进度? - cocoa

objective-c - 如何控制NSNumberFormatter的科学风格?

objective-c - 核心数据和 NSPersistentDocument : Sum of column numbers crash

ios - 为什么我不能通过代码改变我的 UITableView 的高度?

macos - 当应用程序从 XCode 运行时,文件拖放 View 有效,但不能作为独立应用程序运行

objective-c - 自定义 NSToolbar - 禁用 "Use small size"

objective-c - 以编程方式让 Mac 进入休眠状态