3

インストーラーはインストールプロセス中にアプリケーションのファイルの関連付けを設定できることを知っています。そのため、アプリケーションで開く独自のファイルタイプがある場合は、それを行うように設定されます。また、関連付けられたファイルには、Windowsで独自のアイコンがあります。あなたが定義します。

とにかく、アプリケーションの設定フォームから直接、アプリケーションが使用するファイルの種類を設定/削除できるようにしたいと思います。

これを行うにはどのような方法が必要ですか。レジストリの方針に沿って考えていますが、レジストリが進むべき道である場合、どのキー/値などを使用するのでしょうか。

いくつかのアドバイスとヒントに感謝します。XP/Vista/7で動作することも重要です。

前もって感謝します。

4

3 に答える 3

3

このユニットを試して、特定の拡張機能をexeに関連付け、レジストリに作成されたエントリを削除して登録を解除してください。

unit utils; 

interface 
uses Registry, ShlObj, SysUtils, Windows; 

procedure RegisterFileType(cMyExt, cMyFileType, cMyDescription, ExeName: string; IcoIndex: integer; DoUpdate: boolean = false); 

implementation 

procedure RegisterFileType(cMyExt, cMyFileType, cMyDescription, ExeName: string; IcoIndex: integer; DoUpdate: boolean = false); 
var 
   Reg: TRegistry; 
begin 
  Reg := TRegistry.Create; 
  try 
    Reg.RootKey := HKEY_CLASSES_ROOT; 
    Reg.OpenKey(cMyExt, True); 
    // Write my file type to it. 
    // This adds HKEY_CLASSES_ROOT\.abc\(Default) = 'Project1.FileType' 
    Reg.WriteString('', cMyFileType); 
    Reg.CloseKey; 
    // Now create an association for that file type 
    Reg.OpenKey(cMyFileType, True); 
    // This adds HKEY_CLASSES_ROOT\Project1.FileType\(Default) 
    //   = 'Project1 File' 
    // This is what you see in the file type description for 
    // the a file's properties. 
    Reg.WriteString('', cMyDescription); 
    Reg.CloseKey;    // Now write the default icon for my file type 
    // This adds HKEY_CLASSES_ROOT\Project1.FileType\DefaultIcon 
    //  \(Default) = 'Application Dir\Project1.exe,0' 
    Reg.OpenKey(cMyFileType + '\DefaultIcon', True); 
    Reg.WriteString('', ExeName + ',' + IntToStr(IcoIndex)); 
    Reg.CloseKey; 
    // Now write the open action in explorer 
    Reg.OpenKey(cMyFileType + '\Shell\Open', True); 
    Reg.WriteString('', '&Open'); 
    Reg.CloseKey; 
    // Write what application to open it with 
    // This adds HKEY_CLASSES_ROOT\Project1.FileType\Shell\Open\Command 
    //  (Default) = '"Application Dir\Project1.exe" "%1"' 
    // Your application must scan the command line parameters 
    // to see what file was passed to it. 
    Reg.OpenKey(cMyFileType + '\Shell\Open\Command', True); 
    Reg.WriteString('', '"' + ExeName + '" "%1"'); 
    Reg.CloseKey; 
    // Finally, we want the Windows Explorer to realize we added 
    // our file type by using the SHChangeNotify API. 
    if DoUpdate then SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST, nil, nil); 
  finally 
    Reg.Free; 
  end; 
end; 

end.

レジストリは間違いなく物事を進める方法です...

于 2011-07-15T08:15:35.023 に答える
3

アプリからは、ファイルの関連付けにユーザーごとのストアを使用することをお勧めします。システム全体のレジストリの場所を使用する場合は、変更を適用するために昇格する必要があります。これは、標準のユーザーアプリで行うべきことではありません。

レジストリ設定を次の場所に保存します。

HKEY_CURRENT_USER\SOFTWARE\Classes

その下のエントリの形式は、下とまったく同じです。

HKEY_LOCAL_MACHINE\SOFTWARE\Classes
于 2011-07-15T08:56:44.813 に答える
0

シェルから次のコマンドを実行できます http://support.microsoft.com/kb/184082

または、次のリンクhttp://www.daycounter.com/LabBook/Changing-File-Associations-With-Registry-Editor.phtmlに示すように、レジストリにエントリを作成できます 。

于 2011-07-15T08:17:43.933 に答える