Comment simuler un clic de souris de L'application Mac à une autre Application
j'essaie de simuler un clic de souris sur iphone simulator de macos App pour que j'utilise CGEvents .
<!-Le numéro d'identification du procédé est 33554 pour iPhone simulatorlet 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)
j'ai aussi remarqué qu'il simule le clic de la souris quand la fenêtre du simulateur ios est focalisée et ne fonctionne que pour cette barre d'outils mais pas pour le simulateur par exemple si je change CGPoint à (0,30) il cliquera sur L'option du simulateur
mais quand je donne CGPoints pour cliquer app à L'intérieur du simulateur iOS il ne fonctionne pas
cependant, je suis capable d'afficher L'événement clavier sur le simulateur en utilisant
let keyboardDown = CGEvent(keyboardEventSource: nil, virtualKey: 6, keyDown: true)
let keyboardUp = CGEvent(keyboardEventSource: nil, virtualKey: 6, keyDown: false)
keyboardDown?.postToPid(33554)
keyboardUp?.postToPid(33554)
4 réponses
vous dites que vous êtes capable de poster des évènements clavier, donc ce n'est probablement pas un problème de permission, mais vous pouvez essayer d'exécuter votre programme en tant que root pour exclure cela.
les coordonnées de L'événement peuvent tout simplement être différentes de ce que vous attendez (inversé?). Essayez de configurer quelque chose dans une simulation d'application de rapport sur réception d'événements au niveau de la demande.
de plus, les coordonnées sont-elles dans le système de coordonnées d'écran? Peut-être que l'événement est reçu par le simulateur et ignoré car il n'y a pas de fenêtre "sous" pour le livrer. Essayez de déplacer la fenêtre du simulateur à chaque coin de l'écran et utilisez quelque chose comme (10,10) pour une coordonnée.
vous pouvez aussi essayer NSEvent
et son CGEvent
méthode pour obtenir le cgevent sous-jacent qui peut être initialisé correctement pour vos besoins. Si cela fonctionne, il sera plus facile de comprendre ce que vous manquez.
Enfin, essayez passage nil
pour les mouseEventSource
. Quelque chose comme CGEventSourceRef eventSource = CGEventSourceCreate(kCGEventSourceStateHIDSystemState);
peut-être?
dernière tentative de fossé à l'aide:
j'ai une (ancienne) application mac qui envoie les événements de souris fabriqués à d'autres programmes; peut-être son code source peut révéler quelque chose d'utile.
Maintenant... si rien de tout cela fonctionne, il pourrait être avantageux pour vous de nous dire exactement ce que vous essayez d'accomplir. Il est possible qu'il y ait une bien meilleure façon.
d'Abord, si vous regardez postToPid
il n'y a pas de documentation à tous
donc même pas sûr si elle est censée fonctionner et si oui, alors quand et quand pas. Mais vous pouvez poster l'événement directement à l'écran en utilisant le code ci-dessous
//
// 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!")
Vous pouvez le voir, il travail aussi
Vous étiez proche (Swift 4):
let mousePosition: CGPoint = .zero // your position here
let mouseEvent = CGEvent(mouseEventSource: nil, mouseType: .leftMouseDown,
mouseCursorPosition: mousePosition, mouseButton: .left)
mouseEvent?.postToPid(33554)
un détail important qui ne s'est pas rendu compte au début est que le bac à sable app doit être désactivé pour que cette API fonctionne.
Poste ici, parce que cette question est le plus haut dans Google sur envoyer, cliquez sur événement dans OS X.
Vous pouvez prendre un coup d'oeil sur le travail exemples de drogue-n-drop et faire une fonction de clic.
une seule note, la fenêtre où vous allez cliquer doit être visible.