На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! user posted image
Пожалуйста, выделяйте текст программы тегом [сode=pas] ... [/сode]. Для этого используйте кнопку [code=pas] в форме ответа или комбобокс, если нужно вставить код на языке, отличном от Дельфи/Паскаля.

Соблюдайте общие правила форума

Следующие вопросы задаются очень часто, подробно разобраны в FAQ и, поэтому, будут безжалостно удаляться:
1. Преобразовать переменную типа String в тип PChar (PAnsiChar)
2. Как "свернуть" программу в трей.
3. Как "скрыться" от Ctrl + Alt + Del (заблокировать их и т.п.)
4. Как запустить программу/файл? (и дождаться ее завершения)
5. Как перехватить API-функции, поставить hook? (перехват сообщений от мыши, клавиатуры - внедрение в удаленное адресное прстранство)
... (продолжение следует) ...

Внимание:
Попытки открытия обсуждений реализации вредоносного ПО, включая различные интерпретации спам-ботов, наказывается предупреждением на 30 дней.
Повторная попытка - 60 дней. Последующие попытки - бан.
Мат в разделе - бан на три месяца...

Полезные ссылки:
user posted image MSDN Library user posted image FAQ раздела user posted image Поиск по разделу user posted image Как правильно задавать вопросы


Выразить свое отношение к модераторам раздела можно здесь: user posted image Rouse_, user posted image Krid

Модераторы: Rouse_, Krid
  
> Найти все пункты меню Создать?
    Пытаюсь собрать в ListBox все расширения, которые отображаются в меню Windows "Создать". Все хорошо, но... Если большинство программ содержит ShellNew сразу после расширения:
    ExpandedWrap disabled
      HKEY_LOCAL_MACHINE\SOFTWARE\Classes\.txt\ShellNew

    то пакет Microsoft Office прячет ShellNew еще глубже:
    ExpandedWrap disabled
      HKEY_LOCAL_MACHINE\SOFTWARE\Classes\.docx\Word.Document.12\ShellNew

    Как мне найти и добавить такие ключи?


    ExpandedWrap disabled
      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;
      Пример обхода ветки реестра, адаптируй под себя
      ExpandedWrap disabled
        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;
        !
        navodri - читаем правила! RО неделя.
        0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
        0 пользователей:


        Рейтинг@Mail.ru
        [ Script execution time: 0,0523 ]   [ 16 queries used ]   [ Generated: 27.03.23, 01:44 GMT ]