[ Nemanja Avramović @ 15.05.2007. 13:14 ] @
Ovo sam uspeo da detektujem uz pomoć komponente ShellChangeNotifier iz Delphija, međutim, nikako ne mogu da dobijem detaljnije informacije i tome šta se desilo, kao i ime fajla koji se promenio:

Code:
procedure TForm1.ShellChangeNotifier1Change;
begin
showmessage('Neshto se promenilo');
end;


Kao što vidite, procedura koja se poziva u OnChange događaju ne daje ništa od parametara, tako da ne znam kako videti ono što me zanima.

Alternativa je možda komponenta FolderMonitor, ali mene više zanimaju besplatne alternative, a i koliko vidim sa slike, ova komponenta FolderMonitor ne nudi mnogo više od ShellChangeNotifier komponente.

Da li neko ima neke ideje? Neka druga komponenta? WinAPI?
[ savkic @ 15.05.2007. 13:41 ] @
> Da li neko ima neke ideje? Neka druga komponenta? WinAPI?

Od WinApi funkcija postoje tri varijante koje možeš koristiti, FindFirstChangeNotification, daje obaveštenje o događaju ali ne i o vrsti događaja, ima neka shell funkcija ali ne mogu sada da se setim imena, mislim da ona interno koristi tu istu funkciju. I treća je ReadDirectoryChangesW, daje i informacije o vrsti promene, ali ne znam da li pruža sve informacije koje tražiš. Ako ne, moraćeš da uradiš snapshot stanja dira i posle promene uporediš i vidiš gde su promene.
[ Srki_82 @ 15.05.2007. 14:08 ] @
ILI... mozes da radis kao sto to rade antivirusi i slicni programi... hookojes api funkcije za kreiranje, citanje, pisanje, brisanje... fajlova/foldera, a tako ne samo sto imas informaciju iz prve ruke o tome sta i kako se menja, nego mozes cak i da onemogucis operaciju ako zelis. Ovakav pristup je moguc samo na NT verzijama Windowsa, a na starijim verzijama bi morao da napises VXD driver, a to je vec malo zeznuto i mislim da Delphi ne moze da kompajlira VXD jer on nema PE header ako se dobro secam.

Mozes pogledati ovde kako da postavis hook na neke od funkcija: http://www.codeproject.com/system/soviet_protector.asp
Kod je pisan u C++, ali ga je lako razumeti.
[ Nemanja Avramović @ 15.05.2007. 14:30 ] @
Ah, to je malo komplikovano za mene. Mislim da ću verovatno raditi snapshot direktorijuma pa kad se izmeni onda još jednom i onda ide poređenje... samo da nađem lak način za poređenje
[ savkic @ 15.05.2007. 15:15 ] @
> LI... mozes da radis kao sto to rade antivirusi i slicni programi... hookojes api
> funkcije za kreiranje, citanje, pisanje, brisanje... fajlova/foldera, a tako ne samo sto imas

AFAIK Antivirusi koriste file drajvere. Inače u Visti je zabranjeno hookovanje funkcija.

> Ah, to je malo komplikovano za mene. Mislim da ću verovatno raditi
> snapshot direktorijuma pa kad se izmeni onda još jednom i onda ide poređenje...
> samo da nađem lak način za poređenje

Sad sam pogledao ReadDirectoryChangesW i radi sve što ti treba, e sad ako ti treba i za Win9x... moraćeš snapshot.
[ Nemanja Avramović @ 15.05.2007. 15:27 ] @
Hvala. W9x se sve manje i manje koristi, tako da ću ograničiti program na WinNT

Inače, evo ovde gotove klase koja koristi ReadDirectoryChangesW

edit: Sad sam probao. Ekstremno jednostavno za koristiti. Završilo mi je posao.

[Ovu poruku je menjao Nemanja Avramović dana 15.05.2007. u 17:02 GMT+1]