2017-01-28 6 views
9

मै मैक्स ऐप से आईफोन सिम्युलेटर पर माउस क्लिक को अनुकरण करने की कोशिश कर रहा हूं जिसके लिए मैं सीजीईवींट्स का उपयोग कर रहा हूं।मैक ऐप से अन्य एप्लिकेशन पर माउस क्लिक को अनुकरण कैसे करें

प्रक्रिया आईडी

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) 

मैं भी देखा है कि यह माउस क्लिक simulates जब ios सिम्युलेटर खिड़की केंद्रित है iPhone सिम्युलेटर के लिए 33554 है और केवल इस टूलबार के लिए काम करता है लेकिन अगर मैं उदाहरण के बदलाव के लिए सिम्युलेटर के लिए नहीं CGPoint के लिए (0,30) यह सिम्युलेटर विकल्प पर क्लिक करेंगे

enter image description here

लेकिन जब मैं CGPoints दे रहा हूँ आईओएस सिम्युलेटर अंदर क्लिक करने के लिए ऐप अपने काम नहीं कर रहा enter image description here

हालांकि, मैं कीबोर्ड घटना पोस्ट करने के लिए

let keyboardDown = CGEvent(keyboardEventSource: nil, virtualKey: 6, keyDown: true) 
let keyboardUp = CGEvent(keyboardEventSource: nil, virtualKey: 6, keyDown: false) 
keyboardDown?.postToPid(33554) 
keyboardUp?.postToPid(33554) 
+1

क्या आपको याद है, वाई-अक्ष को मैकोज़ पर उलट दिया गया है? – Alistra

उत्तर

1

का उपयोग कर आप कहते हैं कि आप कीबोर्ड की घटनाओं पोस्ट करने के लिए सक्षम हैं सिम्युलेटर की कर रहा हूँ, इसलिए शायद एक अनुमति मुद्दा नहीं है, लेकिन आप को क्रियान्वित करने की कोशिश कर सकते अपने उस नियम पर शासन करने के लिए रूट के रूप में कार्यक्रम।

इवेंट निर्देशांक आप जो अपेक्षा करते हैं उससे अलग हो सकते हैं (फ़्लिप?)। आवेदन स्तर पर सभी प्राप्त घटनाओं पर रिपोर्ट करने के लिए अनुरूपित ऐप में कुछ सेट अप करने का प्रयास करें।

इसके अलावा, स्क्रीन समन्वय प्रणाली में निर्देशांक हैं? हो सकता है कि कार्यक्रम सिम्युलेटर द्वारा प्राप्त किया जाए और त्याग दिया जाए क्योंकि इसे वितरित करने के लिए "नीचे" कोई खिड़की नहीं है। सिम्युलेटर विंडो को स्क्रीन के प्रत्येक कोने में ले जाने का प्रयास करें और समन्वय के लिए कुछ (10,10) का उपयोग करें।

आप अंतर्निहित पिंजरे को पाने के लिए NSEvent और CGEvent विधि भी आजमा सकते हैं, जो आपकी आवश्यकताओं के लिए सही ढंग से शुरू किया जा सकता है। यदि यह काम करता है तो आप जो खो रहे हैं उसे काम करना आसान होगा।

आखिरकार, के लिए nil पास करने का प्रयास करें। CGEventSourceRef eventSource = CGEventSourceCreate(kCGEventSourceStateHIDSystemState); की तरह कुछ हो सकता है? मदद पर

अंतिम खाई प्रयास:

मैं एक (पुराने) मैक अनुप्रयोग है कि अन्य कार्यक्रमों के लिए निर्मित माउस घटनाओं डिस्पैच है; शायद इसकी source code कुछ उपयोगी बता सकती है।

अब ... यदि कोई भी काम नहीं करता है तो यह आपके लिए फायदेमंद हो सकता है कि आप वास्तव में क्या करने की कोशिश कर रहे हैं। यह संभव है कि एक बेहतर तरीका है।

0

यहाँ पोस्ट क्योंकि इस सवाल भेजें क्लिक करें घटना पर गूगल में शीर्ष सबसे ओएस एक्स में

आप काम कर रहे examples दवा-एन-बूंद के पर एक नज़र रखना और एक क्लिक समारोह कर सकते है।

केवल एक नोट, विंडो जहां आप क्लिक करने जा रहे हैं, दिखाई देनी चाहिए।

0

आप करीब थे (स्विफ्ट 4):

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

एक महत्वपूर्ण विस्तार है कि पहली बार में नहीं पता था कि एप्लिकेशन सैंडबॉक्सिंग काम करने के लिए इस एपीआई के लिए निष्क्रिय किया जाना चाहिए है।

संबंधित मुद्दे