- ベストアンサー
ファイルを開く際に規定のexeを知る方法について VB.NET
- VB.NETでファイルを開く際に規定のexeを取得する方法を知りたいです。現在の開発環境はVB.NETとFramework1.1です。
- mp3ファイルなどがダブルクリックされた際に自動で開くアプリケーションが何なのかを知りたいです。レジストリキーを調べる方法で取得できるのでしょうか?
- 提供されたソースコードでは、Microsoft.Win32.RegistryKeyを使用してmp3ファイルのデフォルトアプリケーションを取得しようとしていますが、正しく取得できていないようです。改善点を教えていただきたいです。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
俺の環境(.NET 3.5)だと HKEY_CLASSES_ROOT\mp3file\shell\open\command の既定の値に "C:\Program Files\Media_Player_Classic\v6.4.9.1\v20080308\mplayerc.exe" "%1" と書かれているとして ----------------- '多分この四つの中には.NET 1.1でかけないものがあるかと Option Explicit On Option Compare Binary Option Strict On Option Infer Off Public Class Class1 Public Shared Sub Main() Dim c As Class1 = New Class1() System.Console.WriteLine(c.hoge()) System.Console.ReadKey(true) '単なる待機。 End Sub Public Function hoge() As String Dim regkey As Microsoft.Win32.RegistryKey = _ Microsoft.Win32.Registry.ClassesRoot.OpenSubKey("mp3file\shell\open\command", False) If (regkey Is Nothing) Then return Nothing End If Dim str As String 'MSDNのドキュメントにあるとおり,RegistryKey.GetValueメソッドの第一引数は【値の型】じゃなくて【名前】です。 'ただし、既定値の場合,Nothingか空文字列を入れることになってます。 'ところで,本題とは無関係ですが,個人的にはCTypeよりもDirectCastの方が好きです。 'http://blogs.wankuma.com/jeanne/archive/2005/03/18/12271.aspx 'わんくま同盟のサーバがコケているので移転前のものでも見てください。 'http://www.ailight.jp/blog/jeanne/archive/2005/03/18/5072.aspx str = DirectCast(regkey.GetValue(""), String) return str End Function End Class '============解らなければ読み飛ばしてください======== 'なお,MSDNのドキュメントについたコメントによると, 'GetValueで得られたObjectの段階で(.NETではStringに変換する必要がありますが)すでに文字列扱いされており 'null文字(C言語やC++言語で「文字列の終わり」を示す特殊な文字) '以後のデータを得ることは出来ないそうです。 '============== 'また、Windows32 APIを叩くことに慣れているならば, 'FindExecutableA関数も検討してみてください(FindExecutableW関数があるかは不明) 'って 'http://stackoverflow.com/questions/162331/finding-the-default-application-for-opening-a-particular-file-type-on-windows 'に書いてあった。 ----------------- このプログラムを実行したところ, "C:\Program Files\Media_Player_Classic\v6.4.9.1\v20080308\mplayerc.exe" "%1" が正常に表示されました。 ああ、そうそう、起動するアプリケーションって必ずHKEY_CLASSES_ROOTで HKEY_LOCAL_MACHINEやHKEY_CURRENT_USERにならないのかも気になりますね
お礼
ご回答ありがとうございます。 空白を指定したら思い通りの文字列を取ることが出来ました。 また大変ためになる情報もありがとうございます。 API関数も早速試してみることにします。 HKEY_CLASSES_ROOTから取ってくるのはregeditで検索して 最初に見つけたのがこれだったのですが、HKEY_LOCAL_MACHINEにもありますね。 そちらから取るようにします。 どうもありがとうございました。