मैं एक शेल संदर्भ मेनू आइटम कैसे बना सकता हूं जो तर्कों के रूप में कई फाइलें लेता है?


11

एक विंडोज़ शेल संदर्भ मेनू आइटम बनाना जो एक फ़ाइल को तर्क के रूप में लेता है आसान है। इस प्रश्न को एक उदाहरण के लिए देखें ।

हालाँकि, आप एक संदर्भ मेनू आइटम कैसे बनाते हैं जो कई फ़ाइलों को तर्क के रूप में लेता है? कहते हैं, एक अलग-मर्ज टूल के लिए (मेरे मामले P4Merge में), हालांकि एक ही तकनीक अन्य अनुप्रयोगों के लिए भी लागू होगी इसमें कोई संदेह नहीं है।

मैंने P4Merge को इंस्‍टॉल किया है, लेकिन यह आइटम को संदर्भ मेनू में स्वचालित रूप से नहीं जोड़ता है इसलिए मुझे इसे मैन्युअल रूप से करना होगा।

जब मैंने प्रयोग करने की कोशिश की:

"C:\Program Files\Perforce\p4merge.exe" %1 %2

कमांड लाइन के रूप में मुझे एक त्रुटि मिली:

त्रुटियां: कम से कम दो फाइलों की जरूरत है। केवल एक फ़ाइल नहीं खोल सकता। P4Merge को 0, 2, या 3 फ़ाइलों की आवश्यकता होती है।

जब मैंने प्रयोग करने की कोशिश की:

"C:\Program Files\Perforce\p4merge.exe" %0 %1

कमांड लाइन के रूप में इसने P4Merge के दो उदाहरण खोले, प्रत्येक फ़ाइल के लिए एक।

ऐसा प्रतीत होता है कि सही फ़ाइल नाम% 0 और% 1 के माध्यम से पारित किए जा रहे हैं, लेकिन P4Merge आवेदन के एक अलग उदाहरण को प्रत्येक के लिए निष्पादित किया जा रहा है।

वर्तमान में मेरे पास SourceGear का DiffMerge टूल है जिसमें शेल संदर्भ मेनू में एक आइटम है और यह खूबसूरती से काम करता है, क्योंकि मैं दो फ़ाइलों का चयन करने और उन पर एक अंतर चलाने के लिए संदर्भ मेनू आइटम का उपयोग करने में सक्षम हूं। मैंने रजिस्ट्री को खोजने की कोशिश कर रहा हूं कि क्या तर्क वितर्क का उपयोग करता है, लेकिन मैं एक डिफमार्गर कमांडलाइन नहीं खोज सका जिसमें तर्क शामिल थे।


3
जैसा कि आपको पता चला है, एक सरल रजिस्ट्री हैक के साथ आप जो चाहते हैं वह करने का कोई तरीका नहीं है। केवल% 1 है क्योंकि एक्सटेंशन केवल एक ऑब्जेक्ट पर लागू होता है और कई ऑब्जेक्ट्स के लिए अलग-अलग निष्पादित होता है। इसके लिए फुल-ऑन शेल-एक्सटेंशन की प्रोग्रामिंग की आवश्यकता होती है। हालांकि कुछ प्रोग्राम / शेल-एक्सटेंशन हैं जो आपको रजिस्ट्री हैक की तुलना में कुछ अधिक उन्नत संदर्भ-मेनू सामान करने देंगे। (केवल एक ही मुझे याद आ सकता है कि वह MMM है ।) दुर्भाग्य से, मुझे लगता है कि वे कई वस्तुओं को छोड़ने की अनुमति देने के बजाय आपको सबमेनस बनाने के लिए सीमित कर सकते हैं।
Synetech

जवाबों:


20

आप SendTo मेनू में प्रोग्राम को जोड़ने का भी प्रयास कर सकते हैं।


हाँ, यह अच्छी तरह से काम करता है।
Synetech

1
पूरी तरह से काम किया। विंडोज 7 में SendTo मेनू में एप्लिकेशन को कैसे जोड़ा जाए, इसके निर्देश यहां दिए गए हैं। किसी भी कमांड-लाइन पैरामीटर को जोड़ने की आवश्यकता नहीं थी, बस एप्लिकेशन शॉर्टकट को% APPDATA% \ Microsoft \ Windows \ SendTo फ़ोल्डर में छोड़ दिया गया था। Windows Explorer में वापस, दो फ़ाइलों का चयन करने के बाद राइट-क्लिक करने और Send To> P4Merge का चयन करने से चयनित फ़ाइलों पर एक अलग प्रदर्शन हुआ।
साइमनट्यूसी

4

उत्तर के लिए ब्राउजिंग करने से लगता है कि कोई साधारण फिक्स नहीं है और शेल एक्सटेंशन की जरूरत है। DiffMerge के लिए रजिस्ट्री प्रविष्टियों को फिर से देखते हुए, यह एक शेल एक्सटेंशन का उपयोग करता प्रतीत होता है: DiffMergeShellExtension64.dll। यदि P4Merge में ऐसा शेल एक्सटेंशन नहीं है, तो यह एकमात्र तरीका है जो मुझे लगता है कि मैं इसे विंडोज एक्सप्लोरर के संदर्भ मेनू में सही ढंग से काम कर सकता हूं।

कोड प्रोजेक्ट में शेल एक्सटेंशन्स श्रृंखला लिखने के लिए पूर्ण इडियट की गाइड शेल एक्सटेंशन लिखने के लिए एक उपयोगी गाइड है। श्रृंखला का भाग II एक विस्तार लिखने के बारे में है जो एक ही बार में कई फ़ाइलों को संभालता है (वास्तव में मुझे जो चाहिए)।

चेतावनी: शेल एक्सटेंशन्स लिखने के लिए पूरा इडियट गाइड सी और कॉम, एटीएल (एक्टिव टेम्प्लेट लाइब्रेरी) और एमएफसी (माइक्रोसॉफ्ट फाउंडेशन फाउंडेशन) का उपयोग करता है। इसलिए शेल एक्सटेंशन लिखना, यदि आप उन तकनीकों से परिचित नहीं हैं, तो एक लंबी और संभावित रूप से कठिन प्रक्रिया होने जा रही है; यह निश्चित रूप से ऐसा कुछ नहीं है जिसे आप एक घंटे में कर सकते हैं।


2

आप इसे मेरे कार्यक्रम के संदर्भ-मेनू-लांचर (एकलता) के साथ कर सकते हैं :

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\SystemFileAssociations\.txt\Shell\p4merge]
"MultiSelectModel"="Player"

[HKEY_CLASSES_ROOT\SystemFileAssociations\.txt\Shell\p4merge\Command]
@="\"d:\\singleinstance.exe\" %1 \"C:\\Program Files\\Perforce\\p4merge.exe\" $files --si-timeout 400"

कृपया .exeअपने उत्तरों में फाइलों को सीधे लिंक न करें ताकि यह स्पष्ट हो सके कि एक स्वचालित डाउनलोड शुरू हो जाएगा।
DavidPostill

एक आकर्षण की तरह काम करता है, धन्यवाद। क्या किसी फ़ाइल प्रकार के साथ एकल फ़ाइल अनुप्रयोग को संबद्ध करने का कोई तरीका है, बिना किसी फ़ाइल प्रकार के फ़ाइल संघों को व्यक्तिगत रूप से जोड़े बिना? उदाहरण के लिए, मैं वर्तमान में XML फ़ाइलों, एसक्यूएल स्क्रिप्ट्स, कॉन्फिग फाइलों, * .cs फाइलों, .ignignore फाइलों, और अन्य जैसी चीजों की तुलना करने के लिए डिफमार्गर का उपयोग करता हूं।
साइमनट्यूसी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.