「ファイルを開く」ダイアログを開く簡単な方法はありますか?「ファイルを開く」ダイアログを表示するにはどうすればよいですか?
答えて
これはトリックを行うべき...
var processInfo = new ProcessStartInfo(fileName);
processInfo.Verb = "openas";
Process.Start(processInfo);
オデッドは大きなポイントになります、が、 - あなたは、このような機能を使用する正確にどのように/どこ知ることは、これはあなたの状況のための答えではないかもしれません意味しません。
この回答に対する最近のコメントは、私が最初にあまり詳しく説明していなかったことを示しています。 に、すでにそのタイプのファイルに対して定義された動詞がopen
であるファイルを試すと、問題が発生します。同様に、open
にその動詞が定義されていないファイルを試そうとすると、問題が発生します。問題は次のようになります。
Win32Exception:いいえアプリケーションが私はこの種のコードを使用するためにことをトマスに提案し、この操作のために指定されたファイル
私の頭の上オフに関連付けられていませんプロダクションアプリケーションを徹底的にチェックし、おそらくレジストリをチェックするか、またはファイルを任意の動詞で開くことができるかどうかを調べる必要があります。 ProcessStartInfo.Verbs
を考えてみると、それよりも簡単です:fileName
が設定されたら、ファイルタイプに関連する可能性のある動詞の集合を提供します。これにより、どのファイルをどのように処理するかを簡単に判断できるようになります。
私がトーマスに言及したように、アプリケーションにいくつかの複雑さやインテリジェンスを追加する必要があります。この答えは確かにすべての解決策ではありません。
動作しません... Win32Exceptionは、 "この操作に指定されたファイルにアプリケーションが関連付けられていません" –
@ThomasLevesqueこれは、 'default programs'定義されている。つまり、「Open with ...」があれば'コンテキストメニューでは、これは失敗します。単純に 'Open'オプションを指定した不明なファイルタイプの場合、これは機能します。逆もまた当てはまります:既知のファイルタイプに 'open'動詞を使うとデフォルトプログラムが起動しますが、未知の場合には同じ例外が発生します。したがって、適切なアプリケーションでは、これについて徹底したいと思っています。おそらく既知のファイルタイプのリポジトリ(レジストリ)で検索し、システムによって与えられた事実をどのように開くかの決定に基づいています。 –
@ThomasLevesque実際、あなたはそのような長さに行く必要はありません:['ProcessStartInfo.Verbs'](http://msdn.microsoft.com/en-us/library/system.diagnostics.processstartinfo.verbs( VS.90).aspx)は、 'fileName'が設定されているときにファイルの可能な動詞で設定されます。つまり、' open'動詞が定義されているかどうか、 'openas'を使用していないかどうかだけを調べることができます。これは私が賭けたすべてのケースを捕らえるわけではないので、あなた自身の賢さを自由に追加してください。 –
にはshell examplesのトンがあります。たぶんあなたはそれらを見て、ある例が持つべき機能を持っているかどうかを知ることができます。デフォルトのプログラムは、ダイアログを開いているが定義されていない場合、ファイルは、デフォルトのプログラムでopenenedされます
System.Diagnostics.Process.Start(path);
を使用して
が表示されます。 this link
がProcExpといくつかのリバースエンジニアリングが働いていたします。rundll32.exeコマンドラインを明らかにした:あなたは上でこの機能を使用する例があり
[DllImport("shell32.dll", SetLastError = true)]
extern public static bool
ShellExecuteEx(ref ShellExecuteInfo lpExecInfo);
:
あなたが機能を使用することができます。
using System;
using System.Diagnostics;
using System.IO;
class Program {
static void Main(string[] args) {
ShowOpenWithDialog(@"c:\temp\test.txt");
}
public static void ShowOpenWithDialog(string path) {
var args = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.System), "shell32.dll");
args += ",OpenAs_RunDLL " + path;
Process.Start("rundll32.exe", args);
}
}
Win7でテストしたところ、他のバージョンのWindowsではどれくらいうまく動作するかわかりません。
ありがとう@ハンス!私はしばらくブッシュの周りにぶつかっていた、これは私が必要なものです。私はshell32.dllの完全なパスを使用していませんでした。 – tehDorf
OpenAs_RunDLLは文書化されておらず、[常に動作するとは限りません。](http://stackoverflow.com/questions/23566667/rundll32-shell32-dll) –
- 1. Androidでダイアログを表示するにはどうすればよいですか?
- 2. ダイアログを開く前に[ファインアップローダを開く]ダイアログの[ファイル名]入力ボックスにワイルドカード名を設定するにはどうすればよいですか?
- 3. ファイル開くダイアログのデフォルトパスを変更するにはどうすればよいですか?
- 4. ファイルを開くダイアログで特定のファイル拡張子のみを表示するにはどうすればよいですか?
- 5. - 認証ダイアログをポップアップで開くにはどうすればいいですか?
- 6. Google Chromeがダイアログを表示しないようにするにはどうすればよいですか?
- 7. ウィンドウに開くファイルのダイアログを表示するには?
- 8. コードバアプリケーションでファイルを表示するにはどうすればよいですか?
- 9. アプリケーションが初期化されるとすぐにダイアログを開くにはどうすればよいですか?
- 10. Googleドライブでファイルを開くにはどうすればよいですか? - Cordova
- 11. Google Datalabでgzipファイルを開くにはどうすればよいですか?
- 12. アプリケーションでファイルを開くにはどうすればよいですか?
- 13. IDEAScriptで[ファイル]ダイアログボックスを開くにはどうすればよいですか?
- 14. .appファイルをobjective-cで開くにはどうすればよいですか?
- 15. IDLEで.rarファイルを開くにはどうすればよいですか?
- 16. コマンドライン引数でファイルを開くにはどうすればよいですか?
- 17. モバイルウェブサイト(アプリケーションではない)から共有ダイアログを開くにはどうすればよいですか?
- 18. スクリプトを開くにはどうすればよいですか?
- 19. ファイルをXMLとして開くにはどうすればよいですか?
- 20. sap.m.Pageを表示するダイアログを開く
- 21. 新しいダイアログにインテントを表示するにはどうすればよいですか?
- 22. jQuery UIでオーバーレイ(タイトルバーなしのダイアログなど)を開くにはどうすればよいですか
- 23. 「開く」でスナップアプリを表示するにはどうすればよいですか?
- 24. 開くファイルを選択するにはどうすればいいですか?
- 25. Swiftファイルの公開API "ヘッダー"を表示するにはどうすればよいですか?
- 26. zipファイルを開くようにvimを設定するにはどうすればよいですか?
- 27. 正しく表示するにはどうすればよいですか?
- 28. Google AppMakerの特定のレコードにダイアログまたはページを開くにはどうすればよいですか?
- 29. angularJSにダイアログを表示するにはどうすればよいですか? $モーダル?
- 30. Classic UI AEMダイアログのスライダフィールドの値をツールチップに表示するにはどうすればよいですか?
Winforms? WPF? Webフォーム? MVC? – Oded
CodeProjectには、Googleを検索するときにトップになる記事があります。http://www.codeproject.com/KB/shell/openwith.aspxしかし、私はexterns( "ProcessStartInfo'、おそらく?)に頼るよりむしろ、これをやっているよりきれいな方法を見たいと思います。 –
http://stackoverflow.com/a/32153874/5306861 – codeDom