How to handle File Associations from Application?

拥有回忆 提交于 2019-12-01 00:07:47

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...

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

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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!