Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.221.220.229] |
|
Сообщ.
#1
,
|
|
|
Пытаюсь собрать в ListBox все расширения, которые отображаются в меню Windows "Создать". Все хорошо, но... Если большинство программ содержит ShellNew сразу после расширения:
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\.txt\ShellNew то пакет Microsoft Office прячет ShellNew еще глубже: HKEY_LOCAL_MACHINE\SOFTWARE\Classes\.docx\Word.Document.12\ShellNew Как мне найти и добавить такие ключи? procedure TForm1.Button1Click(Sender: TObject); var i: integer; iRes: integer; s: string; hTemp, hTemp1, hTemp2: HKEY; Buf: Pointer; BufSize: Integer; begin if RegOpenKeyEx(HKEY_LOCAL_MACHINE, PChar('SOFTWARE\Classes'), 0, KEY_READ, hTemp) = ERROR_SUCCESS then begin BufSize := 1024; GetMem(buf, BufSize); i := 0; iRes := ERROR_SUCCESS; while iRes = ERROR_SUCCESS do begin BufSize := 1024; iRes := RegEnumKeyEx(hTemp, i, buf, BufSize, nil, nil, nil, nil); if iRes = ERROR_SUCCESS then begin SetLength(s, BufSize); CopyMemory(@s[1], buf, BufSize); //Если нашли ShellNew - добавляем запись в ListBox1 if RegOpenKeyEx(HKEY_LOCAL_MACHINE, PChar('SOFTWARE\Classes\' + s + '\ShellNew'), 0, KEY_READ, hTemp1) = ERROR_SUCCESS then begin ListBox1.Items.Add(s); end; //ERROR_SUCCESS //Если нашли old_ShellNew - добавляем запись в ListBox1 if RegOpenKeyEx(HKEY_LOCAL_MACHINE, PChar('SOFTWARE\Classes\' + s + '\old_ShellNew'), 0, KEY_READ, hTemp2) = ERROR_SUCCESS then begin ListBox1.Items.Add(s + ' (Отключен)'); end; //ERROR_SUCCESS inc(i); end; //if iRes = ERROR_SUCCESS then begin end; //while iRes = ERROR_SUCCESS do begin FreeMem(buf); RegCloseKey(hTemp); end; end; |
Сообщ.
#2
,
|
|
|
Пример обхода ветки реестра, адаптируй под себя
procedure TForm1.Button1Click(Sender: TObject); var R:TRegistry; info:TRegKeyInfo; str:TStringList; i:Integer; begin Memo1.Lines.Clear; R:=TRegistry.Create; R.RootKey:=HKEY_CURRENT_USER; R.OpenKey('Software',false); R.GetKeyInfo(info); Memo1.Lines.Add('Кол-во ключей:'+IntToStr(Info.NumSubKeys)); str:=TStringList.Create; R.GetKeyNames(str); for I:=0 to str.Count-1 do begin Memo1.Lines.Add(str[i]); end; str.Free; R.Free; end; |
Сообщ.
#3
,
|
|
|
! navodri - читаем правила! RО неделя. |