Пытаюсь собрать в 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;
|
|