我正在可可应用程序中注册全局鼠标滚轮事件。我的目标是让某种后台应用程序能够在用户在其窗口中滚动时聚焦另一个应用程序的窗口。如果可能使用 Objective-C 和 Cocoa,如果我想这样做,我需要走哪条路?
我的事件注册代码如下所示:
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
[NSEvent addGlobalMonitorForEventsMatchingMask:
NSScrollWheelMask handler:^(NSEvent * ev) {
NSLog(@"%@", ev.description);
}];
}
这行得通,但是在事件中捕获的数据(如窗口或 windowid)我似乎无法操作 - 而且窗口 id 似乎甚至不是正确的,因为我可以获得一个列表窗口并在那里获得不同的 id - 只是屏幕位置似乎是准确的。所以三个问题来解决这个谜题:
- 如何在屏幕上的某个位置获取窗口或窗口 ID?
- 如果我只能得到一个窗口 id,我怎样才能找到合适的应用程序或窗口对象来操作?
- 我想我需要可访问性 API 来操作窗口并赋予它焦点。这是如何运作的?
也许这些都是简单的任务,但我以前从未编写过 Mac-Cocoa 应用程序。在建议阅读文档之前,您应该知道我已经扫描了所有文档,并且我通过示例学习比阅读书籍更好:-)
编辑:我刚刚发现我可能会使用 ProcessManager 将应用程序带到前面。如果您认为这是一个可能的解决方案,我可以在屏幕上的某个点获取窗口的进程 ID 吗?
EDIT2:我不想使用 Carbon API。