Jak na zástupce - Builder.cz - Informacni server o programovani

Odběr fotomagazínu

Fotografický magazín "iZIN IDIF" každý týden ve Vašem e-mailu.
Co nového ve světě fotografie!

 

Zadejte Vaši e-mailovou adresu:

Kamarád fotí rád?

Přihlas ho k odběru fotomagazínu!

 

Zadejte e-mailovou adresu kamaráda:



Delphi

Jak na zástupce

delphi_zastupce

16. března 2001, 00.00 | Častou funkcí (nejen) instalačních programů je přidání
zástupce na Plochu, případně do nabídky
Start. Článek ukazuje, jak tento úkol provést v Delphi.

Častou funkcí (nejen) instalačních programů je přidání zástupce instalované aplikace na Plochu, případně do nabídky Start. Možná jste někdy přemýšleli nad tím, jak to udělat, a pak jste si řekli - to už musel někdo zkoušet přede mnou. Podívali jste se tedy na své oblíbené servery o programování a na Builderu jste natrefili na tento článek :-)

Pokusíme se nyní vytvořit program, který umístí na Plochu svého zástupce. Přesněji řečeno, nebudeme psát celý program, ale jen dvě klíčové procedury - "omáčku" okolo nich si už jistě doplníte sami.

Prvním problémem, se kterým se při tvorbě zástupce musíme vypořádat, je, do jakého adresáře máme zástupce vůbec umístit. Nemůžeme totiž napevno předpokládat, že uživatel má pracovní plochu v adresáři C:\Windows\Plocha. Jsou pro to hned tři důvody:

  1. Windows můžou být instalovány v jiném adresáři, než C:\Windows.
  2. Uživatel může používat jinou jazykovou verzi Windows, než je česká či anglická, a název adresáře s pracovní plochou je pak přeložen do daného jazyka.
  3. Na počítači může být nastaveno několik uživatelských profilů, každý se svou Plochou a nabídkou Start.

Z výše uvedeného seznamu důvodů jasně vyplývá, že adresář pracovní plochy budeme muset zjistit odjinud. Nejjednodušší cesta je načíst ho z registrů. Ve větvi HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders je několik položek, jejichž hodnoty udávají umístění různých speciálních složek v systému. Tady je stručný výtah těch nejpoužívanějších:

Desktop pracovní plocha
Start Menu nabídka Start
Programs nabídka Start/Programy
Personal složka Dokumenty
Fonts složka fontů

Položek je samozřejmě mnohem víc, liší se také podle verze systému, která je na počítači. Nejlépe asi uděláte, pokud se do registrů podíváte sami - názvy položek jsou většinou "self-descriptive".

První částí našeho programu tedy bude funkce, která jako svůj výsledek vrátí adresář s Plochou. Nesmíme ovšem zapomenout připsat do klauzule uses unitu Registry, protože v ní je uložena třída TRegistry, kterou použijeme pro přístup k registrům.

function GetDesktopDir: string;
var
  Registry: TRegistry;
begin
  Registry := TRegistry.Create;
  with Registry do
  try
    RootKey := HKEY_CURRENT_USER;
    if OpenKey(
    'SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders', False)
      then
      Result := ReadString('Desktop')
    else
      raise 
      Exception.Create('Nemůžu v registrech najít cestu k pracovní ploše.');
  finally
    Free;
  end;
end;

Nyní se dostáváme k druhé části problému - jak vytvořit vlastního zástupce a nastavit mu všechny potřebné parametry. V unitě ShlObj existuje rozhraní IShellLink, které zapouzdřuje pomocí COM objektu všechny potřebné vlastnosti zástupce. Tyto vlastnosti jsou dostupné pomocí metod GetXXX a SetXXX, kde za XXX můžete doplnit cokoliv z následující tabulky:

Path jméno zastupovaného souboru (včetně cesty)
Arguments parametry předávané zastupovanému objektu
Description popis zástupce
Hotkey klávesová zkratka
IconLocation soubor s ikonou zástupce a její pozice (index) v něm
ShowCmd způsob, jakým bude zobrazeno okno otevřené po spuštění zástupce
WorkingDirectory pracovní adresář

Jak je vidět, tabulka zhruba odpovídá údajům, které můžete zadat v dialogu Vlastnosti vyvolávaném v Průzkumníku z kontextového menu nad zástupcem.

Tak, teď už vlastní procedura, která vytvoří zástupce aplikace, ve které bude umístěna. Nutno dodat, že je potřeba do výčtu použitých unit zahrnout ShlObj, ComObj a ActiveX, ve kterých jsou definovány používané COM objekty.

procedure CreateLink;
var
  ComObject: IUnknown;
  ShellLink : IShellLink;
  PersistFile : IPersistFile;
  LinkLocation : WideString;
begin
  // vytvoříme nový COM objekt
  ComObject := CreateComObject(CLSID_ShellLink);
  // objekt budeme jednou chápat jako IShellLink a jednou jako
  // PersistFile - to umožní uložení zástupce na disk
  ShellLink := ComObject as IShellLink;
  PersistFile := ComObject as IPersistFile;

  // nastavíme vlastnosti zástupce
  with ShellLink do
  begin
    SetPath(PChar(Application.Exename));
    SetDescription('Prostě zástupce');
    SetIconLocation(PChar(Application.Exename), 0);
    SetWorkingDirectory(PChar(ExtractFilePath(Application.Exename)));
  end;

  // nakonec zástupce uložíme - všimněte si, že LinkLocation je deklarován
  // jako WideString, protože v COM/OLE se používá pro řetězce Unicode
  LinkLocation := GetDesktopDir + '\Prostě zástupce.lnk';
  PersistFile.Save(PWideChar(LinkLocation), False);
end;

Výše uvedené procedury můžete snadno upravit podle svých potřeb a jejich přidáním do svých programů je můžete rozšířit o možnost přidat zástupce na Plochu či do nabídky Start.

Tématické zařazení:

 » Rubriky  » Delphi  

 » Rubriky  » Windows  

 

 

 

Nejčtenější články
Nejlépe hodnocené články

 

Přihlášení k mému účtu

Uživatelské jméno:

Heslo: