|
|||||
<このサンプルの概要> 拡張子に関連づいたEXE(アプリケーション)のPATHを取得するサンプル(VB.NET)です。 拡張子に関連づいたAPのPATHを取得するためにはレジストリから情報を取得する必要があります。 関連付けの情報はシステムが持っている情報とエクスプローラが持っている情報があります。 通常は、エクスプローラが持っている関連付けの情報でファイルを開きたいと思いますので、 このサンプルでも、まずエクスプローラが持っている関連付けの情報を検索し、見つからない時に システムが持っている関連付けの情報を検索します。 システムが持っている関連付けの情報ですとテキストエディタはメモ帳です。 C#.NET版はこちらです。 拡張子に関連づいたEXEのPATHを取得するサンプル(C#.NET) VB6版はこちらです。 拡張子に関連づいたEXEのPATHを取得するサンプル(VB6) このサンプルは以下のようなフォルダ関係やファイル関係のツールで使用されています。 フォルダ内のファイル比較ツール テキスト差分表示ツール フォルダ監視人 ★フォームモジュール(Form1.vb) Private Sub Button1_Click( _ ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click MessageBox.Show(GetExtApPath("C:\Temp\Text.txt")) End Sub ''' <summary> ''' 拡張子に関連づいたアプリケーションのPATH取得(引数PATH付き) ''' </summary> ''' <param name="fpath">ファイルPATH(拡張子付き)</param> ''' <returns>コマンドライン</returns> Private Function GetExtApPath(ByVal fpath As String) As String Dim ext As String = IO.Path.GetExtension(fpath) If ext.Substring(0, 1) <> "." Then ext = "." & ext Dim strCmd As String = "" Dim strApp As String = "" Dim regKey As Microsoft.Win32.RegistryKey Try ' 拡張子に関連づいたアプリケーションのPATH取得(エクスプローラ編) regKey = Microsoft.Win32.Registry.CurrentUser.OpenSubKey(String.Format( _ "Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\{0}", ext)) If regKey Is Nothing = False Then strApp = CStr(regKey.GetValue("Application")) regKey.Close() End If If strApp = "" Then ' アプリケーションが見つけられなかった場合はOpenWithListから探す regKey = Microsoft.Win32.Registry.CurrentUser.OpenSubKey(String.Format( _ "Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\{0}\OpenWithList", _ ext)) If regKey Is Nothing = False Then Dim mruList As String = CStr(regKey.GetValue("MRUList")) strApp = CStr(regKey.GetValue(mruList.Substring(0, 1))) regKey.Close() Else ' 拡張子に関連づいたアプリケーションのPATH取得(システム編) Throw New Exception End If End If If strApp <> "" Then ' アプリケーションのPATH取得 regKey = Microsoft.Win32.Registry.ClassesRoot.OpenSubKey(String.Format( _ "Applications\{0}\shell\open\command", strApp)) If regKey Is Nothing = False Then strCmd = CStr(regKey.GetValue("")) regKey.Close() Else ' 拡張子に関連づいたアプリケーションのPATH取得(システム編) Throw New Exception End If Else ' 拡張子に関連づいたアプリケーションのPATH取得(システム編) Throw New Exception End If Catch Try ' 拡張子に関連づいたアプリケーションのPATH取得(システム編) regKey = Microsoft.Win32.Registry.ClassesRoot.OpenSubKey(ext) If regKey Is Nothing = False Then Dim fileType As String = CStr(regKey.GetValue("")) regKey.Close() ' アプリケーションのPATH取得 regKey = Microsoft.Win32.Registry.ClassesRoot.OpenSubKey(String.Format( _ "{0}\shell\open\command", fileType)) If regKey Is Nothing = False Then strCmd = CStr(regKey.GetValue("")) regKey.Close() End If End If Catch End Try End Try ' コマンドラインの引数部分に指定のファイルPATHを設定 strCmd = strCmd.Replace("""%1""", """" & fpath & """") strCmd = strCmd.Replace("%1", """" & fpath & """") Return strCmd End Function |