カラーコードメーカーをつくる

前回、カラーコードメーカーをつくりました。今回は保存したファイルをダブルクリックするとアプリが起動して開くことができるようにします。

これを参考にしました。

アプリケーションをファイルの拡張子に関連付ける – .NET Tips (VB.NET,C#…)
https://dobon.net/vb/dotnet/system/associatedapp.html

「HKEY_CLASSES_ROOT」は、「HKEY_LOCAL_MACHINE\Software\Classes」(すべてのユーザー共通の設定)と「HKEY_CURRENT_USER\Software\Classes」(ユーザーごとの設定)が合成されたものです。上記のように「HKEY_CLASSES_ROOT」にキーや値を作成した時、実際に作成される場所が「HKEY_LOCAL_MACHINE」と「HKEY_CURRENT_USER」のどちらになるかは、状況によって変わります。

もし「HKEY_LOCAL_MACHINE\Software\Classes」と「HKEY_CURRENT_USER\Software\Classes」のどちらに書き込むかはっきりさせたい場合は、「HKEY_CLASSES_ROOT」を使わない方が良いでしょう。例えば上記の例で「HKEY_CURRENT_USER\Software\Classes」に書き込みたいのであれば、「ClassesRoot」を「CurrentUser」とし、CreateSubKeyで作成するサブキー名の前に「Software\Classes\」を付けます。

ということなので、HKEY_CURRENT_USER\Software\Classes側に書き込むことにします。

そしてメニューをクリックしたら上記メソッドが実行されるようにしています。

さてこれでファイルをダブルクリックしてもアプリが起動するだけでファイルは開かれません。

アプリケーション起動時のコマンドライン引数を取得するには、Environment.CommandLineプロパティを使います。ここではコマンドライン引数を半角スペースで分割した配列で取得するため、Environment.GetCommandLineArgsメソッドを使用しています。

CommandLineプロパティの内容はコマンドライン引数だけでなく、先頭に必ず実行ファイルのパスが付きます。そのため最初の1つはスキップしています。そして取得したファイルが存在するか確認してファイルを開いています。

実行ファイルのうえにファイルをドロップしたときもファイルを開くことができます。しかし.colorファイル以外のファイルもドロップできてしまいます。そこで例外処理を用いてファイルが開けない場合の対策をしています。