Я нашел несколько способов зарегистрировать тип файла в моем собственном приложении (двойной щелчок по этому типу файла в проводнике Windows загружает этот файл в мое приложение). Некоторые из них очень старые и, по-видимому, устарели, другие неясны и не имеют практических примеров использования, что может привести к недоразумениям.
@AndreasRejbrand опубликовал здесь принятое решение: the-current-user">Как связать программу с типом файла, но только для текущего пользователя?
a) Не существует дополнительного способа ОТМЕНИТЬ РЕГИСТРАЦИЮ типа файла.
b ) Непонятно, что означает'MyAppDataFile'
.
c) Нет практических примеров использования.Библиотека
DSiWin32
содержит методыDSiRegisterUserFileAssoc
иDSiUnregisterUserFileAssoc
:
а)procedure DSiRegisterUserFileAssoc(const extension, progID, description, defaultIcon, openCommand: string);
аа) Непонятно, что означает параметрprogID
.
аб) Непонятно, как передать параметрdefaultIcon
.
ac) Непонятно, как передать параметрopenCommand
.
b)procedure DSiUnregisterUserFileAssoc(const progID: string);
ba) Непонятно, что означает параметрprogID
и как его форматировать.
c ) было бы неплохо иметь пример практического использования.
Кстати, это код от @AndreasRejbrand:
with TRegistry.Create do
try
RootKey := HKEY_CURRENT_USER;
if OpenKey('\Software\Classes\.myfile', true) then
WriteString('', 'MyAppDataFile');
if OpenKey('\Software\Classes\MyAppDataFile', true) then
WriteString('', 'My Very Own Text File Type');
if OpenKey('\Software\Classes\MyAppDataFile\DefaultIcon', true) then
WriteString('', 'C:\WINDOWS\notepad.exe');
if OpenKey('\Software\Classes\MyAppDataFile\shell\open\command', true) then
WriteString('', 'C:\WINDOWS\notepad.exe "%1"');
finally
Free;
end;
SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST, 0, 0);
Может ли кто-нибудь предоставить четкие и надежные примеры практического использования для обоих подходов? Какой лучше?
РЕДАКТИРОВАТЬ: с практическими примерами ИСПОЛЬЗОВАНИЯ я имею в виду: процедура/функция с примерными параметрами.
ContosoRichTextFile
,LitwareVideoFile
илиSuperappSettingsFile
. ИлиUser1580348StarTrekSimulatorStarshipModelFile
. Только он должен быть уникальным. в) Разве мой фрагмент кода и связанное с ним описание не являются практическим примером? :) Тем не менее, это старый подход. Вероятно, современный подход более сложен. - person Andreas Rejbrand   schedule 10.05.2021.starship
, поэтому первый ключ —.starship
, и вы можете использовать идентификаторuser1580348starship
. Затем вы даете ему описание, скажем,Starship model
, и указываете значок, который будет использоваться для таких файлов, а также приложение, которое должно открывать их при двойном щелчке. Довольно прямолинейно, не так ли? - person Andreas Rejbrand   schedule 10.05.2021DSiRegisterUserFileAssoc
, вы увидите, что он делает то же самое, что и мой код. github.com/gabr42/OmniThreadLibrary/blob/ - person Andreas Rejbrand   schedule 10.05.2021regedit
, Enter). - person Andreas Rejbrand   schedule 10.05.2021DSiUnregisterUserFileAssoc
:DSiKillRegistry('\Software\Classes\' + progID, HKEY_CURRENT_USER);
- person user1580348   schedule 10.05.2021Computer\HKEY_CURRENT_USER\Software\Classes\.txt
я не нахожу ссылки на Блокнот: есть толькоOpenWithList
, который полностью отличается от того, что я вижу, когда я вызываю подменю «Открыть с помощью» файла .TXT в проводнике. Я также просмотрел ключи\Software\Classes\.txt
других корней реестра, но не нашел никаких ссылок на Блокнот. Итак, как это будет работать, когда я попытаюсь зарегистрировать новый формат текстового файла (например, .MyCustomText) для Блокнота, следуя коду @AndreasRejbrand? - person user1580348   schedule 10.05.2021