gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 16:22:56 26 4
gpt4 key购买 nike

我正在创建一个 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com