How to handle File Associations from Application?

后端 未结 3 710
谎友^
谎友^ 2021-01-06 16:50

I know Installers can setup File Associations for your Application during the installation process, so if you have your own File types that open with your Application, it wi

相关标签:
3条回答
  • 2021-01-06 17:25

    try this unit to associate a certain extension to an exe remove the entries made in registry to unregister.

    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.
    

    Registry is defenetly the way to go with things...

    0 讨论(0)
  • 2021-01-06 17:26

    You can run the following command from your shell http://support.microsoft.com/kb/184082

    or you can make the entry in registry as shown in the following link http://www.daycounter.com/LabBook/Changing-File-Associations-With-Registry-Editor.phtml

    0 讨论(0)
  • 2021-01-06 17:30

    From your app you'd be better to use the per-user store for file associations. If you use the system wide registry location then you'd need to elevate in order to apply changes. That's not something you should do in a standard user app.

    Store the registry settings under:

    HKEY_CURRENT_USER\SOFTWARE\Classes
    

    The format of entries under there is exactly the same as under

    HKEY_LOCAL_MACHINE\SOFTWARE\Classes
    
    0 讨论(0)
提交回复
热议问题