2012-06-05 6 views
5

私はC#でファイルエディタを作成しましたが、ツールバーの「開く」ボタンを使用してファイルを開くことができます。また、正しいファイルタイプをプログラムに関連付けました。 * .nlpプログラムは正しく開きますが、ファイル自体は開かない(これはまだ実装されていないのでかなり論理的です)アソシエーション付きファイルを開く

これは私のようなものですか?私はそれをクリックすると、ファイルを開いてロードしたい。

(ところで、ファイルは単なるテキストなので、何も特別な、そしてそれが重要ならば、それは窓のためです)

+0

はどのようにあなたのプログラムとファイルの種類を関連付けたのですか? – gideon

+0

私はちょうどそれをクリックし、Open with ..を実行し、私のexeを選択しました – Nick

+0

[コマンドライン](http://msdn.microsoft.com/en-us/library/system.environment)から簡単に読むと思います。コマンドライン)。 –

答えて

4

Windowsファイルの関連付けは、レジストリに格納され、HKEY_CLASSES_ROOT

以下の手順で手動で実行するか、またはレジストリに正しいエントリを書き込むための小さなセットアッププログラムを書き込むことができます。

エクステンションを登録してから、this documentのようなプログラムに関連付ける必要があります。またthis docあなたのレジストリは次のようになります参照してください。

HKEY_CLASSES_ROOT 
    .nlp 
     (Default) = YourProgID//can by anything you want 
    YourProgID 
     shell 
     open 
      command 
       (Default) = yourapp.exe %1 

、あなたの答えに、彼らの鍵は、コマンドキーで%1です。 というファイル名が開かれており、それがあなたのアプリケーションに引数として渡されました。

ので:

static void Main(string[] args) 
{ 
    // args will contain your filename 
} 
2

あり、直接ファイルの関連付けを管理するための.NET APIではありませんが、あなたは使用することができますあなたが必要とするキーを読み書きするためのレジストリクラス。

名前をファイル拡張子(例: ".txt")に設定してHKEY_CLASSES_ROOTの下にキーを作成する必要があります。このキーの既定値を "Acme.TextFile"など、ファイルの種類の一意の名前に設定します。次に、名前が "Acme.TextFile"に設定されたHKEY_CLASSES_ROOTの下に別のキーを作成します。 「DefaultIcon」というサブキーを追加し、このファイルタイプに使用するアイコンを含むファイルにキーのデフォルト値を設定します。 「シェル」という別の兄弟を追加します。 「シェル」キーの下に、エクスプローラのコンテキストメニューで使用可能な各アクションのキーを追加し、各キーのデフォルト値を実行可能ファイルのパスに続けてスペースを設定し、 "%1"を使用してパスを表す選択されたファイルに移動します。

例えば、ここではサンプルのレジストリファイルは、.txtファイルとEmEditorの間の関連付けを作成することです:

ます。Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\.txt] 
@="emeditor.txt" 

[HKEY_CLASSES_ROOT\emeditor.txt] 
@="Text Document" 

[HKEY_CLASSES_ROOT\emeditor.txt\DefaultIcon] 
@="%SystemRoot%\\SysWow64\\imageres.dll,-102" 

[HKEY_CLASSES_ROOT\emeditor.txt\shell] 

[HKEY_CLASSES_ROOT\emeditor.txt\shell\open] 

[HKEY_CLASSES_ROOT\emeditor.txt\shell\open\command] 
@="\"C:\\Program Files\\EmEditor\\EMEDITOR.EXE\" \"%1\"" 

[HKEY_CLASSES_ROOT\emeditor.txt\shell\print] 

[HKEY_CLASSES_ROOT\emeditor.txt\shell\print\command] 
@="\"C:\\Program Files\\EmEditor\\EMEDITOR.EXE\" /p \"%1\"" 

クレジットの@ X-Cubedのに

2

filenameはアプリケーションの引数として渡されます。

public static void Main(string[] args) 
{ 
    if (args != null && args.Length > 0) 
    { 
    string filename = args[0]; 
    if (File.Exists (filename)) 
    { 
     //Open file 
    } 
    } 
} 
関連する問題