在应用程序中使用 Swift 模拟 MacOS 中的拖放事件

问题描述 投票:0回答:1

我目前正在开发一个项目,需要使用 Swift 在 MacOS 中模拟鼠标拖放事件。我编写了以下代码,该代码在大多数应用程序中运行良好,但在某些应用程序(例如 Finder)中遇到了问题,其中 leftMouseDragged 事件似乎无法正常工作。点击事件在任何地方都运行良好。

这是我用于拖动事件的代码:

let location = CGEventTapLocation.cghidEventTap
        let source = CGEventSource.init(stateID: .hidSystemState)
        let clickAtStart = CGEvent(mouseEventSource: source, mouseType: .leftMouseDown, mouseCursorPosition: locationPoint , mouseButton: .left)
        let dragAndDrop = CGEvent(mouseEventSource: source, mouseType: .leftMouseDragged, mouseCursorPosition: locationPointDrag, mouseButton: .left)
        clickAtStart?.post(tap: location)
        usleep(200000)
        dragAndDrop?.post(tap: location)

与放置事件类似:

        let location = CGEventTapLocation.cghidEventTap
        let source = CGEventSource.init(stateID: .hidSystemState)
        let dragAndDropRelease = CGEvent(mouseEventSource: source, mouseType: .leftMouseUp, mouseCursorPosition: locationPoint, mouseButton: .left)
        dragAndDropRelease?.post(tap: location)

我尝试过更改事件顺序、使用不同的事件类型并检查应用程序的权限,但这些解决方案都不起作用。我想知道是否有人遇到过类似的问题或对如何解决此问题有任何建议。

任何帮助将不胜感激!

swift macos simulation drag drop
1个回答
0
投票

在放置位置

locationPointDrag
发布鼠标松开事件,而不是在鼠标按下位置
locationPoint
。大多数应用程序并不关心,但 Finder 会将项目放在鼠标悬停的位置。

let dragAndDropRelease = CGEvent(mouseEventSource: source, mouseType: .leftMouseUp, mouseCursorPosition: locationPointDrag, mouseButton: .left)
© www.soinside.com 2019 - 2024. All rights reserved.