在Mac OSX上系统范围识别滚动事件并将焦点设置到不同的窗口

时间:2011-09-06 07:06:20

标签: macos cocoa window window-management accessibility-api

我在我的cocoa应用程序中注册了全局鼠标滚轮事件。我的目标是让某种后台应用程序能够在用户滚动窗口时聚焦另一个应用程序的窗口。如果可能的话,使用Objective-C和Cocoa,如果我想这样做,我还需要走哪条路?

我的事件注册代码如下所示:

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
    [NSEvent addGlobalMonitorForEventsMatchingMask:
    NSScrollWheelMask handler:^(NSEvent * ev) {
        NSLog(@"%@", ev.description);
    }];
}

这样可行,但事件中捕获的数据(如窗口或窗口)我似乎无法操作 - 窗口ID似乎也不是正确的,因为我可以得到一个窗口列表,并在那里获得一个不同的ID - 只是屏幕位置似乎是准确的。所以要解决这个问题的三个问题是:

  1. 如何在地图上的某个位置获取窗口或窗口ID 屏幕?
  2. 如果我只能获得一个窗口ID,我怎样才能找到合适的窗口ID 应用程序或窗口对象来操纵?
  3. 我想我需要辅助功能API来操作 窗口并给它焦点。这有什么作用?
  4. 也许这些是简单的任务,但我以前从未编写过Mac-Cocoa应用程序。在建议阅读文档之前,您应该知道我已经扫描了所有文档,并且我通过示例比通过阅读书籍更好地学习: - )

    编辑:我刚刚发现我可能会使用ProcessManager将应用程序带到前面。如果您认为这是一个可能的解决方案,那么我可以在屏幕上的某个点获取窗口的进程ID吗?

    EDIT2:我不想使用Carbon API。

0 个答案:

没有答案