|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
||||
|
||||
Библиотека интеграции в меню проводника 64-бит
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; Начинающий программист уверен, что в 1 килобайте 1000 байт.
Законченный программист уверен, что в 1 километре 1024 метра. |
#2
|
|||
|
|||
для начала:
Цитата:
Еще. Ключ надо закрывать через RegCloseKey(hKey); |
#3
|
||||
|
||||
Про "два" реестра я знаю. Но работаю с веткой HKEY_CLASSES_ROOT, а она, как я понял, не дублируется. Да и странно, что для папок запись проходит нормально, а для файлов - нет.
И я заметил, что 64-битная версия все же меняет в реестре записи для файлов, но не так как надо. Я создаю в ветке типа файла ветку "shellex", потом там же ветку "ContextMenuHandlers", в ней еще ветку с названием программы и устанавливаю в ее значение мой CLSID. В 32-битной версии все так и получается, а вот в 64-битной ветка "shellex" вообще не создается, а вот значение у главной ветки типа файла (иными словами описание типа файла в проводнике) заменяется на мой CLSID. Начинающий программист уверен, что в 1 килобайте 1000 байт.
Законченный программист уверен, что в 1 километре 1024 метра. |