7

मैं सिस्टम प्राथमिकताओं में प्रोग्रामेटिक रूप से सहायक उपकरणों के लिए एक्सेस सक्षम करना चाहता हूं। लेकिन समस्या यह है कि मेरा एप्लिकेशन रूट उपयोगकर्ता के रूप में नहीं चल रहा है और मैं नहीं चाहता कि मेरा एप्लिकेशन रूट उपयोगकर्ता के रूप में हो और साथ ही इसमें किसी प्रमाणीकरण के लिए भी नहीं पूछना चाहिए।सहायक डिवाइस के लिए पहुंच सक्षम करें प्रोग्रामेटिक

मैं वैश्विक स्तर पर सभी कीबोर्ड ईवेंट टैप करना चाहता हूं। मैं same.In के लिए CGEventTapCreate() CGEventTapCreate दस्तावेज़ों() API का उपयोग कर रहा हूँ यह उल्लेख किया है कि, घटना नल कुंजी और कुंजी नीचे घटनाओं प्राप्त करता है, तो निम्न स्थितियों में से एक सत्य है:

  1. मौजूदा प्रक्रिया रूट उपयोगकर्ता के रूप में चल रहा है।
  2. सहायक उपकरणों के लिए एक्सेस सक्षम है। मैक ओएस एक्स v10.4 & बाद में, आप सिस्टम प्राथमिकताएं, यूनिवर्सल एक्सेस पैनल, कीबोर्ड व्यू का उपयोग करके इस सुविधा को सक्षम कर सकते हैं।

मैंने सिस्टम वरीयता से सहायक उपकरणों के लिए सक्षम पहुंच की जांच करके मैन्युअल रूप से प्रयास किया और यह मुझे अपेक्षित आउटपुट देता है।

तो प्रमाणीकरण के बिना प्रोग्राम के माध्यम से ऐसा करने का कोई तरीका है और एप्लिकेशन रूट उपयोगकर्ता के रूप में नहीं चल रहा है?

धन्यवाद,

धीरज।

उत्तर

6

आप एक Apple स्क्रिप्ट चला सकते हैं (या ScriptingBridge या जो कुछ भी AppleEvents पर अपने ऑब्जेक्टिव-सी परत में Apple स्क्रिप्ट का अनुवाद है)

यहाँ एक Apple स्क्रिप्ट है कि मैं एक विशेष परियोजना में उपयोग करें कि आप क्या जरूरत के लिए कुछ ऐसा ही है :

on isUIScriptingOn() 
    tell application "System Events" to set isUIScriptingEnabled to UI elements enabled 
    return isUIScriptingEnabled 
end isUIScriptingOn 

on turnUIScriptingOn(switch) 
    tell application "System Events" 
     activate 
     set UI elements enabled to switch 
    end tell 
end turnUIScriptingOn 

on run 
    if not isUIScriptingOn() then 
     display dialog "Enable Access for assistive devices (found in the Universal Access System Preference) must be on for this software to correctly work. This program will enable this setting for you" 
     turnUIScriptingOn(true) 
     display dialog "Access for assistive devices in now on" 
    end if 
end run 
3

आमतौर पर अनुमति के लिए स्पष्ट रूप से नहीं पूछे जाने पर, कम से कम उन्हें बताए बिना उपयोगकर्ता की सिस्टम सेटिंग बदलने के लिए कठोर माना जाता है। अधिकांश ऐप्स जिन्हें इस सेटिंग की आवश्यकता है, यह देखने के लिए जांचें कि यह सक्षम है या नहीं, तो उपयोगकर्ता को इसे चालू करने के लिए कहें।

+0

प्रति-प्रक्रिया के आधार पर इसे सक्षम करने का एक तरीका है। दुर्भाग्यवश मुझे नहीं पता कि यह क्या है, मेरे पास ऐसे ऐप्स हैं जो ऐसा करते हैं और मुझे लगता है कि मुझे कोको डे मेलिंग सूची – hooleyhoop

+0

पर इसके बारे में कुछ देखने को याद है और आप यह देखने के लिए कैसे जांचते हैं कि यह प्रोग्रामेटिक रूप से सक्षम है या नहीं? – Chetan

0

प्रति-प्रक्रिया के आधार पर इसे सक्षम करने का एक तरीका है। दुर्भाग्य से मुझे नहीं पता है कि यह क्या है, मैं यह है कि इस यद्यपि कर क्षुधा है और मुझे लगता है मैं कोको देव मेलिंग सूची पर इसके बारे में कुछ देख याद लगता है

आप प्रति-प्रक्रिया पर यकीन है कि यह इसे सक्षम करना संभव है कर रहे हैं आधार अधिकारों के बिना, आधार अधिकार? और यदि हां, तो क्या सभी घटनाएं कैप्चर होंगी, या केवल प्रक्रिया से संबंधित हैं?

4

ठीक है तुम सब लोग समाधान/कुछ पृष्ठभूमि जानकारी can be found at this address ..

तो, एप्पल टाइगर में एक और समाधान है कि इन समस्याओं को हल करती है के साथ आया था: जादू समारोह AXMakeProcessTrusted। इससे आपके आवेदन के लिए एपीआई सक्षम हो जाएगा और रूट के रूप में चल रही प्रक्रिया से कॉल करने की आवश्यकता है, इसलिए यह सुरक्षित है। यह भी स्वचालित है, इसलिए उपयोगकर्ता को अपने पासवर्ड के लिए पूछने के अलावा, उपयोगकर्ता को कुछ भी करने की ज़रूरत नहीं है। समस्या यह है कि ऐसा लगता है कि कोई भी इसका उपयोग नहीं करता है। मैंने देखा है कि हर तीसरे पक्ष के आवेदन और यहां तक ​​कि ऑटोमेटर बस उपयोगकर्ता को सिस्टम प्राथमिकताओं में बॉक्स को मैन्युअल रूप से जांचने के लिए कहता है।यह कार्यान्वित करने के लिए और अधिक काम है और इसमें एक विशाल अनियंत्रित बग है (एप्लिकेशन को वास्तव में विश्वसनीय होने से पहले इसे फिर से लॉन्च किया जाना चाहिए अद्यतन: # 5711 9 0 9 के रूप में रिपोर्ट किया गया), लेकिन मुझे लगता है कि लोगों को इसका उपयोग करना चाहिए। इसलिए, मैंने सोचा कि मैं आपके ऐप में इसे कार्यान्वित करना आसान बनाने के लिए कोड जारी करूंगा। इसमें एक सहायक एजेंट शामिल है जिसे आप केवल अपनी परियोजना में छोड़ने में सक्षम होना चाहिए।

+0

इसे सही उत्तर के रूप में सेट किया जाना चाहिए। –

+0

दुर्भाग्य से, संग्रहीत ब्लॉग पोस्ट में नमूना कोड शामिल नहीं है। – JWWalker

+0

यह मैवरिक्स में काम नहीं करता है –