Меню ассоциации файлов реестра Windows - PullRequest
2 голосов
/ 26 февраля 2009

Я недавно (сегодня) начал вмешиваться в мой реестр в Delphi. :) все работает хорошо, и мой пользовательский тип файла теперь открывается с моей программой, но есть 2 проблемы, которые я не могу решить.

1) Я хотел, чтобы опция «открывалась» из всех типов файлов, поэтому я добавил

  reg := TRegistry.Create;
  reg.RootKey := HKEY_CLASSES_ROOT;
  reg.LazyWrite := false;
  reg.OpenKey('*\OpenWithList\EncryptionSystem', true);
  reg.WriteString('','C:\Program Files\EncryptionSystem\EncryptionSystem.exe "%1"');
  reg.CloseKey;
  reg.free;

Если я смотрю в реестре с помощью regedit, он точно там, как и должно быть, но когда я щелкаю правой кнопкой мыши на файле и выбираю Открыть с помощью, его там нет ...

Итак, я добавил это

  reg.OpenKey('*\shell\Encrypt\command', true);
  reg.WriteString('','C:\Program Files\EncryptionSystem\EncryptionSystem.exe "%1"');
  reg.CloseKey;

Это работает для каждого файла, но опция находится справа вверху с «open» и «edit». Я хочу, чтобы он появился в подразделе меню, как это делают большинство программ ... Я понял, что мне нужно поиграть с шеллекстом, но я не понимал структуру их работы с обработчиками контекстного меню ... Я все равно узнал все, что получил, прочитав реестр ... Я знаю название шеллекста появляется позже после «. *», но о значении больших дряблых клавиш я понятия не имею.

Ответы [ 3 ]

6 голосов
/ 26 февраля 2009

Похоже, что меню «Открыть с помощью» не заполняется только этим разделом реестра. Он превосходит список расширений, который хранится в проводнике в следующем месте:

HKCU \ Software \ Microsoft \ Windows \ CurrentVersion \ Explorer \ FileExts

Рискну предположить, что список, в который вы добавляете свое приложение, используется только в том случае, если в проводнике нет ничего лучше - только для файлов, у которых еще нет собственных списков «Открыть с помощью». определены.

Кроме того, похоже, что запись реестра «Открыть с помощью» должна иметь форму, отличную от той, которую вы используете. Ключом должно быть имя EXE-файла, например ExcryptionSystem.exe . Значение по умолчанию для этого ключа, если оно присутствует, должно быть пустой строкой. Я основываю это только на том, что вижу в реестре на моей собственной системе.

Обратите внимание на статью Типы файлов MSDN, часть Введение в ассоциации файлов .

1 голос
/ 26 февраля 2009

Глядя на реестр, похоже, что ваша строка должна быть изменена на.

С

reg.OpenKey('*\OpenWithList\EncryptionSystem', true);
reg.WriteString('','C:\Program Files\EncryptionSystem\EncryptionSystem.exe "%1"')

до

reg.OpenKey('*\OpenWithList\EncryptionSystem.exe', true); //note exe
reg.WriteString('','C:\Program Files\EncryptionSystem\EncryptionSystem.exe "%1"')

Сначала проверьте это.

0 голосов
/ 21 июня 2010

На моем W7P они не такие ссылки. Вместо этого они в ...

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts
...