मैं माफी माँगता हूँ अगर मैं अपनी व्याख्याओं को बार-बार दोहराता हूँ, लेकिन मुझे यह मुद्दा बहुत जटिल लगता है, इसलिए मैंने यह सुनिश्चित करने की कोशिश की कि यह पाठकों के लिए प्रासंगिक हो।
हालांकि यह ज्ञात नहीं है कि यह बग है या इसका उद्देश्य था, हम इसे हार्ड तर्क के बजाय DDE संदेश बनाकर डायनामिक डेटा एक्सचेंज प्रोटोकॉल (DDE) का उपयोग करके "उसी" उदाहरण में खोलने के लिए बाध्य कर सकते हैं 1 "फ़ाइल को निष्पादित करते समय खोलने के लिए उस उदाहरण के लिए फ़ाइल की ओर इशारा करते हुए। (हालांकि, DDE का उपयोग कठिन तर्क के साथ भी किया जाता है)।
इस मामले में, डीडीई संदेश का उपयोग फ़ाइल खोलने के लिए कार्यक्रम को बताने के लिए किया जाता है। निष्पादित हर फ़ाइल के लिए यह वास्तव में हर बार एक नया उदाहरण बनाता है। लेकिन जब डीडीई प्रोटोकॉल का उपयोग किया जाता है, तो यह जांच करता है कि क्या कोई उदाहरण पहले से ही बना है और यदि ऐसा है तो यह पाया गया डीडीई संदेश पहली बार मिले उदाहरण से बाहर निकलता है और इस तरह भ्रम पैदा करता है कि सभी फाइलें एक ही उदाहरण में खुलती हैं क्योंकि यह तात्कालिक है।
अटकलों
गुणकों के उदाहरणों में खुलने वाली फ़ाइलों के मुद्दे का एक और उदाहरण पहले से लोड किए जाने के साथ एक उदाहरण को लोड करने की संभावना है। पहले एक दूसरे उदाहरण के निष्पादन समय अंतर के बीच की प्रवृत्ति के रूप में निष्पादन के बीच का समय है, यह एक उदाहरण प्राप्त करने के लिए बढ़ जाती है और के रूप में यह घट जाती है दो उदाहरणों उपज देता है। इससे पता चलता है कि यदि कोई अन्य फ़ाइल निष्पादित की जाती है, तो उसी उदाहरण में एक नई फ़ाइल खोलने के लिए पहले उदाहरण को लोड या "तैयार" किया जाना चाहिए, और यदि ऐसा नहीं है तो वह फ़ाइल को स्वयं खोल देगा।
ऐसा लगता है कि जब फ़ाइल पथ का उपयोग प्रोग्राम के तर्क के रूप में किया जाता है, तो यह केवल इस प्रवृत्ति का अनुसरण करता है:
जब पहली बार से पहले उदाहरणों को बनाने के लिए एक तर्क के रूप में उपयोग किया जाता है यदि पहले तैयार है (या यदि गैर-प्रथम यह देखते हैं कि तैयार है), तो गैर-प्रथम उदाहरण तर्क को पहले DDE संदेश के रूप में रिले करने में सक्षम प्रतीत होता है।
हालाँकि, यदि हम प्रोग्राम को निष्पादित करते हैं और फ़ाइल को खोलने के लिए DDE संदेश का उपयोग करते हैं, तो यह DDE प्रोटोकॉल का तुरंत पालन करने लगता है कि क्या पहला उदाहरण तर्क के माध्यम से DDE संदेश को स्वीकार करने के लिए तैयार है या नहीं। पहले उदाहरण के लिए तैयार होने या न होने की संभावना इस बात पर निर्भर करती है कि क्या गैर-पहला पहला उदाहरण तैयार होने के रूप में देखता है, और यदि ऐसा नहीं होता है तो यह पहले डीडीई संदेश नहीं भेजेगा, जो केवल तर्क के माध्यम से खुलने पर होता है। । गैर-पहले को "तैयार नहीं" या "गैर-मौजूद" के रूप में देखने की अटकलें इस तथ्य से सुझाई जाती हैं कि DDE संदेश (गैर-पहले से) तब स्वीकार किए जाते हैं जब: गैर-पहले के माध्यम से निष्पादित नहीं किया जाता है एक तर्क सम्मेलन "% 1"; और यह एक डीडीई संदेश के माध्यम से खोलने के लिए कहा गया है।
जैसा कि मेरी अटकलें हैं: इन अनुप्रयोगों के लिए कोड यह निर्धारित करने के लिए कुछ अस्पष्ट विधि का उपयोग करता है कि क्या एक और उदाहरण "तैयार" है और यदि ऐसा है तो एक तर्क का उपयोग करने पर DDE प्रोटोकॉल का उपयोग करेगा। यह एक अलग विधि का उपयोग करने के लिए लगता है जब यह निर्धारित करने के लिए DDE प्रोटोकॉल प्राप्त करता है, तो इसे दूसरे उदाहरण पर भेजने के लिए। यह छद्मकोड के प्रभाव में दिखाई देगा:
if(argrument.wasUsed()){
// Office's obscure condition
if(Office.thinksInstanceIsReady(anotherInstance)){
// Use DDE Protocol
if(anotherInstance.exists()){ // already knew that
sendDDEmessage(anotherInstance);
exitThisInstance();
}
} else {
selfFollowDDEmessage(); // Leave open this instance
}
if(givenDDEMessage()){
// Use DDE Protocol
if(anotherInstance.exists()){
sendDDEmessage(anotherInstance);
exitThisInstance();
} else {
selfFollowDDEmessage();
}
}
यह बताने का कोई तरीका नहीं है कि क्या यह बग है या इसका मकसद किसी कारण से अस्पष्ट होना है, बिना प्रोग्रामर हमें बताए।
प्रण
हम कुछ फ़ाइल एक्सटेंशन के निष्पादन को अब एक तर्क के रूप में निष्पादित की जा रही फ़ाइल पथ ("% 1") को नहीं भेजना चाहते हैं, बल्कि DDE संदेश की सामग्री के लिए निष्पादित होने वाले कार्यक्रम को बता सकते हैं, जिनमें से एक फ़ाइल खोलने के लिए एक अनुरोध शामिल है, जो मौजूद होने पर पहले से मौजूद उदाहरण के लिए इसे रिले कर देगा और यदि इसका उपयोग नहीं करता है। कौन सा अनुमान है, इन अनुप्रयोगों की अस्पष्ट आवश्यकताओं को एक और उदाहरण के लिए "तैयार" के रूप में देखने के लिए बायपास करेगा यदि फ़ाइल पथ का एक तर्क उपयोग किया जाता है।
ये सभी फ़ाइल एक्सटेंशन क्लास कीज़ से संबंधित हैं, जिन्हें x
निम्न के साथ प्रतिस्थापित किया जाएगा :
वर्ड के लिए
FILEEXT CLASS NAME (x)
.doc* Word.Document.8
.docm† Word.DocumentMacroEnabled.12
.docx* Word.Document.12
.dot Word.Template.8
.dotm† Word.TemplateMacroEnabled.12
.dotx† Word.Template.12
.odt Word.OpenDocumentText.12
.rtf† Word.RTF.8
.wbk Word.Backup.8
.wiz Word.Wizard.8
.wll Word.Addin.8
एक्सेल के लिए
FILEEXT CLASS NAME (x)
.csv* Excel.CSV
.ods Excel.OpenDocumentSpreadsheet.12
.slk Excel.SLK
.xla Excel.Addin
.xlam† Excel.AddInMacroEnabled
.xld Excel.Dialog
.xlk Excel.Backup
.xll Excel.XLL
.xlm Excel.Macrosheet
.xls* Excel.Sheet.8
.xlsb† Excel.SheetBinaryMacroEnabled.12
.xlshtml Excelhtmlfile
.xlsm† Excel.SheetMacroEnabled.12
.xlsx* Excel.Sheet.12
.xlt† Excel.Template.8
.xlthtml Excelhtmltemplate
.xltm† Excel.TemplateMacroEnabled
.xltx† Excel.Template
.xlw Excel.Workspace
.xlxml Excelxmlss
* सबसे महत्वपूर्ण / आम फ़ाइल एक्सटेंशन जो न्यूनतम के रूप में किया जाना चाहिए। व्यक्तिपरक।
† माध्यमिक सबसे महत्वपूर्ण / सामान्य फ़ाइल एक्सटेंशन जो न्यूनतम के रूप में किया जाना चाहिए। व्यक्तिपरक।
इन सूचियों को कमांड-लाइन के माध्यम से दोहराया जा सकता है: आधिकारिक संक्षिप्त नाम (केस-संवेदी) के साथ assoc | findstr Word
प्रतिस्थापित Word
करना।
आप सभी के पास ऐसा करने का विकल्प है यदि आपको लगता है कि यह आवश्यक है। यदि आप जितना अधिक करना चाहते हैं, आप उन वैकल्पिक चरणों का पालन करना चाहते हैं जो मैं प्रदान करूंगा, जिससे आपको आवश्यक कार्य कम करना चाहिए।
आप नीचे दिए गए प्रत्येक रजिस्ट्री कुंजी के लिए निम्न निर्देशों का पालन x
अपनी पसंद के इसी वर्ग (तों) के साथ कर सकते हैं:
HKEY_CLASSES_ROOT\x\shell\Open
HKEY_CLASSES_ROOT\x\shell\OpenAsReadOnly
(उदाहरण: HKEY_CLASSES_ROOT\Excel.Sheet.12\shell\Open
)
एक बार फिर, OpenAsReadOnly
कुंजी, विकल्प है यह तब तैयार होगा जब फ़ाइल को ऐसे निष्पादित किया जाता है कि यह केवल-पढ़ने के लिए होगा।
एक छोटी सी सावधानी - एक बैकअप
संशोधन के पहले रजिस्ट्री मान क्या थे, यह याद रखने के लिए, आप कुंजी शाखा पर राइट-क्लिक करना चाहते हैं HKEY_CLASSES_ROOT
, और संदर्भ मेनू के तहत "निर्यात" पर क्लिक करें और पंजीकरण फ़ाइल को किसी स्थान पर सहेजें। मामले में डॉक्टर ब्राउन कहते हैं, "हमें वापस जाने की आवश्यकता है," आप बस इसे निष्पादित करके और निर्देशों का पालन करके रजिस्ट्री कुंजी को आयात कर सकते हैं।
वैकल्पिक रूप से, आप इसे भी चला सकते हैं ताकि आपको याद रहे कि command
छोटी गलतियों को ठीक करने के लिए मूल्य और वर्ग के नाम क्या थे:
assoc>>fileexts.txt
जिसका उपयोग करके फ़िल्टर किया जा सकता है type fileexts.txt | findstr Word
ftype>>classnames.txt
जिसका उपयोग करके फ़िल्टर किया जा सकता है type classnames.txt | findstr Word
अनुदेश
जैसा कि आप करना चाहते हैं, ऊपर सूचीबद्ध प्रत्येक प्रमुख मूल्य के लिए इनका पालन किया जाएगा।
अपने पसंदीदा रजिस्ट्री संपादक में प्रवेश करें या regedit
आप संशोधित करना चाहते हैं कक्षा में जाएं।
बुलाया कुंजी में दर्ज command
करें, (Default)
मूल्य पर राइट-क्लिक करें , और संदर्भ मेनू के तहत "संशोधित करें" पर क्लिक करें।
वर्तमान में सेट वही होना चाहिए जो इसके द्वारा निष्पादित किया गया था ftype | findstr Word
बनने के लिए, अंतरिक्ष सहित मूल्य के अंत में प्रत्यक्ष तर्क को हटाने के लिए इसे बदलें :
"C:\Program Files\Microsoft Office\Root\Office16\EXCEL.EXE"
(एक्सेल 64-बिट के लिए)
"C:\Program Files\Microsoft Office\Root\Office16\WINWORD.EXE"
(वर्ड 64-बिट के लिए)
"C:\Program Files (x86)\Microsoft Office\Root\Office16\WINWORD.EXE"
(शब्द 32-बिट के लिए)
"C:\Program Files (x86)\Microsoft Office\Root\Office16\EXCEL.EXE"
(एक्सेल 32-बिट के लिए)
कुंजी में दर्ज करें ddeexec
(यदि यह मौजूद नहीं है, तो कुंजी बनाएं) जो कुंजी के बगल में होगी command
, (Default)
मूल्य पर राइट-क्लिक करें , और संदर्भ मेनू के तहत "संशोधित करें" पर क्लिक करें, और बनने के लिए मूल्य निर्धारित करें:
[REM _DDE_Direct][FileOpen("%1")]
- (शब्द के लिए)
[open("%1")]
- (एक्सेल के लिए)
नीचे ddeexec
एक नई कुंजी topic
(यदि यह मौजूद नहीं है) नामक एक कुंजी बनाएं , तो (Default)
मूल्य पर राइट-क्लिक करें , और संदर्भ मेनू के तहत "संशोधित करें" पर क्लिक करें, और बनने के लिए मान सेट करें system
(यदि पहले से नहीं है)।
संशोधनों के बाद आपको इन परिवर्तनों को रजिस्ट्री में बनाने के बाद एक उन्नत कमांड प्रॉम्प्ट या शेल के साथ इसे चलाने के लिए shell32.dll ताज़ा करना पड़ सकता है:
regsvr32 /i shell32.dll
यह एक विंडोज 10 कार्यालय 2016 संस्करण 16.0.8625.2127 पर परीक्षण किया गया है
वैकल्पिक शॉर्टकट
आप फ़ाइल एक्सटेंशन (जैसे HKEY_CLASSES_ROOT\.xlsx
) के लिए कुंजी पर भी जा सकते हैं और एक एकल वर्ग के लिए "(डिफ़ॉल्ट)" मान को संशोधित कर सकते हैं, यह दृष्टिकोण, यदि पीछा किया जाता है, तो एक ही वर्ग मान (जैसे Excel.Sheet.12
) के लिए कई फ़ाइल एक्सटेंशन को इंगित कर सकते हैं जो आप केवल उस वर्ग को एक बार DDE संदेश के साथ संशोधित करना होगा। यदि आप ऐसा करते हैं, तो उस रजिस्ट्री शाखा के अंदर वर्ग नाम के सभी दोहराव को भी फिर से नाम देना चाहिए। हालांकि, इस तरह की सिफारिश नहीं की जाती है, क्योंकि यह आसानी से टूट सकता है, और अगर आपको समय बचाने के लिए सभी फ़ाइल एक्सटेंशन करने थे तो यह किया जाना चाहिए।
Sidenotes:
/o
तर्क यूआरएल के लिए एक तर्क है, इसलिए के रूप में यह शायद ही कभी पारित हो जाता है इस कार्यक्षमता कम करने में एक बड़ी चिंता का विषय नहीं है। हालाँकि, यदि आप चाहें, तो आप (Default)
मानों को समायोजित करते समय तर्क के इस हिस्से को छोड़ सकते हैं।
मैं इसे एक समुदाय विकी बनाने पर विचार कर रहा हूं, क्योंकि यह बहुत ही सट्टा है और अधूरा भी है (यदि वर्ड और एक्सेल केवल यही नहीं थे)। कृपया इस पर एक राय दें।