Delphi - A Windows Shell titkai

WinShell 4. rész

forráskód letöltése
Ha a rendszerben másolásra, mozgatásra, átnevezésre, vagy törlésre kerül egy állomány vagy könyvtár, akkor erről a mi programunk automatikusan értesítést kaphat a Windows-tól, ha erre megkérjük.

Így nem csak nyomon követni tudjuk az eseményeket a rendszerben, hanem akár befolyásolhatjuk is őket: például meggátolhatjuk egy állomány törlését, vagy meghiúsíthatunk egy állománymásolást. A mellékelt példa kipróbálásához az alábbi lépésekre van szükség:
1. Nyissa meg a ShellCopyExt.dpr-t.
2. A Project - Build menüponttal fordítsa le. Ekkor létrejön a ShellCopyExt.dll.
3. Nyissa meg szerkesztésre a mellékelt ShellCopyExt.reg állományt. Például egy Windows Intézővel keresse meg. Jobb gombbal kattintson rá, majd válassza az Edit menüpontot.
4. Ebben az állományban a @="D:\\Dso\\0248\\ShellSecret04\\ ShellIconExt.dll" sorban található elérési útvonalat javítsa ki arra, ahová a mellékelt példaprogramot helyezte. Lényeg az, hogy a ShellCopyExt.dll-nek itt korrektül meg legyen adva a helye. Ügyeljen arra is, hogy az elérési útvonal megadásánál a \ jelet duplázva kell használnia!
5. Mentse és zárja a ShellCopyExt.reg állományt.
6. Kattintson rá a ShellCopyExt.reg állományra. Ekkor a Windows megkérdezi, hogy szeretné-e tartalmát a regisztrációs adatbázishoz hozzáfűzni. Erre igennel válaszoljon.
7. A következő rendszerindítás után a DLL már üzemképes és a Unit1.pas 27. sorában megadott LOGFILE konstansban szereplő állományba rögzíti az összes állomány másolás, mozgatás, vagy törlés eseményét.


Ennek a feladatnak a megoldásához - az előző cikkekhez hasonlóan - ismét csak egy speciális DLL-re lesz szükségünk, melyet a Windows aktivizál, amikor az adott állomány művelet történik.

A DLL készítési módja hasonló az eddigiekhez. Különbség csak annyi, hogy most az ICopyHook interfészt kell felhasználnunk. Ennek egyetlen metódusa van a CopyCallback nevű függvény. Ez lesz az, amelyiket meghív a Windows.

A CopyCallback függvény első paraméterében egy ablak azonosítót kapunk, mely az adott állomány műveletet végzi.

A második paraméterből tudhatjuk meg, hogy mi ez az adott művelet. Értéke az alábbiak egyike lehet:
  • FO_COPY - másolás
  • FO_DELETE - törlés
  • FO_MOVE - mozgatás
  • FO_RENAME - átnevezés

A műveletben résztvevő forrásállományt a pszSrcFile paraméterből tudjuk meg, míg a célállományt a pszDestFile paraméterből. Törléskor a pszDestFile null sztringet tartalmaz.

Mellékelt példában csak naplózzuk az adott eseményt, de minden esetben engedélyezzük annak végrehajtását. Ezt a függvénynek adott visszatérési érték szabályozza. Értéke az alábbiak egyike lehet:
  • IDYES - művelet engedélyezve
  • IDNO - művelet elutasítva
  • IDCANCEL - művelet megszakítva



WinShell cikksorozat