[英]Is it possible to simulate click using CGEvent for iOS app on Mac with M1?
[英]How to simulate mouse click from Mac App to other Application
我試圖從macos App模擬鼠標點擊iphone模擬器,因為我正在使用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)它將單擊模擬器選項
但當我提供CGPoints點擊iOS模擬器內的應用程序時它無法正常工作
但是,我可以使用鍵盤事件發送到模擬器
let keyboardDown = CGEvent(keyboardEventSource: nil, virtualKey: 6, keyDown: true)
let keyboardUp = CGEvent(keyboardEventSource: nil, virtualKey: 6, keyDown: false)
keyboardDown?.postToPid(33554)
keyboardUp?.postToPid(33554)
您說您可以發布鍵盤事件,因此它不太可能是權限問題,但您可以嘗試以root用戶身份執行您的程序來規則。
事件坐標可能與您期望的不同(翻轉?)。 嘗試在模擬應用中設置一些內容,以報告應用程序級別的所有已接收事件。
此外,屏幕坐標系中的坐標是? 也許事件是由模擬器接收並丟棄的,因為沒有窗口“在它下面”將它傳遞給它。 嘗試將模擬器窗口移動到屏幕的每個角落,並使用類似(10,10)的坐標。
您還可以嘗試NSEvent
及其CGEvent
方法來獲取可能根據您的需要正確初始化的基礎cgevent。 如果這樣可以更容易找出你所缺少的東西。
最后,嘗試不為mouseEventSource
傳遞nil
。 像CGEventSourceRef eventSource = CGEventSourceCreate(kCGEventSourceStateHIDSystemState);
也許?
最后一次嘗試幫助:
我有一個(舊的)mac應用程序,它將制造的鼠標事件發送到其他程序; 也許它的源代碼可以揭示有用的東西。
現在......如果這些都不起作用,那么告訴我們你究竟想要完成什么可能對你有益。 它可能有更好的方法。
首先,如果你看一下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!")
你也可以看到它的工作原理
你很親密(Swift 4):
let mousePosition: CGPoint = .zero // your position here
let mouseEvent = CGEvent(mouseEventSource: nil, mouseType: .leftMouseDown,
mouseCursorPosition: mousePosition, mouseButton: .left)
mouseEvent?.postToPid(33554)
一開始沒有意識到的一個重要細節是必須禁用應用程序沙盒才能使此API正常工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.