我试图模拟鼠标点击iphone模拟器从macos应用程序,因为我正在使用CGEvents。
iPhone模拟器的进程id为33554
let point = CGPoint(x: 500 , y:300)
let eventMouseDown = CGEvent(mouseEventSource: nil, mouseType: .leftMouseDown, mouseCursorPosition: point, mouseButton: .left)
let eventMouseUp = CGEvent(mouseEventSource: nil, mouseType: .leftMouseUp, mouseCursorPosition: point, mouseButton: .left)
eventMouseDown?.postToPid(33554)
eventMouseUp?.postToPid(33554)
我还注意到,当ios模拟器窗口被聚焦时,它会模拟鼠标点击,并且仅适用于此工具栏,而不适用于模拟器。例如,如果我将CGPoint更改为(0,30),它将单击模拟器选项
但是,当我在iOS模拟器中给CGPoints点击应用程序时,它不工作
但是,我可以使用以下命令将键盘事件发送到模拟器
let keyboardDown = CGEvent(keyboardEventSource: nil, virtualKey: 6, keyDown: true)
let keyboardUp = CGEvent(keyboardEventSource: nil, virtualKey: 6, keyDown: false)
keyboardDown?.postToPid(33554)
keyboardUp?.postToPid(33554)
发布于 2018-05-22 16:48:11
首先,如果您查看postToPid
,就会发现根本没有文档
所以甚至不能确定它是否应该工作,如果是,那么何时和何时不工作。但是您可以使用以下代码将事件直接发布到屏幕上
//
// main.swift
// mouseplay
//
// Created by Tarun Lalwani on 22/05/18.
// Copyright © 2018 Tarun Lalwani. All rights reserved.
//
import Foundation
let source = CGEventSource.init(stateID: .hidSystemState)
let position = CGPoint(x: 75, y: 100)
let eventDown = CGEvent(mouseEventSource: source, mouseType: .leftMouseDown, mouseCursorPosition: position , mouseButton: .left)
let eventUp = CGEvent(mouseEventSource: source, mouseType: .leftMouseUp, mouseCursorPosition: position , mouseButton: .left)
eventDown?.post(tap: .cghidEventTap)
//eventDown?.postToPid(71028)
usleep(500_000)
//eventUp?.postToPid(71028)
eventUp?.post(tap: .cghidEventTap)
print("Hello, World!")
你也可以看到它在工作
发布于 2017-02-03 14:44:42
您说您能够发布键盘事件,所以这不太可能是权限问题,但您可以尝试以root身份执行您的程序,以排除这一可能性。
事件坐标可能只是与您期望的不同(翻转?)。尝试在模拟应用程序中设置一些内容,以便在应用程序级别报告所有接收到的事件。
此外,坐标是否在屏幕坐标系中?也许该事件被模拟器接收并被丢弃,因为在它的“下面”没有窗口来传递它。尝试将模拟器窗口移动到屏幕的每个角落,并使用类似于(10,10)的坐标。
您还可以尝试使用NSEvent
及其CGEvent
方法来获取底层cgevent,它可以根据您的需要进行正确的初始化。如果这样做有效,那么就更容易找出你遗漏了什么。
最后,尽量不要为mouseEventSource
传递nil
。也许是像CGEventSourceRef eventSource = CGEventSourceCreate(kCGEventSourceStateHIDSystemState);
这样的?
帮助中的最后一次尝试:
我有一个(旧的) mac应用程序,它将制造的鼠标事件分派给其他程序;也许它的source code可以揭示一些有用的东西。
现在..。如果这些都不起作用,你可以告诉我们你到底想要实现什么,这对你可能是有益的。有可能有更好的方法。
发布于 2018-01-07 06:18:13
你们很接近(Swift 4):
let mousePosition: CGPoint = .zero // your position here
let mouseEvent = CGEvent(mouseEventSource: nil, mouseType: .leftMouseDown,
mouseCursorPosition: mousePosition, mouseButton: .left)
mouseEvent?.postToPid(33554)
一开始没有意识到的一个重要细节是,必须禁用应用程序沙箱才能使此API工作。
https://stackoverflow.com/questions/41908620
复制相似问题