HyperLink
Bejelentkezés
E-mail: 
Jelszó: 





Skip Navigation Links
 

Új oszlop felvétele a Windows Intézőjébe


Példaprogram letöltése

7931 bájt

Amikor a Windows Intézőjében a részletes nézet van kiválasztva, akkor több információ is megjelenik az egyes állományokról a nevükön kívül. Ilyen információ a típus, méret, stb. Lehetőségünk van olyan .NET-es alkalmazást készíteni, melynek segítségével a Windows Intézőjében megjeleníthetünk új oszlopokat, így minden egyes állomány mellé egy tetszőleges értéket írhatunk ki.

A mellékelt példa kipróbálásával kapcsolatos információkat a cikk Kezdeti lépések című szakaszában kaphat.
Kezdeti lépések
Az új oszlop felvételének megvalósítására a Windows 2000-től kezdve van lehetőségünk, illetve minden olyan rendszeren, ahol az Internet Explorer 5-ös, vagy ennél magasabb verziója van telepítve. Ez utóbbi frissíti ugyanis a Shell32.dll-t a megfelelő verziószámúra, így az IColumnProvider interfész, melyre a megvalósításhoz szükségünk lesz, már rendelkezésre áll.
A mellékelt példa kipróbálásához az alábbi lépésekre van szükség:
  • Be kell zárnunk az összes futó Windows Intéző példányt.
  • Le kell fordítanunk a projektet, hogy a generált DLL COM komponensként regisztrálódjon.
  • Indítsunk el egy új Intéző-példányt.
  • Váltsunk egy tetszőleges mappa részletes nézetére.
  • Kattintson az állományok listájának fejlécén jobb gombbal.
  • A megjelenő menüből válassza az Egyéb menüpontot.
  • A megjelenő ablakban jelölje be az „Szülőmappa neve” nevű oszlopot, majd zárja be az ablakot.
A művelet eredményeképpen megjelenik egy új oszlop az állományok adatait tartalmazó oszlopok sorában, mely – az egyszerűség kedvéért – a szülőmappák neveit tartalmazza.
A megvalósítás
Annak érdekében, hogy a Windows Intézőjében egy új oszlopot hozhassunk létre, egy saját COM komponenst kell készítenünk, mely implementálja az IColumnProvider interfész metódusait. Az interfész, a tulajdonságait implementáló osztály, valamint a megvalósításhoz szükséges menedzselt adattípusok deklarációi a MyLib.cs állományban találhatók.
Az IColumnProvider interfész három metódussal bír, melyeket az utód osztályban meg kell valósítanunk, ezek a következők:
  • Initialize
  • GetColumnInfo
  • GetitemData


Az interfész deklarációja a következő:
[ComVisible(false), ComImport, Guid("E8025004-1C42-11d2-BE2C-00A0C9A83DA1"),
InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
public interface IColumnProvider  
{
  [PreserveSig()]
  int Initialize(LPCSHCOLUMNINIT psci);
  [PreserveSig()]
  int GetColumnInfo(int dwIndex, out SHCOLUMNINFO psci);
  [PreserveSig()]
  int GetItemData( LPCSHCOLUMNID pscid, LPCSHCOLUMNDATA pscd, out object pvarData);
}
Létrehoztunk egy absztrakt osztályt, melynek kódját kiegészítettük a két metódussal, a regisztráció érdekében. Ezek a Register és az UnRegister nevű metódusok.
A tényleges megvalósítást az absztrakt osztályból származó ColumnClass osztály végzi el. A GetColumnInfo metódusban adjuk meg, hogy milyen jellemzőkkel rendelkezzen a létrehozandó oszlop. Itt létrehozunk egy már deklarált típusú struktúrát, mely tartalmazz az adatokat. Ennek neve SHCOLUMNINFO.
psci=new SHCOLUMNINFO();
Majd sorban megadjuk az oszlop adatait, elsőként a megjelenítendő információ típusát, mely most karakterlánc.
psci.csFlags=SHCOLSTATE.TYPE_STR;
Megadjuk az oszlop fejlécének nevét, valamint egy leírást.
psci.wszTitle = "Szülőmappa neve";
psci.wszDescription = "Az oszlop a szülőmappa nevét jeleníti meg";
A GetItemData metódusban határozhatjuk meg, hogy mi is kerüljön konkrétan egy-egy állomány mellé az Intéző adott nézetében, a deklarált oszlopban. A példában megadjuk, hogy oszlop esetén ne jelenjen meg semmi.
if (((FileAttributes)pscd.dwFileAttributes|FileAttributes.Directory) == FileAttributes.Directory)
{ 
  return S_FALSE;
}
Állományok esetén viszont jelenjen meg a szülőmappa neve.
FileInfo fi = new FileInfo(pscd.wszFile);
pvarData = fi.Directory.Name;
A fordítás után tehát regisztrálódott a COM komponensünk. Amennyiben módosítottuk a DLL kódját, és újra szeretnénk fordítani a projektet, nem fog sikerülni. Szükség van arra, hogy újrafordítás előtt felszabadítsuk a DLL-t.
Ennek érdekében le kell állítanunk a futó EXPLORER.EXE nevű process-t, mely megakadályozza ezt. Ehhez indítsuk el a Task Manager alkalmazást (NT alapú rendszerekben CTRL+ALT+DEL kombináció), majd a process nevét kijelölve válasszuk a Folyamat leállítása lehetőséget. Ekkor a Tálca eltűnik, de a projekt újrafordítható. A művelet után indítsuk el újra a leállított folyamatot, aminek eredményeképpen a Tálca ismét megjelenik.

Könyv
Ez a cikk megtalálható ebben a könyvben: C# Software Offline 2003 évkönyv 736. oldal

Felhasználási feltételek
A Software Online szoftverfejlesztői magazin mindegyik cikke, minden megjelent képe, és egyéb publikált anyaga szerzői jog védelme alatt áll! Bármilyen formában történő másodlagos terjesztésük, közzétételük vagy felhasználásuk kizárólag a kiadó előzetes írásbeli engedélyével történhet!

Copyright © 1999-2012 Animare Software Kft. Minden jog fenntartva!
| Készült: Animare Stúdió | Adatvédelem | Kapcsolat |