यह मेरे प्रश्न here की निरंतरता है। मैं उस प्रश्न के उत्तर के अनुसार * .bmp.As प्रकार के लिए सूची के साथ एक खुला बना रहा हूं, मैंने रजिस्ट्री कुंजियों की सूची के साथ खुले में एप्लिकेशन की एक सूची बनाई है।ओपन-इन सूची में एप्लिकेशन का नाम कैसे प्रदर्शित किया जाए?
public void RecommendedPrograms(string ext)
{
string baseKey = @"Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\." + ext;
using (RegistryKey rk = Registry.CurrentUser.OpenSubKey(baseKey + @"\OpenWithList"))
{
if (rk != null)
{
string mruList = (string)rk.GetValue("MRUList");
if (mruList != null)
{
foreach (char c in mruList.ToString())
{
string str=rk.GetValue(c.ToString()).ToString();
if (!progs.Contains(str))
{
progs.Add(str);
}
}
}
}
}
using (RegistryKey rk = Registry.CurrentUser.OpenSubKey(baseKey + @"\OpenWithProgids"))
{
if (rk != null)
{
foreach (string item in rk.GetValueNames())
progs.Add(item);
}
}
using (RegistryKey rk = Registry.ClassesRoot.OpenSubKey("." + ext + @"\OpenWithList"))
{
if (rk != null)
{
foreach (var item in rk.GetSubKeyNames())
{
if (!progs.Contains(item))
{
progs.Add(item.ToString());
}
}
}
}
using (RegistryKey rk = Registry.ClassesRoot.OpenSubKey("." + ext + @"\OpenWithProgids"))
{
if (rk != null)
{
foreach (string item in rk.GetValueNames())
{
if (!progs.Contains(item))
{
progs.Add(item);
}
}
}
}
}
इस विधि की तरह आवेदन नामों की एक सूची वापस आ जाएगी,
- Paint.Picture
- ehshell.exe
- MSPaint.exe
- ois.exe
- VisualStudio। bmp.10.0
- QuickTime.bmp
ये PrgIds हैं और मैं आदेश
public string GetRegisteredApplication(string StrProgID)
{
//
// Return registered application by file's extension
//
RegistryKey oHKCR;
RegistryKey oOpenCmd;
string command;
if (Environment.Is64BitOperatingSystem == true)
{
oHKCR = RegistryKey.OpenBaseKey(Microsoft.Win32.RegistryHive.ClassesRoot, RegistryView.Registry64);
}
else
{
oHKCR = RegistryKey.OpenBaseKey(Microsoft.Win32.RegistryHive.ClassesRoot, RegistryView.Registry32);
}
try
{
oOpenCmd = oHKCR.OpenSubKey(StrProgID + "\\shell\\open\\command");
if (oOpenCmd == null)
{
oOpenCmd = oHKCR.OpenSubKey("\\Applications\\" + StrProgID + "\\shell\\open\\command");
}
if (oOpenCmd != null)
{
command = oOpenCmd.GetValue(null).ToString();
oOpenCmd.Close();
}
else
{
return null;
}
}
catch (Exception ex)
{
return null;
}
return command;
}
से विशिष्ट अनुप्रयोग को खोलने के लिए निष्पादित करने की आवश्यकता है कि अब मैं आवेदन नाम है जो मेनू में प्रदर्शित करने के लिए कैसे मिलता है मिल सकता है? प्रत्येक बार जब आप एक नए एप्लिकेशन का उपयोग शुरू करते हैं, तो विंडोज ऑपरेटिंग सिस्टम स्वचालित रूप से एक्सई फ़ाइल के संस्करण संसाधन से एप्लिकेशन नाम निकालता है, और इसे बाद में उपयोग करने के लिए संग्रहीत करता है, रजिस्ट्री कुंजी में 'मुई कैश' के नाम से जाना जाता है। MUICache डेटा HKEY_CURRENT_USER \ Software \ Classes \ Local Settings \ Software \ Microsoft \ Windows \ Shell \ MuiCache
के तहत संग्रहीत किया जाता है लेकिन हम गारंटी नहीं देते कि एप्लिकेशन कम से कम एक बार चलाया गया है। साथ ही हम सीधे से विलम्ब की कुंजी प्राप्त कर सकते हैं फ़ाइल का संस्करण संसाधनों, लेकिन मैं बाहर बंटवारे
% SystemRoot तरह% \ System32 \ rundll32.exe "% ProgramFiles% \ windows फोटो व्यूअर \ PhotoViewer.dll" आदेशों से आवेदन रास्ते में कुछ परेशानी है, ImageView_Fullscreen% 1
मुझे कैसे मिल सकता है नाम की जानकारी?
मेरे आदेशों की सूची के नीचे
- "C: \ Windows \ System32 \ rundll32.exe \" C: \ Program Files \ विंडोज फ़ोटो दर्शक \ PhotoViewer.dll \ ", ImageView_Fullscreen% 1"
- "\" C: \ Windows \ ehome \ ehshell.exe \ "\"% 1 \ ""
- "C: \ कार्यक्रम ~ 1 \ MIF5BA ~ 1 \ Office14 \ OIS.EXE/shellOpen \"% 1 \ ""
- "\" सी: \ प्रोग्राम फ़ाइलें (x86) \ माइक्रोसॉफ्ट विजुअल स्टूडियो 10.0 \ Common7 \ IDE \ devenv.exe \ "/ dde"
- "सी: \ प्रोग्राम फ़ाइलें (x86) \ क्विकटाइम \ पिक्चर व्यूअर।exe \ "% 1 \" "
हाँ साथी में मदद करता है .. लेकिन मैं आदेश से exe या dll पथ को लगातार विभाजित करने के लिए कोई विधि नहीं ढूंढ पा रहा हूं उदाहरण: "% SystemRoot% \ System32 \ rundll32.exe"% ProgramFiles% \ Windows Photo Viewer \ PhotoViewer के मामले में। डीएलएल ", ImageView_Fullscreen% 1", मुझे PhotoViewer.dll को विभाजित करने की आवश्यकता है अन्य मामलों में FileVersionInfo से विवरण प्राप्त करने के लिए जैसे "सी: \\ विंडोज़ \\ system32 \\ NotePAD.EXE% 1" यह सीधे आगे है – biju