gpt4 book ai didi

c# - 如何让应用程序名称显示在打开方式列表中?

转载 作者:太空狗 更新时间:2023-10-29 23:09:26 26 4
gpt4 key购买 nike

这是我的问题 here 的延续.我正在为 *.bmp 类型创建一个开放式列表。根据该问题的答案,我已经在注册表项的开放式列表中创建了一个应用程序列表。

   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;
}

现在如何获取必须在菜单中显示的应用程序名称?每次您开始使用新的应用程序时,Windows 操作系统都会自动从 exe 文件的版本资源中提取应用程序名称,并将其存储在称为“MuiCache”的注册表项中以备后用。 MUICache数据存放在HKEY_CURRENT_USER\Software\Classes\Local Settings\Software\Microsoft\Windows\Shell\MuiCache下

但我们不能保证该应用程序至少运行过一次。我们也可以直接从文件的版本资源中获取描述 key ,但我在从命令中分离出应用程序路径时遇到了一些麻烦,例如

%SystemRoot%\System32\rundll32.exe "%ProgramFiles%\Windows Photo Viewer\PhotoViewer.dll", ImageView_Fullscreen %1

如何获取姓名信息?

在我的命令列表下方

  • "C:\Windows\System32\rundll32.exe\"C:\Program Files\Windows照片查看器\PhotoViewer.dll\", ImageView_Fullscreen %1"
  • "\"C:\Windows\eHome\ehshell.exe\"\"%1\""
  • "C:\PROGRA~1\MIF5BA~1\Office14\OIS.EXE/shellOpen\"%1\""
  • "\"C:\Program Files (x86)\Microsoft Visual Studio10.0\Common7\IDE\devenv.exe\"/dde"
  • "C:\Program Files (x86)\QuickTime\PictureViewer.exe\"%1\""

最佳答案

如果您知道命令列表,那么您可以使用下面给出的代码检索描述

 FileVersionInfo.GetVersionInfo(Path.Combine(Environment.SystemDirectory, "Notepad.exe"));
FileVersionInfo myFileVersionInfo = FileVersionInfo.GetVersionInfo(Environment.SystemDirectory + "\\Notepad.exe");


// Print the file name and version number.
Console.WriteLine("File: " + myFileVersionInfo.FileDescription + '\n' +
"Version number: " + myFileVersionInfo.FileVersion);

关于c# - 如何让应用程序名称显示在打开方式列表中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11981337/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com