3

私はさまざまな形式(.png、.jpg、.bmp、.ico ...)の画像のリストを持っているプログラムを書いていますが、これまでのところ、それぞれに関連付けられたシェルコマンドのリストを取得することができましたそのようなファイル:

"\"C:\\Program Files\\Paint.NET\\PaintDotNet.exe\" \"%1\""
"\"C:\\Program Files\\GIMP 2\\bin\\gimp-2.8.exe\" \"%1\""
"C:\\Windows\\System32\\rundll32.exe \"C:\\Program Files (x86)\\Windows Photo Viewer\\PhotoViewer.dll\", ImageView_Fullscreen %1"
"\"C:\\Windows\\system32\\mspaint.exe\" /pt \"%1\" \"%2\" \"%3\" \"%4\""    
"\"C:\\Program Files (x86)\\PDFCreator\\pdfcreator.exe\" -IF\"%1\"" string

これが正しいことかどうかはわかりませんが、これまでのところそれが私が持っているものです。使用する場合:

Process.Start(completeProgramPath);

私が次のようなものを使用しない限り、プログラムは決して見つかりません

Process.Start("mspaint.exe");

オペレーティングシステムが使用するプログラムを指定できるようにしたい。私は何が間違っているのですか?正しいことを指していないのは私のプログラムのリストですか、それともProcess.Start()を使用していませんか。正しく?

4

1 に答える 1

3

各イメージのデフォルトプログラムを開きたい場合は、Process.Startメソッドへの唯一の引数としてファイル名を指定し、実行可能パスを省略します。オペレーティングシステムがレジストリを検索するため、次のことを行う必要はありません。

Process.Start("C:\some\picture.jpg");

これにより、拡張機能のデフォルトプログラムが開き、*.jpgファイルのパスが引数として渡されます。

プログラムを指定する場合Process.Start(string, string)は、実行可能ファイルのパスを最初のパラメーターとして指定し、ファイルのパスを2番目のパラメーターとして指定するオーバーロードを使用する必要があります。

レジストリキーで正確な値を使用しようとすると"%1"、パスに追加された値があり、rundll32キーに追加の引数があるため、機能しません。重要なのは、レジストリキーから取得した文字列をメソッドに渡す前に、それらを変更する必要があるということですStart

例:次
"\"C:\\Program Files\\Paint.NET\\PaintDotNet.exe\" \"%1\""のようになる必要があります:
"C:\Program Files\Paint.NET\PaintDotNet.exe"

于 2013-03-13T19:11:43.733 に答える