How to simulate mouse click from Mac App to other Application

人走茶凉 提交于 2019-11-30 17:08:50

You say you are able to post keyboard events, so it isn't likely a permission issue, but you can try executing your program as root to rule that out.

Event coordinates might simply be different from what you expect (flipped?). Try setting up something in a simulated app to report on all received events at the application level.

Furthermore, are the coordinates in the screen coordinate system? Maybe the event is received by the simulator and discarded because there is no window "beneath" it to deliver it to. Try moving the simulator window to each corner of the screen and use something like (10,10) for a coordinate.

You can also try NSEvent and its CGEvent method to get the underlying cgevent which may be initialized correctly for your needs. If that works it will be easier to work out what you are missing.

Lastly, try not passing nil for the mouseEventSource. Something like CGEventSourceRef eventSource = CGEventSourceCreate(kCGEventSourceStateHIDSystemState); maybe?

Last ditch attempt at help:

I have an (old) mac application that dispatches manufactured mouse events to other programs; perhaps its source code can reveal something useful.

Now... if none of that works it might be beneficial for you to tell us what exactly you are trying to accomplish. Its possible there is a much better way.

First of if you look at postToPid there is no documentation at all

So not even sure if it is suppose to work and if yes then when and when not. But you can post the event directly to screen using below code

//
//  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!")

You can see it working also

You were close (Swift 4):

let mousePosition: CGPoint = .zero // your position here
let mouseEvent = CGEvent(mouseEventSource: nil, mouseType: .leftMouseDown, 
mouseCursorPosition: mousePosition, mouseButton: .left)
mouseEvent?.postToPid(33554)

An important detail that did not realize at first is that app sandboxing must be disabled for this API to work.

Denis Makarskiy

Post here because this question is the top most in Google on send click event in OS X.

You may take a look on the working examples of drag'n'drop and make a click function.

Only one note, the window where you are going to click must be visible.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!