Найти все пункты меню Создать?
    
  ![]()  | 
Наши проекты:
 Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту  | 
|
| ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS | 
| [216.73.216.5] | 
 
 | 
		
  | 
    
  
 MSDN Library 
 FAQ раздела 
 Поиск по разделу  
  Как правильно задавать вопросы
    Найти все пункты меню Создать?
    
  | 
         
         
         
          
           Сообщ.
           #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О неделя.  |