これは、ここでの私の質問の続きです。タイプ*.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
これらはPrgIdであり、特定のアプリケーションを開くために実行する必要のあるコマンドを取得できます。
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に保存されます
ただし、アプリケーションが少なくとも1回実行されたことを保証することはできません。また、ファイルのバージョンリソースから直接desciptionキーを取得することもできますが、次のようなコマンドからアプリケーションパスを分割するのに問題があります。
%SystemRoot%\ System32 \ rundll32.exe "%ProgramFiles%\ Windows Photo Viewer \ PhotoViewer.dll"、ImageView_Fullscreen%1
名前情報を取得するにはどうすればよいですか?
私のコマンドのリストの下
- "C:\ Windows \ System32 \ rundll32.exe \" C:\ Program Files \ Windows Photo Viewer \ 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 Studio 10.0 \ Common7 \ IDE \ devenv.exe \ "/ dde"
- "C:\ Program Files(x86)\ QuickTime \ PictureViewer.exe \"%1 \ ""