Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Протоколирование изменений в реестре.

37K
03 мая 2008 года
Cerber24
7 / / 03.05.2008
Прошу помочь с заданием, буду очень признателен!!!!
1) Протоколирование моментов изменений в заданном разделе реестра, протокол должен формироваться как текстовый файл.

2) Проверка наличия указанных в реестре файлов и каталогов на диске с формированием протокола несоответствий. Протокол должен быть сформирован как текстовый файл.
Заранее спс всем!
261
03 мая 2008 года
ahilles
1.5K / / 03.11.2005
Цитата: Cerber24

1) Протоколирование моментов изменений в заданном разделе реестра, протокол должен формироваться как текстовый файл.


надо писать что-то типа regmon. он мониторит через перехват функций в SDT.

Цитата: Cerber24

2) Проверка наличия указанных в реестре файлов и каталогов на диске с формированием протокола несоответствий. Протокол должен быть сформирован как текстовый файл.


чего тут сложного? ствндартная функция Delphi - FileExists и DirectoryExists, получаешь имена из реестра и проверяешь существование файлов и папок.

257
03 мая 2008 года
kosfiz
1.6K / / 18.09.2005
1. смотри в сторону функции RegNotifyChangeKeyValue
2. тебе понадобится перебирать ключи с помощью соответствующих функций RegEnumXXX
257
08 мая 2008 года
kosfiz
1.6K / / 18.09.2005
реакция на изменения http://forum.codenet.ru/showpost.php?p=244396&postcount=5
37K
08 мая 2008 года
Cerber24
7 / / 03.05.2008
Благодарю! )))
37K
12 мая 2008 года
Cerber24
7 / / 03.05.2008
Такой вопрос, почему я вместо сообщения не могу в мемо допустим при каждом изменении строчку кидать?! почему-то ошибку пишет!
257
12 мая 2008 года
kosfiz
1.6K / / 18.09.2005
можешь, только функция должна 'знать', что такое Memo. а на данный момент она у тебя не 'знает', что такое Memo.
37K
12 мая 2008 года
Cerber24
7 / / 03.05.2008
Понимаю что туплю, но чет все равно работать не хочет, после компиляции ошибку выводит!
Код:
function isNotify(p:pointer):dword; stdcall;
var
MainMemo: TMemo;
begin
 Result:=0;
   while true do
   if RegNotifyChangeKeyValue(HKEY_CURRENT_USER, true, REG_NOTIFY_CHANGE_NAME or REG_NOTIFY_CHANGE_LAST_SET or REG_NOTIFY_CHANGE_ATTRIBUTES or REG_NOTIFY_CHANGE_SECURITY, 0, false)=ERROR_SUCCESS then
    begin

   MainMemo.Lines.Add('Произошло изменение');
   

   end;

end;

procedure TForm1.Button4Click(Sender: TObject);
var
  thrid: dword;
begin
  thrNotify:= CreateThread(nil, 0, @isNotify, nil, 0, thrid);
end;

procedure TForm1.Button5Click(Sender: TObject);
begin
  TerminateThread(thrNotify, 0);
end;
257
13 мая 2008 года
kosfiz
1.6K / / 18.09.2005
вообщем так. сначала покажу как примерно можно сделать второй пункт, т.е. нахождение несоответствий. вот код:
[highlight=delphi]
uses
SysUtils, windows;

procedure EnumFunc(kkey: HKEY; ss: string);
var
skey: HKEY;
index, skeyname, svalname, indexv: dword;
keyname, valname: array[0..255]of char;
ptype, spdata, stmp: dword;
pdata, tmp: pointer;
s: string;
begin
index:=0;
GetMem(pdata, 256);
GetMem(tmp, 256);
spdata:=256;
stmp:=256;
indexv:=0;
while RegEnumValue(kkey, indexv, valname, svalname, nil, @ptype, pdata, @spdata)=ERROR_SUCCESS do
begin
if ptype=REG_SZ then
begin
SetLength(s, spdata-1);
CopyMemory(@s[1], pdata, spdata-1);
if pos(':\', s)=2 then
if not fileexists(s) then
writeln('key: ' + ss + ' ; value: ' + s);
end;
inc(indexv);
end;
while RegEnumKey(kkey, index, keyname, skeyname)<>ERROR_NO_MORE_ITEMS do
begin
if RegOpenKey(kkey, keyname, skey)=ERROR_SUCCESS then
begin
ss:=ss+'\';
ss:=ss+keyname;
EnumFunc(skey, ss);
RegCloseKey(skey);
end;
inc(index);
end;
FreeMem(pdata, 256);
FreeMem(tmp, 256)
end;

var
key: HKEY;
begin
if RegOpenKey(HKEY_CURRENT_USER, 'Software\ABBYY', key)=ERROR_SUCCESS then
begin
EnumFunc(key, 'Software\ABBYY\');
RegCloseKey(key);
end;
readln;
end.
[/highlight]
вообщем выводит несоответствия в консоль. как сделать, чтоб в файл - твоя забота(это не страшно).
257
13 мая 2008 года
kosfiz
1.6K / / 18.09.2005
Цитата: Cerber24
Понимаю что туплю, но чет все равно работать не хочет, после компиляции ошибку выводит!
Код:
function isNotify(p:pointer):dword; stdcall;
var
MainMemo: TMemo;
begin
 Result:=0;
   while true do
   if RegNotifyChangeKeyValue(HKEY_CURRENT_USER, true, REG_NOTIFY_CHANGE_NAME or REG_NOTIFY_CHANGE_LAST_SET or REG_NOTIFY_CHANGE_ATTRIBUTES or REG_NOTIFY_CHANGE_SECURITY, 0, false)=ERROR_SUCCESS then
    begin

   MainMemo.Lines.Add('Произошло изменение');
   

   end;

end;

procedure TForm1.Button4Click(Sender: TObject);
var
  thrid: dword;
begin
  thrNotify:= CreateThread(nil, 0, @isNotify, nil, 0, thrid);
end;

procedure TForm1.Button5Click(Sender: TObject);
begin
  TerminateThread(thrNotify, 0);
end;


ну как то вот так будет тогда:
[highlight=delphi]
function isNotify(MainMemo:TMemo):dword; stdcall;
begin
Result:=0;
while true do
if RegNotifyChangeKeyValue(HKEY_CURRENT_USER, true, REG_NOTIFY_CHANGE_NAME or REG_NOTIFY_CHANGE_LAST_SET or REG_NOTIFY_CHANGE_ATTRIBUTES or REG_NOTIFY_CHANGE_SECURITY, 0, false)=ERROR_SUCCESS then
begin

MainMemo.Lines.Add('Произошло изменение');


end;

end;

procedure TForm1.Button4Click(Sender: TObject);
var
thrid: dword;
begin
thrNotify:= CreateThread(nil, 0, @isNotify, pointer(Memo1), 0, thrid);
end;

procedure TForm1.Button5Click(Sender: TObject);
begin
TerminateThread(thrNotify, 0);
end;
[/highlight]

37K
13 мая 2008 года
Cerber24
7 / / 03.05.2008
Так без этого (var MainMemo: TMemo;) вообще же работать не будет!
257
13 мая 2008 года
kosfiz
1.6K / / 18.09.2005
Цитата: Cerber24
Так без этого (var MainMemo: TMemo;) вообще же работать не будет!


чего у тебя не работает? или без чего? ты вообще пробовал последнее так как я написал в предыдущем посте сделать?

37K
13 мая 2008 года
Cerber24
7 / / 03.05.2008
если просто ставить:
MainMemo.Lines.Add('Произошло изменение'); то на этом месте выкидывает ошибку после компиляции, а на счет 2-го задания, откуда взялись writeln и readln (это же не паскаль, на месте этого тож ошибки выкидывает, пробовал MessageBox туда закидывать все равно чет ошибку выкидывает только после компиляции уже!)
257
13 мая 2008 года
kosfiz
1.6K / / 18.09.2005
Цитата: Cerber24
если просто ставить:
MainMemo.Lines.Add('Произошло изменение'); то на этом месте выкидывает ошибку после компиляции,


показывай код, как ты это сделал, как функцию определил, как вызвал её. только все так как у тебя.

Цитата: Cerber24
а на счет 2-го задания, откуда взялись writeln и readln (это же не паскаль, на месте этого тож ошибки выкидывает, пробовал MessageBox туда закидывать все равно чет ошибку выкидывает только после компиляции уже!)


а что в Delphi нет writeln и readln?! ну показывай как MessageBox "вставлял".

елси ошибки выдает, то указывай какие - я не телепат.

тот код, что приведен - это пример, рабочий пример, и то как его адаптировать к своим условиям это твоя задача. или ты хотел методом копипасте ;) если не хочешь хоть немного делать, так это во фриланс тогда тебе надо обращаться.

Знаете кого-то, кто может ответить? Поделитесь с ним ссылкой.

Ваш ответ

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог