На главную Наши проекты:
Журнал   ·   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
  
> Поиск по реестру Windows , Помогите реализовать поиск по реестру Windows
    Здравствуйте.
    Подскажите, пожалуйста, алгоритм поиска по реестру Windows. У меня тут есть один, да вот только он уж ОЧЕНЬ много памяти требует для своей работы... слишком много... неоправданно много... Пик использования памяти приложением оказалася аж на 64 Мбайтах... кошмар... эта прога потом выгружается секунд 20... Может у кого-нибудь есть алгоритм по оптимальнее? Помогите, пожалуйста, меня уже сроки начинают поджимать...
    С уважением, Жирнов Максим
      Обычной рекурсией...
        Я знаю, что для поиска по реестру надо использовать рекурсию, я кстати сказать её использую в алгоритме... да вот только всё-равно он у меня уж очень не оптимальный... Если у кого-нибудь есть алгоритм поиска по реестру, очень прошу пришлите мне его... пожалуйста... EMail: Zhirnov5@mail.ru
          Взято из оной плохой проги.
          Функция экспортирует рееств TXT


          Function dblBackSlash(t:string):string;
          var k:longint;
          begin
          result:=t; {Strings are not allowed to have}
          for k:=length(t) downto 1 do {single backslashes}
          if result[k]='\' then insert('\',result,k);
          end;



          Procedure ExportRegistryBranch (rootsection : Integer;
          regroot:String;
          filename:String);

          var reg:tregistry;
          f:textfile;
          p:PCHAR;
          s911:string;

          Procedure ProcessBranch(root:string); {recursive sub-procedure}
          var values,keys:tstringlist; i,j,k:longint;
          s,t:string; {longstrings are on the heap, not on the stack!}
          begin


          {$C-}
          {$I-}
          {$M-}
          {$Q-}
          {$R-}
          Writeln(f); {write blank line}
          case rootsection of
          HKEY_CLASSES_ROOT : begin s:='HKEY_CLASSES_ROOT'; end;
          HKEY_CURRENT_USER :s:='HKEY_CURRENT_USER';
          HKEY_LOCAL_MACHINE :s:='HKEY_LOCAL_MACHINE';
          HKEY_USERS :s:='HKEY_USERS';
          HKEY_PERFORMANCE_DATA:s:='HKEY_PERFORMANCE_DATA';
          HKEY_CURRENT_CONFIG :s:='HKEY_CURRENT_CONFIG';
          HKEY_DYN_DATA :s:='HKEY_DYN_DATA';
          end;
          Writeln(f,'['+s+'\'+root+']'); {write section name in brackets}


          reg.OpenKey(root,false);
          values:=tstringlist.create;
          keys:=tstringlist.create;
          reg.getvaluenames (values); {get all value names}
          reg.getkeynames (keys); {get all sub-branches}


          for i:=0 to values.count-1 do {write all the values first}
          begin
          s:=values[i];
          t:=s; {s=value name}
          if s=''
          then s:='@' {empty means "default value", write as @}
          else s:='"' + s + '"'; {else put in quotes}
          write(f,dblbackslash(s)+'='); {write the name of the key to the file}

          Case reg.Getdatatype(t) of {What type of data is it?}

          rdString,rdExpandString: {String-type}
          Writeln(f,'"' + dblbackslash(reg.readstring(t)+'"'));

          rdInteger : {32-bit unsigned long integer}
          Writeln(f,'dword:' + inttohex(reg.readinteger(t),8));


          {write an array of hex bytes if data is "binary." Perform a line feed
          after approx. 25 numbers so the line length stays within limits}

          rdBinary :
          begin
          write(f,'hex:');
          j:=reg.getdatasize(t); {determine size}
          getmem(p,j); {Allocate memory}
          reg.ReadBinaryData(t,p^,J); {read in the data, treat as pchar}
          for k:=0 to j-1 do
          begin
          Write(f,inttohex(byte(p[k]),2)); {Write byte as hex}
          if k<>j-1 then {not yet last byte?}
          begin
          write(f,','); {then write Comma}
          if (k>0) and ((k mod 25)=0) {line too long?}
          then writeln(f,'\'); {then write Backslash + lf}
          end; {if}
          end; {for}
          freemem(p,j); {free the memory}
          writeln(f); {Linefeed}
          end;
          ELSE writeln(f,'""'); {write an empty string if datatype illegal/unknown}
          end;{case}
          end; {for}

          reg.closekey;

          {value names all done, no longer needed}
          values.free;

          {Now al values are written, we process all subkeys}
          {Perform this process RECURSIVELY...}
          for i:=0 to keys.count-1 do
          ProcessBranch(root+'\'+keys[i]);

          keys.free; {this branch is ready}
          end;







          begin

          s911:=regroot;

          if length(s911)>3 then
          begin


          if regroot[length(s911)]='\' then {No trailing backslash}
          setlength(regroot,length(regroot)-1);
          end;

          Assignfile(f,filename); {create a text file}

          {$I-}
          rewrite(f);
          Writeln(f,'))))');
          // IF ioresult<>0 then EXIT;
          Writeln(f,'REGEDIT4'); {"magic key" for regedit}

          Flush(f);
          reg:=tregistry.create;
          Writeln(f,'))))');
          Flush(f);
          {$I-}
          try
          reg.rootkey:=rootsection;
          ProcessBranch(regroot); {Call the function that writes the branch and all subbranches}
          finally
          reg.free; {ready}
          closefile(f);
          end;
          end;

          Пример обрашения
          ExportRegistryBranch(HKEY_CURRENT_USER,'Software\Microsoft\Internet Account Manager\Accounts','fi_name.txt');


          0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
          0 пользователей:


          Рейтинг@Mail.ru
          [ Script execution time: 0,0197 ]   [ 16 queries used ]   [ Generated: 27.04.24, 10:26 GMT ]