gpt4 book ai didi

objective-c - 我如何在 cocoa 中获取鼠标单击事件元素

转载 作者:行者123 更新时间:2023-12-03 17:37:38 28 4
gpt4 key购买 nike

我通过 macOS 中的全局监视器接收点击事件。NSEvent 给我坐标,但我需要获取 UIElement。

使用辅助功能 API,我可以获得焦点元素,但我需要完全不同的单击元素。例如,如果我单击文本区域,我会得到 AXTextArea 元素。如果我单击应用程序任务栏,焦点元素仍然是 AXTextArea,这是有意义的。我想要与鼠标事件关联的元素。

我在网上发现了一个名为accessibilityHitTest的方法,该方法应该检索给定NSPoint下的UIElement。我总是得到 null,所以我不确定这是否应该这样工作。

也许还有另一个函数可以从屏幕上的给定点检索 UIElement?

这是我尝试过的:

NSEvent *event; // My event received from global monitoring
id clickedObject = [self accessibilityHitTest:event.locationInWindow];
//This give me an error because self is not a NSWindow.

NSEvent *event; // My event received from global monitoring
id clickedObject =
[[NSApp keyWindow] accessibilityHitTest:event.locationInWindow];
//This give me null at every click.

也许这是不可能的,但我只是可以在鼠标单击下获取 UIElement,而不是聚焦的 UIElement。

最佳答案

您需要使用AXUIElementCopyElementAtPosition()为了这。请注意,您必须小心提供正确坐标系中的坐标。由于该事件没有关联的 window(因为它是针对不同的应用程序),因此 NSEventlocationInWindow 使用以原点为基础的 Cocoa 坐标系在主显示屏的左下角,y 向上方向增加。 AXUIElementCopyElementAtPosition() 获取 Core Graphics 坐标系中的坐标,原点位于主显示屏的左上角,y 向下递增。基本上,你会:

point.y = NSMaxY(NSScreen.screens[0].frame) - point.y;

关于objective-c - 我如何在 cocoa 中获取鼠标单击事件元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56082519/

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