मैंने एक प्री-लॉगिन एजेंट बनाया है जो कीबोर्ड को सिमुलेट करने के लिए CGEventPost का उपयोग करता है। एफवाईआई मैं टीमव्यूअर के समान रिमोट कंट्रोल ऐप विकसित कर रहा हूं।लॉगिन विंडो मैक ओएस में CGEventPost का उपयोग करके कीबोर्ड और माउस ईवेंट अनुकरण कैसे करें?
कीबोर्ड
CGEventRef keyEvent = CGEventCreateKeyboardEvent(NULL, keyCode, down) ;
CGEventPost(kCGHIDEventTap, keyEvent) ;
CFRelease(keyEvent) ;
माउस
CGEventRef event = CGEventCreateMouseEvent(eventSource, eventType, mouseLocation, mouseButton);
CGEventPost(kCGHIDEventTap, event);
CFRelease(event);
पूर्व-लॉगिन लांच एजेंट
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>my app label</string>
<key>LimitLoadToSessionType</key>
<string>LoginWindow</string>
<key>RunAtLoad</key>
<true/>
<key>WorkingDirectory</key>
<string>My app directory</string>
<key>ProgramArguments</key>
<array>
<string>app absolute path</string>
<string>service</string>
<string>myservice</string>
</array>
<key>KeepAlive</key>
<true/>
</dict>
</plist>
CGEventPost काम नहीं कर रहा है, मैं प्रवेश के बाद कंसोल लॉग में निम्न प्राप्त
मैंने क्रोमियम के रिमोट कंट्रोल (जिसमें कीबोर्ड और माउस सिमुलेशन काम कर रहा है) स्रोत कोड खोजा है। वे कीबोर्ड के लिए CGEventPost का उपयोग करते हैं, लेकिन यह लॉगिन विंडो में काम करता है।
https://cs.chromium.org/chromium/src/remoting/host/input_injector_mac.cc?rcl=0&l=42
वे विशेषाधिकार प्राप्त सहायक उपकरण निर्देशिका में श फ़ाइल का उपयोग और सेवा को लोड करने के लिए उपयोग करने के लिए लगता है, मैं विशेषाधिकार प्राप्त सहायकों उपकरण में हमारी सेवा डाल करने की कोशिश की, लेकिन अभी भी घटना से निपटने में विफल रहता है।
अस्वीकृत एपीआई CGPostMouseEvent, CGPostKeyBoardEvent बिना किसी समस्या के काम करते हैं, लेकिन वास्तव में यह जानना चाहेंगे कि गैर-बहिष्कृत कीबोर्ड एपीआई क्रोमियम में कैसे काम करता है।
के लिए प्रोजेक्ट फ़ाइल का संदर्भ लें बस यह कहना चाहते हैं कि ऑर्डर महत्वपूर्ण है –
आप महोदय, मेरे उद्धारकर्ता हैं! – Nidhoegger