저는 쿼츠 이벤트를 다른 앱에 게시하기 위해 AppleScript에서 실행되는 간단한 코코아 앱을 작성하고 있습니다.Swift 애플리케이션 실행 후 Quartz 이벤트를 게시하는 방법은 무엇입니까?
사용자 인터페이스가 필요 없으므로 인터페이스 작성기에서 창을 삭제하고 응용 프로그램 대리인으로부터 출력 창을 삭제했습니다. 개인 메소드 postClickEvent()를 메소드 applicationDidFinishLaunching (_ :)에서 호출합니다. mouseCursorPosition (x : 0, y : 0)에서 nil mouseEventSource로 leftMouseDown 및 leftMouseUp CGEvents를 초기화하고 cghidEventTap 위치에 게시합니다.
import Cocoa
@NSApplicationMain
클래스 AppDelegate에 : NSObject의, NSApplicationDelegate 내가 왼쪽 상단 및 오픈 클릭 출시 직후로 응용 프로그램을 기대
{
func applicationDidFinishLaunching(_ aNotification: Notification) {
postClickEvent()
}
func applicationWillTerminate(_ aNotification: Notification) {
}
private func postClickEvent() {
let point = CGPoint(x: 0, y: 0)
let leftMouseDownEvent = CGEvent(mouseEventSource: nil, mouseType: .leftMouseDown, mouseCursorPosition: point, mouseButton: .left)
let leftMouseUpEvent = CGEvent(mouseEventSource: nil, mouseType: .leftMouseUp, mouseCursorPosition: point, mouseButton: .left)
leftMouseDownEvent?.post(tap: .cghidEventTap)
leftMouseUpEvent?.post(tap: .cghidEventTap)
}
} Apple 메뉴가 있지만 그것은 발생하지 않습니다.
몇 가지 가능한 해결책을 생각해 볼 수 있습니다.
- 낮은 수준의 사용자 입력 이벤트를 게시 할 수있는 권한을해야 할 수도 있습니다 디버거에서 실행되는 응용 프로그램. Quartz 이벤트 게시 권한을 앱에 필요합니까?
- 응용 프로그램이 시작된 후 알림 센터에서 applicationDidFinishLaunching (_ :) 메서드를 보내고 을 초기화했지만 첫 번째 이벤트를 받기 전에 메서드를 보냅니다. 어쩌면 Application Delegate의 다른 메서드에서 postClickEvent()를 호출해야합니까?
- 이벤트 초기화시 이벤트 소스가 필요할 수 있습니다. 그러나 이벤트 소스가 가능한 모든 이벤트 소스 상태 ID ( ) 중 하나에 대해 init (stateID :)으로 초기화되면 이벤트 소스가 변경되지 않습니다.
- 전체 화면 Xcode 이후에 앱이 포커스를받을 때 이벤트가 게시 될 수 있으므로 Apple 메뉴 항목 인 을 너무 일찍 클릭하십시오. 그러나 10 초 동안 스레드를 잠그면 변경되지 않습니다.
내 코드는 Mac (MacOS 10.12)에서 작동합니다. AppleScript에서 이벤트를 게시 할 수 없습니까? – Willeke
내 macOS 버전은 10.13.1입니다. AppleScript는 끌어서 놓기 이벤트를 게시 할 수 없으므로 신속한 서브 루틴을 호출하려고합니다. 표준 macOS Cocoa App 템플릿 또는 다른 곳의 applicationDidFinishLaunching (_ :)에서 postClickEvent()를 호출 하시겠습니까? 앱 권한 또는 입력 접근성 설정을 변경 했습니까? – Wojciech