विंडोज एक्सप्लोरर में प्रोग्रामेटिक रूप से एकाधिक फाइलों का चयन करें

मैं विंडोज एक्सप्लोरर में एक फ़ाइल को प्रदर्शित और चुन सकता हूं:

explorer.exe /select, "c:\path\to\file.txt"

हालांकि, मैं एक से अधिक फाइलों को चुनने का तरीका नहीं समझ सकता। चयन के किसी भी क्रमपरिवर्तन में मैंने काम करने की कोशिश नहीं की है।

नोट: मैंने इन पृष्ठों को दस्तावेज़ों के लिए देखा, न तो मदद की।

https://support.microsoft.com/kb/314853
http://www.infocellar.com/Win98/explorer-switches.htm

0
ro fr bn

6 उत्तर

यह explorer.exe के माध्यम से नहीं किया जा सकता है

0
जोड़ा

यह उन प्रश्नों में से एक है जहां यह विचार करना अच्छा हो सकता है कि आप क्या हासिल करने की कोशिश कर रहे हैं, और क्या कोई बेहतर तरीका है।

कुछ और संदर्भ जोड़ने के लिए - हमारी कंपनी एक सी # क्लाइंट एप्लिकेशन विकसित करती है, जो उपयोगकर्ताओं को फ़ाइलों को लोड करने और उनके साथ सामान करने की अनुमति देती है, जैसे कि आईट्यून्स आपकी एमपी 3 फ़ाइलों को डिस्क पर वास्तविक फ़ाइल दिखाए बिना प्रबंधित करता है।

एप्लिकेशन में फ़ाइल का चयन करना उपयोगी है, और 'मुझे विंडोज एक्सप्लोरर' कमांड में यह फ़ाइल दिखाएं - यही वह है जिसे मैं हासिल करने की कोशिश कर रहा हूं, और एकल फाइलों के लिए ऐसा किया है।

हमारे पास एक सूची दृश्य है जो उपयोगकर्ताओं को एप्लिकेशन के भीतर कई फाइलों का चयन करने की अनुमति देता है, और उन्हें स्थानांतरित/हटा/आदि करता है। यह चुनना अच्छा होगा कि 'मुझे यह फ़ाइल विंडोज़' कमांड में कई चयनित फाइलों के लिए काम करें - कम से कम अगर सभी स्रोत फाइलें एक ही निर्देशिका में हैं, लेकिन यदि यह संभव नहीं है तो यह एक प्रमुख विशेषता नहीं है।

0
जोड़ा
'विंडोज़ फ़ोल्डर में दिखाएं' ('विंडोज़' यहां वैकल्पिक है) द्वारा 'मुझे विंडोज़ में यह फ़ाइल दिखाएं' बदलें - समस्या हल हो गई।
जोड़ा लेखक jfs, स्रोत
@FlakDiNenno: मेरा मतलब था कि (एक निम्न विकल्प के रूप में) आप केवल मूल फ़ोल्डर खोल सकते हैं जिसमें फाइलें हैं (फ़ाइलों का चयन किए बिना)। फ़्लैशक का उत्तर दिखाता है कि फ़ोल्डर को कैसे खोलें और फ़ाइलों का चयन करें
जोड़ा लेखक jfs, स्रोत
@ जेएफ। सेबेस्टियन क्षमा करें ... क्या आप इस पर थोड़ा सा विस्तार कर सकते हैं। मुझे समझ में नहीं आता कि यह ओरियनएडवर्ड्स की समस्या को कैसे हल करता है ... tia।
जोड़ा लेखक Flak DiNenno, स्रोत
आह मिला आपने मुझे बस थोड़ा और समझाने के लिए कहा था, क्या आपने मुझे कम नहीं किया?
जोड़ा लेखक Flak DiNenno, स्रोत

आप जो वास्तव में पूरा करना चाहते हैं उसके आधार पर आप इसे AutoHotKey के साथ कर सकते हैं। यह उन चीज़ों को स्वचालित करने के लिए एक अद्भुत निःशुल्क टूल है जो आप सामान्य रूप से नहीं कर सकते हैं। यह विंडोज के साथ आना चाहिए। जब आप F12 दबाते हैं तो यह स्क्रिप्ट आपकी फ़ाइल का चयन करेगी और इसके नीचे की अगली दो फाइलों को हाइलाइट करेगी।

F12:: 
 run explorer.exe /select`, "c:\path\to\file.txt"
 SendInput {Shift Down}{Down}{Down}{Shift Up}
return

उन दो मध्यम रेखाओं को एक टेक्स्ट फ़ाइल में रखना भी संभव है और फिर इसे autohotkey.exe पर एक पार्म पास करना भी संभव है। उनके पास स्क्रिप्ट को संकलित करने का विकल्प भी है, जो इसे एक स्टैंडअलोन एक्सई बना देगा जिसे आप कॉल कर सकते हैं। एक महान सहायता फ़ाइल के साथ महान काम करता है।

@ ओरियन, सी # से autohotkey का उपयोग करना संभव है। आप एक ऑटोहोटीकी स्क्रिप्ट को एक स्टैंडअलोन निष्पादन योग्य (लगभग 400k) में बना सकते हैं जिसे आपके सी # ऐप द्वारा लॉन्च किया जा सकता है (जिस तरह से आप एक्सप्लोरर लॉन्च कर रहे हैं)। आप इसे कमांड लाइन पैरामीटर भी पास कर सकते हैं। इसमें कोई रनटाइम आवश्यकता नहीं है।

0
जोड़ा
यही कारण है कि मैंने कहा "निर्भर" और "करने में सक्षम हो सकता है"। ऑटोहोटीकी के भीतर कई विकल्प हैं जिनमें एक खोज स्वचालित करना शामिल है, मैंने अभी एक उदाहरण दिया है।
जोड़ा लेखक bruceatk, स्रोत
मुझे यकीन नहीं है कि यह क्यों चिह्नित है। AutoHotkey एक उत्कृष्ट समाधान है जब आपको ऐसा कुछ करने की आवश्यकता होती है जिसे आप मौजूदा API का उपयोग करके नहीं कर सकते। इसमें कई सुरक्षा उपाय हैं जिनका उपयोग यह सुनिश्चित करने के लिए किया जा सकता है कि सही कार्यक्रम लक्षित है। कई संभावनाएं हैं। उत्तर जो उत्तर के रूप में चिह्नित है, उत्तर नहीं है। यह सिर्फ एक स्पष्ट बयान है, जिस कारण से पहले सवाल पूछा गया था। मैं सुझाव दूंगा कि इस उत्तर को चिह्नित करने वाले किसी को पहले ऑटोहॉटकी में देखना चाहिए और सीखना चाहिए कि यह क्या कर सकता है। यह खिड़कियों में बनाया जाना चाहिए।
जोड़ा लेखक bruceatk, स्रोत
अगर फाइलें एक दूसरे के बाद नहीं हैं तो ठीक से काम नहीं करेंगे?
जोड़ा लेखक Svish, स्रोत
@ ब्रूससेक सहमत हुए। वोट दिया RATM। संभावित रूप से कोई व्यक्ति इस बारे में अत्यधिक pedantic था कि जब आप पुस्तकालय सुझावों के साथ समस्याओं को हल करते हैं तो एसओ इसे पसंद नहीं करता है, लेकिन इस प्रकार का उत्तर (संदर्भ के बारे में विशिष्ट, उदाहरण कोड और सीमाओं और शक्ति की व्याख्या) पूरी तरह से सीमाओं के भीतर है और समस्या पर लागू है उपलब्ध।
जोड़ा लेखक Max von Hippel, स्रोत

मुझे लगता है कि आप विंडोज एक्सप्लोरर के SysListView32 प्राप्त करने के लिए FindWindowEx का उपयोग कर सकते हैं, फिर आइटम्स का चयन करने के लिए LVM_SETITEMSTATE के साथ SendMessage का उपयोग करें। वस्तुओं की स्थिति जानने में कठिनाई ... शायद LVM_FINDITEM इसका उपयोग इस के लिए किया जा सकता है।

0
जोड़ा

This should be possible with the shell function SHOpenFolderAndSelectItems

संपादित करें

यहां कुछ नमूना कोड दिखाए गए हैं जो त्रुटि जांच के बिना सी/सी ++ में फ़ंक्शन का उपयोग कैसे करें:

//Directory to open
ITEMIDLIST *dir = ILCreateFromPath(_T("C:\\"));

//Items in directory to select
ITEMIDLIST *item1 = ILCreateFromPath(_T("C:\\Program Files\\"));
ITEMIDLIST *item2 = ILCreateFromPath(_T("C:\\Windows\\"));
const ITEMIDLIST* selection[] = {item1,item2};
UINT count = sizeof(selection)/sizeof(ITEMIDLIST);

//Perform selection
SHOpenFolderAndSelectItems(dir, count, selection, 0);

//Free resources
ILFree(dir);
ILFree(item1);
ILFree(item2);
0
जोड़ा
इस विधि का उपयोग करने के बारे में कोई और जानकारी उपयोगी होगी ... इसमें पिनवोक.net पर कुछ भी प्रतीत नहीं होता है, और मैं इंटरऑप के साथ अच्छा नहीं हूं।
जोड़ा लेखक devios1, स्रोत
मैंने नमूना सी/सी ++ कोड रखने के लिए अपनी पोस्ट अपडेट की है
जोड़ा लेखक flashk, स्रोत
कुछ नोट: चयन/गिनती चर इस तरह दिखते नहीं हैं, लेकिन अंत में उनमें 0-डिलीमीटर होता है। इसके बिना SHOpenFolderAndSelectItems फ़ंक्शन ने सभी अनुरोधित फ़ाइलों का चयन नहीं किया (जिसका अर्थ है कॉलक() के मामले में, आइटमों की संख्या + 1)।
जोड़ा लेखक Karsten, स्रोत

एक्सप्लोरर में एकाधिक फाइलों का चयन करने का सही तरीका अगला है

अप्रबंधित कोड इस तरह दिखता है (इसकी बग फिक्सिंग के साथ चीन कोड पोस्ट से संकलित)

static class NativeMethods
{
    [DllImport("shell32.dll", ExactSpelling = true)]
    public static extern int SHOpenFolderAndSelectItems(
        IntPtr pidlFolder,
        uint cidl,
        [In, MarshalAs(UnmanagedType.LPArray)] IntPtr[] apidl,
        uint dwFlags);

    [DllImport("shell32.dll", CharSet = CharSet.Auto)]
    public static extern IntPtr ILCreateFromPath([MarshalAs(UnmanagedType.LPTStr)] string pszPath);

    [ComImport]
    [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
    [Guid("000214F9-0000-0000-C000-000000000046")]
    public interface IShellLinkW
    {
        [PreserveSig]
        int GetPath(StringBuilder pszFile, int cch, [In, Out] ref WIN32_FIND_DATAW pfd, uint fFlags);

        [PreserveSig]
        int GetIDList([Out] out IntPtr ppidl);

        [PreserveSig]
        int SetIDList([In] ref IntPtr pidl);

        [PreserveSig]
        int GetDescription(StringBuilder pszName, int cch);

        [PreserveSig]
        int SetDescription([MarshalAs(UnmanagedType.LPWStr)] string pszName);

        [PreserveSig]
        int GetWorkingDirectory(StringBuilder pszDir, int cch);

        [PreserveSig]
        int SetWorkingDirectory([MarshalAs(UnmanagedType.LPWStr)] string pszDir);

        [PreserveSig]
        int GetArguments(StringBuilder pszArgs, int cch);

        [PreserveSig]
        int SetArguments([MarshalAs(UnmanagedType.LPWStr)] string pszArgs);

        [PreserveSig]
        int GetHotkey([Out] out ushort pwHotkey);

        [PreserveSig]
        int SetHotkey(ushort wHotkey);

        [PreserveSig]
        int GetShowCmd([Out] out int piShowCmd);

        [PreserveSig]
        int SetShowCmd(int iShowCmd);

        [PreserveSig]
        int GetIconLocation(StringBuilder pszIconPath, int cch, [Out] out int piIcon);

        [PreserveSig]
        int SetIconLocation([MarshalAs(UnmanagedType.LPWStr)] string pszIconPath, int iIcon);

        [PreserveSig]
        int SetRelativePath([MarshalAs(UnmanagedType.LPWStr)] string pszPathRel, uint dwReserved);

        [PreserveSig]
        int Resolve(IntPtr hwnd, uint fFlags);

        [PreserveSig]
        int SetPath([MarshalAs(UnmanagedType.LPWStr)] string pszFile);
    }

    [Serializable, StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode), BestFitMapping(false)]
    public struct WIN32_FIND_DATAW
    {
        public uint dwFileAttributes;
        public FILETIME ftCreationTime;
        public FILETIME ftLastAccessTime;
        public FILETIME ftLastWriteTime;
        public uint nFileSizeHigh;
        public uint nFileSizeLow;
        public uint dwReserved0;
        public uint dwReserved1;

        [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 260)]
        public string cFileName;

        [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 14)]
        public string cAlternateFileName;
    }

    public static void OpenFolderAndSelectFiles(string folder, params string[] filesToSelect)
    {
        IntPtr dir = ILCreateFromPath(folder);

        var filesToSelectIntPtrs = new IntPtr[filesToSelect.Length];
        for (int i = 0; i < filesToSelect.Length; i++)
        {
            filesToSelectIntPtrs[i] = ILCreateFromPath(filesToSelect[i]);
        }

        SHOpenFolderAndSelectItems(dir, (uint) filesToSelect.Length, filesToSelectIntPtrs, 0);
        ReleaseComObject(dir);
        ReleaseComObject(filesToSelectIntPtrs);
    }

    private static void ReleaseComObject(params object[] comObjs)
    {
        foreach (object obj in comObjs)
        {
            if (obj != null && Marshal.IsComObject(obj))
                Marshal.ReleaseComObject(obj);
        }
    }
}
0
जोड़ा
यह वास्तव में महान है, एक इलाज धन्यवाद काम किया
जोड़ा लेखक joshcomley, स्रोत