|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Delphi - [решено] Вопрос по библиотеке JEDI (модуль JclRegistry ) |
|
Delphi - [решено] Вопрос по библиотеке JEDI (модуль JclRegistry )
|
Ветеран Сообщения: 1158 |
Привет всем ! Столкнулся с такой проблемой . Нужно удалить ключ реестра со всеми подключами.
Проблема на x64 системе , а у меня x32 приложения . Соответственно моя программа ищет этот в ключе Wow6432Node. Решения я нашёл не используя библиотеку JEDI так: Скрытый текст
procedure TForm1.Button1Click(Sender: TObject); var Reg: TRegistry; begin Reg := TRegistry.Create(); if IsWindows64=true then begin Reg.Access := $100 or KEY_ALL_ACCESS; end; try Reg.RootKey := HKEY_LOCAL_MACHINE; if Reg.KeyExists('\Software\Microsoft\WIMMount') then Reg.DeleteKey('Software\Microsoft\WIMMount'); finally Reg.Free; end;end; Всё работает и удаляется . Но хотелось бы обойтись средствами библиотеки JEDI Скрытый текст
Набросал код : procedure TForm1.Button2Click(Sender: TObject); var RootKey: HKEY; PathKEY:String; begin if IsWindows64=true then begin RegSetWOW64AccessMode(ra64Key); end; RootKey := HKEY_LOCAL_MACHINE; PathKEY:='Software\Microsoft\WIMMount'; if not RegKeyExists (RootKey,PathKEY) then begin Memo1.Lines.Add('- [ Ошибка ] Ключ не найден') end else begin Memo1.Lines.Add('[ ОК ] Ключ найден'); if not RegDeleteKeyTree (RootKey,PathKEY)then begin Memo1.Lines.Add('[ Ошибка ] Ключ не удалён') end else begin Memo1.Lines.Add('[ ОК ] Ключ удалён'); end; end; end; end. Ключ находит, но не удаляет =((( Что нужно ещё добавить ??? Помогите, плиз! |
|
------- Отправлено: 23:47, 24-02-2016 |
Ветеран Сообщения: 1273
|
Профиль | Отправить PM | Цитировать Цитата opel431:
Вариант №1. С использованием RegDeleteKeyEx
function RegDeleteKeyTree(const RootKey: DelphiHKEY; const Key: string): Boolean; var RegKey: HKEY; I: DWORD; Size: DWORD; NumSubKeys: DWORD; MaxSubKeyLen: DWORD; KeyName: string; begin RegKey := 0; Result := InternalRegOpenKeyEx(RootKey, RelativeKey(RootKey, PChar(Key)), 0, KEY_ALL_ACCESS, RegKey) = ERROR_SUCCESS; if Result then begin RegQueryInfoKey(RegKey, nil, nil, nil, @NumSubKeys, @MaxSubKeyLen, nil, nil, nil, nil, nil, nil); if NumSubKeys <> 0 then for I := NumSubKeys - 1 downto 0 do begin Size := MaxSubKeyLen+1; SetLength(KeyName, Size); RegEnumKeyEx(RegKey, I, PChar(KeyName), Size, nil, nil, nil, nil); SetLength(KeyName, StrLen(PChar(KeyName))); Result := RegDeleteKeyTree(RootKey, Key + RegKeyDelimiter + KeyName); if not Result then Break; end; RegCloseKey(RegKey); if Result then if IsWindows64 then Result := {$IFDEF HAS_UNITSCOPE}Winapi.{$ENDIF}Windows.RegDeleteKeyEx(RootKey, RelativeKey(RootKey, PChar(Key)), GetWOW64AccessMode(KEY_ALL_ACCESS), 0) = ERROR_SUCCESS else Result := {$IFDEF HAS_UNITSCOPE}Winapi.{$ENDIF}Windows.RegDeleteKey(RootKey, RelativeKey(RootKey, PChar(Key))) = ERROR_SUCCESS; end else WriteError(RootKey, Key); end; Вариант №2. С использованием RegDeleteKey и RegKey в качестве первого параметра
function RegDeleteKeyTree(const RootKey: DelphiHKEY; const Key: string): Boolean; var RegKey: HKEY; I: DWORD; Size: DWORD; NumSubKeys: DWORD; MaxSubKeyLen: DWORD; KeyName: string; begin RegKey := 0; Result := InternalRegOpenKeyEx(RootKey, RelativeKey(RootKey, PChar(Key)), 0, KEY_ALL_ACCESS, RegKey) = ERROR_SUCCESS; if Result then begin RegQueryInfoKey(RegKey, nil, nil, nil, @NumSubKeys, @MaxSubKeyLen, nil, nil, nil, nil, nil, nil); if NumSubKeys <> 0 then for I := NumSubKeys - 1 downto 0 do begin Size := MaxSubKeyLen+1; SetLength(KeyName, Size); RegEnumKeyEx(RegKey, I, PChar(KeyName), Size, nil, nil, nil, nil); SetLength(KeyName, StrLen(PChar(KeyName))); Result := RegDeleteKeyTree(RegKey, KeyName); if not Result then Break; end; if Result then Result := {$IFDEF HAS_UNITSCOPE}Winapi.{$ENDIF}Windows.RegDeleteKey(RegKey, PChar('')) = ERROR_SUCCESS; RegCloseKey(RegKey); end else WriteError(RootKey, Key); end; Вариант №3. С использованием SHDeleteKey, в которой рекурсия уже реализована
uses ShLwApi; function RegDeleteKeyTree(const RootKey: HKEY; const Key: string): Boolean; var RegKey: HKEY; begin RegKey := 0; Result := InternalRegOpenKeyEx(RootKey, RelativeKey(RootKey, PChar(Key)), 0, KEY_ALL_ACCESS, RegKey) = ERROR_SUCCESS; if Result then begin Result := {$IFDEF HAS_UNITSCOPE}Winapi.{$ENDIF}ShLwApi.SHDeleteKey(RegKey, PChar('')) = ERROR_SUCCESS; RegCloseKey(RegKey); end else WriteError(RootKey, Key); end; |
|
Отправлено: 12:43, 06-03-2016 | #41 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
![]() Ветеран Сообщения: 1803
|
Профиль | Отправить PM | Цитировать 1. Дружище, искреннее спасибо за развернутый пример.
2. Думаю, что подмена моего ответа случайна Цитата opel431:
Цитата El Sanchez:
Цитата opel431:
|
|||
------- Последний раз редактировалось opel431, 06-03-2016 в 18:35. Отправлено: 14:01, 06-03-2016 | #42 |
Ветеран Сообщения: 1158
|
Профиль | Отправить PM | Цитировать opel431, El Sanchez, просветите??? Я попробовал все функции от El Sanchez и получил такой же самый результат . Функции лезут не в ту ветку реестра
|
------- Отправлено: 16:03, 06-03-2016 | #43 |
![]() Ветеран Сообщения: 1803
|
Профиль | Отправить PM | Цитировать Цитата Painkiller:
Цитата Painkiller:
|
||
------- Последний раз редактировалось opel431, 06-03-2016 в 17:58. Отправлено: 17:14, 06-03-2016 | #44 |
Ветеран Сообщения: 1158
|
Профиль | Отправить PM | Цитировать opel431, заработало, правда слишком много кода
![]() |
------- Последний раз редактировалось Painkiller, 06-03-2016 в 17:59. Отправлено: 17:53, 06-03-2016 | #45 |
![]() Ветеран Сообщения: 1803
|
Профиль | Отправить PM | Цитировать Цитата Painkiller:
|
|
------- Последний раз редактировалось opel431, 06-03-2016 в 18:12. Отправлено: 18:07, 06-03-2016 | #46 |
Ветеран Сообщения: 1158
|
Профиль | Отправить PM | Цитировать Цитата opel431:
|
|
------- Отправлено: 18:16, 06-03-2016 | #47 |
Ветеран Сообщения: 1273
|
Профиль | Отправить PM | Цитировать Еще позанудствую. Цитата opel431:
Цитата opel431:
|
||
Отправлено: 09:57, 09-03-2016 | #48 |
Ветеран Сообщения: 1158
|
Профиль | Отправить PM | Цитировать |
------- Последний раз редактировалось Painkiller, 09-03-2016 в 22:33. Отправлено: 20:34, 09-03-2016 | #49 |
![]() Ветеран Сообщения: 1803
|
Профиль | Отправить PM | Цитировать Цитата El Sanchez:
Цитата Painkiller:
1. Если в приложении нужна поддержка визуальных стилей, а повышение прав, только в случаях, когда пользователь этого затребует - выполняя определенные действия над защищенными файлами. Иногда нет необходимости предоставлять права в манифесте. 2. Запрашивать и выгружать можно определенные права, а также проверять их наличие и доступность. |
||
------- Последний раз редактировалось opel431, 10-03-2016 в 00:02. Отправлено: 23:01, 09-03-2016 | #50 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
2008 - Вопрос по программе для открытия рисунков по умолчанию | flower | Windows Server 2008/2008 R2 | 4 | 18-10-2010 17:22 | |
Прочее - вопрос по загрузке образов cd/dvd дисков по сети | andi_filon | Общий по Linux | 4 | 21-08-2009 14:48 | |
Вопрос по платформам обработки данных и еще по всяким непонятным словам :) | koresaram | Хочу все знать | 8 | 19-02-2009 18:26 | |
Jedi Concentrate (Концентрируемся на окнах) | yurfed | Программное обеспечение Windows | 0 | 22-12-2007 10:05 | |
Star Wars: Jedi Knight 2 | Mihan | Игры | 8 | 03-11-2003 11:50 |
|