ResourceString
eCannotCreateKey =
'Cannot create key %s, the user account may not have the required '+
'rights to create registry keys under HKEY_CLASSES_ROOT.';
Type
ERegistryError = Class( Exception );
{+------------------------------------------------------------
| Procedure CreateKey
|
| Visibility : restricted to unit
| Description:
| This is a helper function which uses the passed reg object
| to create a registry key.
| Error Conditions:
| If the key cannot be created a ERegistryError exception is
| raised.
| Created: 14.03.99 by P. Below
+------------------------------------------------------------}
Procedure CreateKey( reg: TRegistry; Const keyname: String );
Begin
If not reg.OpenKey( keyname, True ) Then
raise ERegistryError.CreateFmt( eCannotCreateKey, [keyname] );
End; { CreateKey }
{+------------------------------------------------------------
| Procedure InternalRegisterFiletype
|
| Parameters :
| extension : file extension, including the dot, to register
| filetype : string to use as key for the file extension
| description: string to show in Explorer for files with this
| extension. If description is empty the file
| type will not show up in Explorers list of
| registered associations!
| verb : action to register, 'open', 'edit', 'print' etc.
| The action will turn up as entry in the files
| context menu in Explorer.
| serverapp : full pathname of the executable to associate with
| the file extension, including any command line
| switches. Include the "%1" placeholder as well.
| Actions like printto may require more than one
| placeholder.
| Visibility : restricted to unit
| Description:
| Creates the three basic registry keys for a file extension.
| HKCR\<extension> = <filetype>
| HKCR\<filetype> = <description>
| HKCR\<filetype>\shell\<verb>\command = <serverapp>
| If the keys already exist they are overwritten!
| Error Conditions:
| A ERegistryError exception will result if a key cannot be
| created. Failure to create a key is usually due to insufficient
| user rights and only a problem on NT.
| Created: 14.03.99 by P. Below
+------------------------------------------------------------}
{+------------------------------------------------------------
[OBJECT]
| Procedure RegisterFiletype
[OBJECT]
|
| Parameters :
| extension : file extension, including the dot, to register
| filetype : string to use as key for the file extension
| description: string to show in Explorer for files with this
| extension. If description is empty the file
| type will not show up in Explorers list of
| registered associations!
| verb : action to register, 'open', 'edit', 'print' etc.
| The action will turn up as entry in the files
| context menu in Explorer.
| params : The command line parameters to pass to the
| app when a file action is requested. If this
| parameter is empty "%1" is used by default.
| Visibility : exported from unit
| Description:
| Builds the commandline to use from the applications filename
| and the passed params and hands the rest of the work off to
| InternalRegisterFiletype.
| Error Conditions: none
| Created: 20.03.99 by P. Below
+------------------------------------------------------------}
Procedure RegisterFiletype( Const extension, filetype, description,
verb: String; params: String );
Begin
If Length(params) = 0 Then
params := '"%1"';
InternalRegisterFiletype(
extension, filetype, description, verb,
ParamStr(0) + ' ' + params );
End; { RegisterFiletype }
{+------------------------------------------------------------
| Procedure RegisterFileIcon
|
| Parameters :
| filetype : file type key name to register the icon for
| iconsource: full pathname of the executable or ICO file
| that contains the icon
| iconindex : index of the icon to use, if several are containd
| in iconsource. Counts from 0!
| Visibility : exported from unit
| Description:
| Creates the registry keys required to tell Explorer which icon
| to display for files of this type. RegisterFileType needs
| to be called first to associate the filetype with an extension.
| The registry key added is
| HKCR\<filetype>\DefaultIcon = <iconsource>,<iconindex>
| If the key already exists it is overwritten!
| The icon specified should contain both large (32*32) and small
| (16*16) versions of the icon, to optain optimal display
| quality. If only one icon format is present Windows will
| generate the other from it.
| Error Conditions:
| A ERegistryError exception will result if a key cannot be
| created. Failure to create a key is usually due to insufficient
| user rights and only a problem on NT.
| Error Conditions: none
| Created: 21.03.99 by P. Below
+------------------------------------------------------------}
Procedure RegisterFileIcon( Const filetype, iconsource: String;
iconindex: Cardinal );
Var
reg: TRegistry;
keystring: String;
Begin
reg:= TRegistry.Create;
Try
reg.Rootkey := HKEY_CLASSES_ROOT;
keystring := Format( '%s\DefaultIcon',[filetype] );
CreateKey( reg, keystring );
reg.WriteString( '', Format( '%s,%d', [iconsource,iconindex] ));
reg.CloseKey;
Finally
reg.free;
End;
End; { RegisterFileIcon }
{+------------------------------------------------------------
[OBJECT]
| Function FiletypeIsRegistered
[OBJECT]
|
| Parameters :
| extension : file extension, including the dot, to search for
| filetype : string to use as key for the file extension
| Returns : True if this application is registered as server
| for the 'open' action, false otherwise.
| Visibility : exported from unit
| Description:
| Checks if there is a registry entry for the passed extension,
| if it is associated with the expected file type and if this
| application is registered as server for the 'open' action.
| Error Conditions: none
| Created: 21.03.99 by P. Below
+------------------------------------------------------------}
Function FiletypeIsRegistered( Const extension, filetype: String ):
Boolean;
Var
reg: TRegistry;
keystring: String;
Begin
Result := False;
reg:= TRegistry.Create;
Try
reg.Rootkey := HKEY_CLASSES_ROOT;
If reg.OpenKey(extension, false) Then Begin
{ Extension is registered, check filetype }
keystring := reg.ReadString('');
reg.Closekey;
If CompareText( keystring, filetype) = 0 Then Begin
{ Filetype is registered for this extension, check server. }
keystring := Format( '%s\shell\open\command',[filetype] );
If reg.OpenKey( keystring, false ) Then Begin
{ Command key exists, but is this app the server? }
keystring := UpperCase( reg.ReadString(''));
reg.CloseKey;
If Pos( UpperCase(ParamStr(0)), keystring ) = 1 Then Begin
{ Yes, server matches! }
Result := True;
End; { If }
End; { If }
End; { If }
End; { If }
Finally
reg.free;
End;
End; { FiletypeIsRegistered }
End { Unit Associations }.
Эта единица Delphi, называемая "Unit Associations", предназначена для регистрации и управления файловыми ассоциациями в реестре Windows.
Процедуры
RegisterFiletype: Регистрирует новую файловую типовую ассоциацию в реестре Windows, включая создание трех основных ключей реестра.
RegisterFileIcon: Регистрирует иконку для файловой типовой ассоциации.
CreateKey: Создает ключ реестра с помощью переданного объекта TRegistry.
Функции
FiletypeIsRegistered: Проверяет, зарегистрирована ли файловая типовая ассоциация и возвращает булевое значение, указывающее, является ли приложение сервером для действия 'open'.
Типы
ERegistryError: Класс исключения, предназначенный для обработки ошибок реестра.
Ресурсы
eCannotCreateKey: Строка ресурса, используемая для отображения сообщения об ошибке при создании ключа реестра.
Код использует компонент TRegistry для взаимодействия с реестром Windows. Он предлагает набор процедур и функций для регистрации файловых ассоциаций, создания ключей реестра и проверки зарегистрированной файловой типовой ассоциации.
Некоторые заметные особенности:
Процедура RegisterFiletype создает три основных ключа реестра: <extension> = <filetype>, <filetype> = <description> и <filetype>\shell\<verb>\command = <serverapp>.
Процедура RegisterFileIcon регистрирует иконку для файловой типовой ассоциации, создавая ключ реестра HKCR\<filetype>\DefaultIcon с значениями <iconsource>,<iconindex>.
Функция FiletypeIsRegistered проверяет, зарегистрирована ли файловая типовая ассоциация и возвращает булевое значение, указывающее, является ли приложение сервером для действия 'open'.
В целом, эта единица предлагает набор утилит для управления файловыми ассоциациями в приложениях Delphi.
описано создание и регистрация типов файлов, а также изменение и удаление существующих типов файлов в Windows.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.