마우스 왼쪽 버튼을 누른 상태에서 사용자가 마우스 오른쪽 버튼을 클릭하는 이유는 무엇입니까? 대부분의 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)
그렇습니다. 그것을 시도해보십시오, 그것이 효과가 있다면 나는 호기심이 많습니다.
마우스 왼쪽 버튼을 누른 상태에서 사용자가 마우스 오른쪽 버튼을 클릭하는 이유는 무엇입니까? 대부분의 Mac 하드웨어에서는 불가능합니다. 사용자가 텍스트를 선택하고 왼쪽 마우스를 누른 다음 마우스 오른쪽 버튼을 다시 놓으면 충분하지 않습니까? – mangerlahn