检测移动/调整其他应用程序窗口的时间

时间:2014-06-17 00:04:21

标签: 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. 当我的窗口响应主机窗口的移动/调整大小时,有明显的延迟
  4. 这样的事情有更好的方法吗?也许是一个系统事件,当移动/调整任何窗口时会提醒应用程序?

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

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

1 个答案:

答案 0 :(得分:-2)

我知道你可以通过javascript操纵网页的前端。这包括实时行动。可能会找到一种方法来为触发时添加事件。

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

抱歉无法提供更多帮助