gpt4 book ai didi

macos - 如何在 NSTextView 上拖动鼠标左键时检测鼠标右键按下和其他鼠标按下?

转载 作者:行者123 更新时间:2023-12-03 17:48:33 24 4
gpt4 key购买 nike

当用户用鼠标左键选择文本并按住鼠标左键并单击鼠标右键btn时,我试图实现调用操作。

我目前正在覆盖 rightMouseDownotherMouseDown,但当用户按住左鼠标 btn 时不会调用它。我怎样才能实现它?

最佳答案

为什么用户会在按住鼠标左键的同时单击鼠标右键?对于大多数 Mac 硬件来说,这甚至是不可能的。如果用户选择文本,释放鼠标左键,然后再次右键单击,这还不够吗?

但如果您确实需要这样的功能:我还没有对此进行测试,因为我没有同时调用左右鼠标按下的硬件,但它可能可以工作。

您可以更深入地使用 CGEvent 对象。以下是它们的工作原理:

创建位掩码来定义您要响应的事件。

let eventMask = eventMask | (1 << CGEventType.leftMouseDown.rawValue)
| (1 << CGEventType.leftMouseUp.rawValue)
| (1 << CGEventType.rightMouseDown.rawValue)
| (1 << CGEventType.rightMouseUp.rawValue)
| (1 << CGEventType.otherMouseDown.rawValue)
| (1 << CGEventType.otherMouseUp.rawValue)

self.eventTap = CGEvent.tapCreate(tap: .cghidEventTap, place: .headInsertEventTap, options: .defaultTap, eventsOfInterest: CGEventMask(eventMask), callback: { (proxy: CGEventTapProxy, type: CGEventType, event: CGEvent, userInfo: UnsafeMutablePointer<Void>?) -> Unmanaged<CGEvent>? in
// mySelf is self, if you need to refer to objects in this class
let mySelf = Unmanaged<MyClass>.fromOpaque(userInfo!).takeUnretainedValue()

if type == .leftMouseDown || type == .leftMouseUp {
// Left mouse down etc..

}

return Unmanaged.passUnretained(event)
}, userInfo: UnsafeMutablePointer(Unmanaged.passUnretained(self).toOpaque()))

最后,您需要将返回的 CFMachPort 添加到 runLoop。

let runloopSource = CFMachPortCreateRunLoopSource(kCFAllocatorDefault, eventTap, 0)
CFRunLoopAddSource(CFRunLoopGetCurrent(), runloopSource, CFRunLoopMode.commonModes)

就是这样!尝试一下,我很好奇它是否有效。

关于macos - 如何在 NSTextView 上拖动鼠标左键时检测鼠标右键按下和其他鼠标按下?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38278668/

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