7

プログラムを開くために使用したファイルの場所を取得するにはどうすればよいですか?

例: 新しい拡張子 ".xyz" を作成し、myapplication でファイル タイプ .xyz を開きたいことを Windows に伝えると、アプリケーションが開始されます。素晴らしいですが、私のアプリケーションは、アプリケーションを起動するために使用されたファイルのファイル パスのハンドルをどのように取得するのでしょうか?

また、アプリの 1 つのバージョンのみを実行し、新しいファイルを開いてアプリケーションのメソッドを呼び出すだけにする方法はありますか? たとえば、トレントを使用していて、5 つの .torrent ファイルを開くと、それらはすべて 1 つのアプリケーションに渡されます。

補足質問: すべてのファイル拡張子は 3 文字で、一般に使用されている拡張子のリストはありますか? ファイル拡張子を作成する場合、既に使用されているものは使用したくありません。

4

2 に答える 2

14

ファイルの関連付けを作成したときに、エクスプローラーがプログラムをアクティブ化するために実行するコマンド ラインを指定しました。シェルはドキュメント ファイルの名前もコマンド ラインに出力するため、プログラムでコマンド ライン引数を確認してください。その方法は、言語と開発環境によって異なります。Delphi では、関数ParamCountParamStr関数を使用します。

ファイルの関連付けを作成するときに、コマンド ラインでドキュメント ファイル名を配置する場所を正確に指定できます。%1コマンドラインのどこかで使用すると、シェルはそれをファイル名に置き換えます。Windows のファイル名にはスペースが含まれることが多いため、ファイル名を引用符で囲む必要があります。そのため、ファイル関連付けのコマンド ラインは次のようになります。

ArthurApp.exe "%1"

その関連付けにより、別のドキュメント ファイルをダブルクリックすると、プログラムの別のインスタンスが起動します。既に実行中のインスタンスの別のウィンドウでドキュメントを開きたい場合は、起動時にプログラムが既に実行中のインスタンスを検索するようにコードを記述できます。見つかった場合は、そのインスタンスと通信して、開くファイルを伝えることができます。その通信には、メールスロット、ソケット、名前付きパイプ、メモリ マップ ファイル、DDE など、さまざまな方法で影響を与えることができます。

シェルのファイル関連付けメカニズムには、DDE を介して通信する方法が既に備わっているため、プログラムの 2 番目のインスタンスはまったく開始されません。代わりに、シェルは既に実行中のインスタンスとの DDE 通信を開始し、その方法で新しいファイル名を伝えます。ただし、最近では DDE が人気を失っているようです。そのため、最初に他のオプションをいくつか確認してください。

副次的な質問ですが、いいえ、内線番号は常に 3 文字の長さではありません。C コードは.cファイルに、Adobe Illustrator グラフィックスは.aiファイルに、新しい Microsoft Word ドキュメントは.docxファイルに格納されます。

しかし、注意してください。**.doc* を要求すると、結果には.docxファイルも含まれます。これFindFirstFileは、短いファイル名と長いファイル名の両方に一致し、長いファイル拡張子を持つ長いファイル名には、短いファイル名のバージョンで 3 文字の拡張子があるためです。

于 2009-01-19T21:03:50.987 に答える
0

Rob covered the answer to your question(s) beautifully.

最後の部分については、ファイル拡張子のパブリック リストがあるかどうか (そのようなものではありませんが、shell.windows.com があるかどうか) については、Web サービス エクスプローラーが未知のファイル拡張子のハンドラーを見つけるために使用します。拡張機能を作成してから、shell.windows.com にクエリを実行して、それが登録されているかどうかを確認できます。たとえば、拡張機能.blahが誰かによって shell.windows.com に登録されているかどうかを確認するには、任意のブラウザーで次の URL を開くだけです。

http://shell.windows.com/fileassoc/0409/xml/redir.asp?ext=blah

もちろん、末尾blahを拡張子に置き換えます。

詳細については、KB929149および Raymond Chen の投稿「Shell.windows.com はファイル拡張子に関する情報をどこで入手し、どのようにすればそのアクションに参加できますか?」を参照してください。.

于 2009-01-20T00:25:56.320 に答える