मैं सी ++ में एक जीयूआई एप्लीकेशन बना रहा हूं। क्या विंडोज़ 10 के नैरेटर को कुछ पाठ बोलने के लिए बनाने का कोई आसान तरीका है? बेशक यह देखते हुए कि यह वर्तमान में सक्रिय है।

एक तरकीब जो कभी-कभी काम आती है, वह है टेक्स्ट फ़ील्ड में कुछ टेक्स्ट का चयन करना और फिर उसे संक्षेप में फोकस करना। परंतु

  • यह हर समय काम नहीं करता
  • फोकस बाहर और पीछे ले जाया जाता है। भले ही यह थोड़े समय के लिए हो, यह आक्रामक है और उपयोगकर्ता जो कुछ भी कर रहा है उसे परेशान कर सकता है
  • टेक्स्ट फ़ील्ड स्क्रीन पर किसी स्थान पर मौजूद होना चाहिए, जो हमेशा वांछित नहीं होता है

यदि संभव हो तो मैं इन तीन मुद्दों के बिना समाधान चाहता हूं।

अन्य स्क्रीन रीडर, विशेष रूप से जॉज़ और एनवीडीए, ऐसा करने के लिए एपीआई प्रदान करते हैं। मैं एक पुस्तकालय का लेखक भी हूं, UniversalSpeech, जो वर्तमान में चल रहे स्क्रीन रीडर को बनाने की अनुमति देता है, यदि कोई हो, तो पाठ बोलने के लिए, अपने आप को पता लगाने की आवश्यकता को सारणित करते हुए कि कौन चल रहा है। यह देखते हुए कि विंडोज 10 के पिछले 3 या 4 रिलीज के साथ नैरेटर में काफी सुधार हुआ है, न केवल मेरे अपने कार्यक्रम में और मेरे विशेष उपयोगकेस के लिए, बल्कि मेरी लाइब्रेरी में सभी के लिए इसका समर्थन करना दिलचस्प होगा।

हालांकि, मुझे कोई दस्तावेज या कुछ भी नहीं मिल रहा है जो मुझे बता रहा है कि क्या वर्णनकर्ता के पास जॉज़ या एनवीडीए के समान एपीआई है। वास्तव में यदि नैरेटर के लिए वर्तमान में ऐसा कोई एपीआई नहीं है, तो माइक्रोसॉफ्ट को एक जोड़ने का सुझाव देना शायद दिलचस्प होगा।

ध्यान दें कि यह प्रश्न इस एक से भिन्न है। जहां उत्तर सीधे भाषण एपीआई का उपयोग करने का सुझाव देता है। स्क्रीन रीडर एपीआई का उपयोग करना और स्पीच एपीआई का सीधे तौर पर बहुत लाभ नहीं है:

  • स्क्रीन रीडर उपयोगकर्ता विशिष्ट आवाज सेटिंग्स (आवाज, दर, पिच, भाषा और क्षेत्रीय उच्चारण, आदि) के लिए उपयोग किए जाते हैं। नियंत्रण कक्ष में सेट की गई डिफ़ॉल्ट सेटिंग्स समान नहीं हो सकती हैं। यह संकेत मिलता है
    • क्या उपयोगकर्ता को नियंत्रण कक्ष में वाक् सेटिंग्स को कॉन्फ़िगर करना चाहिए, सभी अनुप्रयोगों के लिए वैश्विक क्या है; बहुत अच्छा नहीं है
    • और/या किसी व्यावसायिक एप्लिकेशन में एप्लिकेशन-विशिष्ट वाक् सेटिंग का प्रबंधन करना जो भाषण सामग्री के लिए बिल्कुल भी समर्पित नहीं है; उदाहरण के लिए किसी वित्तीय ऐप में वाक् सेटिंग ढूंढना अजीब होगा।
  • स्क्रीन रीडर और स्वतंत्र स्पीच इंजन दोनों का एक साथ उपयोग करने का मतलब है कि दोनों एक ही समय में बोल सकते हैं, जो निश्चित रूप से बेहद कष्टप्रद है। वास्तव में व्यवहार में यह अक्सर होता है, मैं पहले ही परीक्षण कर चुका हूं।

तो, क्या कुछ पाठ बोलने के लिए कथाकार बनाने का एक आसान तरीका है?

मेरा कार्यक्रम सी ++ में है, पुस्तकालय सी में है, इसलिए सिद्धांत रूप में यदि आवश्यक हो तो लोड लाइब्रेरी/गेटप्रोकएड्रेस के माध्यम से मेरे पास पूरे विनापी तक पहुंच है। कृपया कोई C# या VisualStudio-निर्भर समाधान न दें।

धन्यवाद।

0
QuentinC 13 सितंबर 2019, 14:33
1
 – 
user7860670
13 सितंबर 2019, 14:38
@VTT: भाषण संश्लेषण! = स्क्रीन रीडर।
 – 
QuentinC
13 सितंबर 2019, 18:07
आपको स्क्रीन रीडर के एपीआई से बात करने की जरूरत नहीं है, लेकिन ऑपरेटिंग सिस्टम की एक्सेसिबिलिटी एपीआई को लागू करने की जरूरत है। देखें UI Automation and Active Accessibility और पहुंच के लिए ऐप्स विकसित करना। स्क्रीन रीडर को तब "इसे वहां से ले जाना चाहिए"।
 – 
Tsundoku
14 सितंबर 2019, 00:14
अच्छा, ठीक है, बिल्कुल। लेकिन, मैं वेब ऐप्स के लाइव क्षेत्र के बराबर कैसे कर सकता हूं? मेरे पास एक मल्टीलाइन टेक्स्ट फ़ील्ड है और जब वे दिखाई देते हैं तो लाइनें बोली जानी चाहिए।
 – 
QuentinC
14 सितंबर 2019, 16:41
पहले आपको यह मूल्यांकन करने की आवश्यकता है कि क्या UI स्वचालन आपकी आवश्यकता को पूरा कर सकता है। त्वरित परीक्षण के लिए आप Inspect.exe टूल यह देखने के लिए कि क्या यह वेब ऐप के लाइव क्षेत्र का पाठ पढ़ सकता है? फिर आपको अपने स्वयं के एप्लिकेशन को लागू करने के लिए UI ऑटोमेशन तकनीक सीखने की आवश्यकता हो सकती है।
 – 
Rita Han
16 सितंबर 2019, 11:24

2 जवाब

सबसे बढ़िया उत्तर

बहुत दिनों बाद मैं अपने ही प्रश्न का उत्तर देता हूँ !

वास्तव में, वर्णनकर्ता को कुछ बोलने के लिए सबसे आसान तरीका शायद यह है:

  1. कुछ लेबल को एक जीवंत क्षेत्र के रूप में परिभाषित करें
  2. जब नैरेटर को कुछ बोलना हो, तो लेबल में टेक्स्ट बदलें और फिर एक अपडेट नोटिफिकेशन भेजें

एक लेबल को एक लाइव क्षेत्र में बदलना और जब भी टेक्स्ट में बदलाव की व्याख्या की जाती है तो एक अधिसूचना भेजना यहां बताया गया है: https://docs.microsoft.com/en- us/accessibility-tools-docs/items/win32/text_livesetting

लाइव सेटिंग को 0=बंद, 1=विनम्र और 2=मुखर पर सेट किया जा सकता है। विनम्र और मुखर का अर्थ वही है जो WAI ARIA में है। हालांकि वर्तमान (अप्रैल 2021) के रूप में, जैसे ही लेबल का पाठ बदल दिया जाता है, कथाकार हमेशा भाषण को बाधित करता है, यहां तक ​​​​कि विनम्र मोड में भी। मुखर मोड में जो परिवर्तन होता है वह यह है कि पाठ सामान्य कीबोर्ड नेविगेशन के कारण रुकावटों के खिलाफ भी प्राथमिकता लेता है, यानी आप टैब, तीर कुंजियों आदि को दबाते समय यह नहीं सुन सकते हैं कि इस कारण से, मैं इसकी बिल्कुल भी अनुशंसा नहीं करता हूं।

यह भी ध्यान दें कि लाइव सेटिंग केवल स्टैटिक टेक्स्ट कंट्रोल (win32 STATIC विंडो क्लास) पर काम करती है। टेक्स्ट फ़ील्ड और टेक्स्ट क्षेत्रों (win32 EDIT विंडो क्लास) पर लागू होने पर इसे पूरी तरह से अनदेखा कर दिया जाता है।

लाइव सेटिंग वाला लेबल तब भी काम करता है जब उसे ऑफ-स्क्रीन रखा जाता है या छुपाया जाता है।

0
QuentinC 23 अप्रैल 2021, 17:37

जहां तक ​​मुझे पता है, माइक्रोसॉफ्ट नैरेटर डेवलपर्स के लिए एपीआई का खुलासा नहीं करता है, और आप इसके लिए फीडबैक ऐप विंडोज 10 पर।

मैं एक जीवित क्षेत्र के समान व्यवहार प्राप्त करना चाहता हूं, यानी एसआर द्वारा कुछ पाठ पढ़ा गया है क्योंकि यह एक बहु-समृद्ध टेक्स्ट फ़ील्ड के नीचे दिखाई देता है, लेकिन मूल जीयूआई ऐप में। जानकारी के लिए, मैं WXWidgets का उपयोग कर रहा हूं।

आप रिच टेक्स्ट फ़ील्ड के प्रॉपर्टी परिवर्तन की सदस्यता लेने के लिए UI ऑटोमेशन ईवेंट का उपयोग कर सकते हैं ताकि टेक्स्ट अपडेट होने पर आपको सूचित किया जा सके। और चूंकि आप तृतीय-पक्ष नियंत्रण का उपयोग कर रहे हैं, इसलिए आपको किसी ऐसे तृतीय पक्ष नियंत्रण के लिए प्रदाताओं को भी लागू करने की आवश्यकता है जिसमें प्रदाता शामिल नहीं है। और आपके संदर्भ के लिए UI स्वचालन प्रदान करता है और UI स्वचालन ईवेंट के बारे में लिंक नीचे दिए गए हैं:

यूआई ऑटोमेशन इवेंट्स अवलोकन

यूआई ऑटोमेशन प्रदाता अवलोकन

0
Fei Xue - MSFT 25 सितंबर 2019, 06:12
आप रिच टेक्स्ट फ़ील्ड के संपत्ति परिवर्तन की सदस्यता के लिए UI स्वचालन ईवेंट का उपयोग कर सकते हैं ताकि टेक्स्ट अपडेट होने पर आपको सूचित किया जा सके => ऐसा लगता है कि आपने समस्या को उल्टा समझ लिया है: मुझे पता है कि टेक्स्ट कब अपडेट किया गया है, क्योंकि मैं मैं इसे अपने ऐप में खुद अपडेट कर रहा हूं। मैं चाहता हूं कि स्क्रीन रीडर को मेरे परिवर्तनों के बारे में सूचित किया जाए। संभवत: एसआर को इसके विपरीत के बजाय मेरी सदस्यता लेनी चाहिए।
 – 
QuentinC
25 सितंबर 2019, 19:16
आप सही थे। जैसा कि मैंने उल्लेख किया है कि Microsoft नैरेटर आपके द्वारा वर्णित परिदृश्य का समर्थन नहीं करता है। आपको स्क्रीन रीडर (नैरेटर) को स्वयं लागू करने की आवश्यकता है और यूआई तत्व की सदस्यता लेने की अनुमति देने के लिए एपीआई को अन्य ऐप्स (आपके यूआई ऐप) में उजागर करना होगा या आप नैरेटर के लिए फीडबैक सबमिट कर सकते हैं।
 – 
Fei Xue - MSFT
26 सितंबर 2019, 06:27
तब एरिया-लाइव क्षेत्र कैसे काम करते हैं? स्क्रीन रीडर को क्या सूचित करता है ? यदि नैरेटर वेब ब्राउज़र में लाइव क्षेत्रों का समर्थन करता है, तो मेरे लिए मेरे जीयूआई ऐप में परिवर्तनों के स्क्रीन रीडर को समान रूप से सूचित करने का तरीका नहीं होना चाहिए? यदि प्रभावी रूप से कुछ भी नहीं है, तो आप शायद सच हैं, मुझे इसे Microsoft को सुझाने की आवश्यकता है। उस स्थिति में, कुछ करने के अवसरों को अधिकतम करने के लिए मुझे क्या करना चाहिए/करना चाहिए? क्या संपर्क करने के लिए और अधिक विशिष्ट कथावाचक या अभिगम्यता दल हैं ?
 – 
QuentinC
27 सितंबर 2019, 00:28
सुझाव के लिए धन्यवाद, और Microsoft नैरेटर के लिए कोई भी प्रतिक्रिया जिसे आप यह लिंक सीधे
 – 
Fei Xue - MSFT
4 अक्टूबर 2019, 05:34