Živě.cz o počítačích a internetu

Tipy a triky v Delphi, díl 137. - Ovládací panely

Jan Šindelář - 5.5.2004

O Ovládacích panelech už byla kdysi v tomto seriálu řeč a dokonce jsme si ukazovali, jak takový jednoduchý applet vytvořit. Než se pustíme do dnešního programu, připomeňme si úvodem několik základních věcí.

Jednotlivé Ovládací panely slouží převážně ke konfiguraci systému. To jsou ty, které najdeme ve Windows hned po instalaci a nastavujeme s nimi vše od vzhledu pracovní plochy, přes zvuk až po myš. Kromě těchto základních si mohou některé aplikace nainstalovat i své vlastní konfigurační nástroje v podobě těchto appletů a jejich prostřednictvím se pak dají nastavit například různé kodeky pro přehrávání filmů, databáze a podobně. Ať už se jedná o standardní či doinstalované panely, jedná se fyzicky o soubory .CPL, což není nic jiného než forma klasické DLL knihovny.

Naším dnešním úkolem bude vytvořit jednoduchou aplikaci, která nám jednotlivé ovládací panely najde, vypíše nám je v přehledném seznamu včetně jejich popisu a rovněž nám umožní jejich spuštění. I tentokrát je připraven celý ukázkový projekt, který si může stáhnout na konci článku.

První úkol je tedy najít jednotlivé soubory CPL. Ty se nacházejí v systémovém adresáři Windows. Nejprve tedy pomocí API funkce GetSystemDirectory najdeme tento adresář. Poté pomocí klasických funkcí pro vyhledávání souborů FindFirst a FindNext vyhledáme požadované CPL soubory a jejich seznam (názvy) si uložíme. Tím jsme našli vše co potřebujeme a můžeme se pustit do dalšího kroku.

Teď je potřeba jednotlivé soubory projít, získat z nich potřebné informace (název a popis appletu) a zobrazit je do připravené komponenty ListView. Ta bude mít tři sloupce a styl zobrazení vsReport. Nyní přichází na řadu knihovna CPL, která je v Delphi obsažena. Nejprve však pomocí API funkce LoadLibrary načteme daný applet (přesněji řečeno aplikaci ovládacího panelu). Poté pomocí funkce CPlApplet (ze zmiňovaného unitu CPL), což je komunikační kanál mezi naší aplikací a daným ovládacím panelem, zjistíme potřebné informace a to formou zpráv Windows. Zajímat nás budou hlavně dvě zprávy - CPL_GetCount zjistí počet appletů daného ovládacího panelu a CPL_INQUIRE pak zařídí zjištění informací o něm a naplnění proměnné typu TCPLInfo, což je struktura popisující panel. Tím získáme název, popis i ikonu a tyto informace vložíme do připraveného ListView. Na závěr pak nesmíme zapomenout načtenou knihovnu opět uvolnit z paměti.

Třetím úkolem je spuštění daného appletu. Nejedná se o běžnou aplikaci, takže nemůžeme použít obvyklou funkci ShellExecute. Namísto toho musíme importovat funkci Control_RunDLL z knihovny Shell32.DLL a využít její služby.

A tím je vlastně celý program hotov. Po spuštění bude nejprve načten do ListView seznam panelů a kliknutím na libovolný z nich bude spuštěn. Některé drobné detaily doporučuji prostudovat ve zdrojovém kódu projektu (vytvořen v Delphi7).