gpt4 book ai didi

cocoa 应用程序: scroll programmatically?

转载 作者:行者123 更新时间:2023-12-03 16:35:06 26 4
gpt4 key购买 nike

我目前正在开发一个适用于 iOS 和 macOS 的跨平台应用程序,使您的 iOS 设备可以用作触控板。

使用CGDisplayMoveCursorToPoint,我可以在屏幕上移动光标。奇迹般有效。通过“主机”应用程序(即在 macOS 上运行)中的这段代码,我可以单击鼠标:

let currentPosition = foo() // call to my helper function
// that translates NSEvent.mouseLocation()
let downEvent = CGEvent(
mouseEventSource: nil,
mouseType: .leftMouseDown,
mouseCursorPosition: currentPosition,
mouseButton: .left
)
let upEvent = CGEvent(
mouseEventSource: nil,
mouseType: .leftMouseUp,
mouseCursorPosition: currentPosition,
mouseButton: .left
)
downEvent?.post(tap: CGEventTapLocation.cghidEventTap)
upEvent?.post(tap: CGEventTapLocation.cghidEventTap)

到目前为止,一切顺利。

现在我想在iOS设备上用两根手指实现滚动。问题不在于 iOS 和 macOS 之间的通信(顺便说一句,PeerTalk 很棒),而是我似乎无法在主机上触发滚动事件。

首先,我尝试了这样的事情:

let eventSource = CGEventSource(stateID: .hidSystemState)
let event = CGEvent(
mouseEventSource: eventSource,
mouseType: .scrollWheel,
mouseCursorPosition: currentPosition,
mouseButton: .left
)

不幸的是,event 总是nil,我不明白为什么。我想尝试的另一种方法是这样的(是的,我使用从全局事件监听器获得的硬编码值,用于测试目的):

NSEvent.mouseEvent(
with: NSEventType.scrollWheel,
location: NSPoint(x: 671.0, y: 568.0),
modifierFlags: .init(rawValue: 0),
timestamp: 198223.19430632601,
windowNumber: 14389,
context: nil,
eventNumber: 0,
clickCount: 1,
pressure: 1.0
)

但是我的应用程序在创建事件时崩溃了:

*** 由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序,原因:“无效参数不满足:_NSEventMask64FromType(type) & (MouseMask|NSEventMaskMouseMoved)”

有人知道我如何实现滚动功能吗?提前致谢!

最佳答案

从 MacOS 10.13 开始,CGEvent 有一个新的初始化程序来创建滚动事件: https://developer.apple.com/documentation/coregraphics/cgevent/2919739-init

我设法像下面这样使用它:

func PostMouseScrollEvent(up: Bool){
var wheel1: Int32 = -100
if up { wheel1 = 100 }
let event = CGEvent(scrollWheelEvent2Source: nil, units: .pixel, wheelCount: 1, wheel1: wheel1, wheel2: 0, wheel3: 0)
event?.post(tap: CGEventTapLocation.cghidEventTap)
}

关于 cocoa 应用程序: scroll programmatically?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42813264/

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