![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
||||
|
||||
|
Windows 8.1 64-bit
Delphi XE2 Есть библиотека интеграции в меню проводника, добавляет пункт меню для определенных типов файлов и для папок. 32-битная версия работает нормально, а вот 64-битная версия добавляет пункт только для папок, а для файлов - нет. Причем функция записи в реестр выдает положительный результат, что значит, что запись проходит, но открыв regedit, записи я не вижу(ветка shellex не создается). В чем проблема - уже всю голову сломал. Вот функция записи в реестр: Код:
function CreateRegKey(const Key, ValueName, Value: string;
RootKey: UINT_PTR = HKEY_CLASSES_ROOT): boolean;
var
Handle: HKey;
Status, Disposition: Integer;
begin
Status:= RegCreateKeyEx(RootKey, PChar(Key), 0, '',
REG_OPTION_NON_VOLATILE, KEY_READ or KEY_WRITE, nil, Handle,
@Disposition);
if Status = ERROR_SUCCESS then
begin
Status:= RegSetValueEx(Handle, PChar(ValueName), 0, REG_SZ,
PChar(Value), Length(Value)*2 + 2);
RegCloseKey(Handle);
end;
Result:= (Status = ERROR_SUCCESS);
end; |
|
#2
|
|||
|
|||
|
для начала:
Цитата:
Еще. Ключ надо закрывать через RegCloseKey(hKey); |
|
#3
|
||||
|
||||
|
Про "два" реестра я знаю. Но работаю с веткой HKEY_CLASSES_ROOT, а она, как я понял, не дублируется. Да и странно, что для папок запись проходит нормально, а для файлов - нет.
И я заметил, что 64-битная версия все же меняет в реестре записи для файлов, но не так как надо. Я создаю в ветке типа файла ветку "shellex", потом там же ветку "ContextMenuHandlers", в ней еще ветку с названием программы и устанавливаю в ее значение мой CLSID. В 32-битной версии все так и получается, а вот в 64-битной ветка "shellex" вообще не создается, а вот значение у главной ветки типа файла (иными словами описание типа файла в проводнике) заменяется на мой CLSID. |