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

Tipy a triky v Delphi, díl 93. - Vzhled aplikace a chování Windows XP po stisku CTRL-ALT-DEL

Jan Šindelář - 4.6.2003

Vzhled aplikace a chování Windows XP po stisku CTRL-ALT-DEL

Dnešní program je tedy jasný, takže se pusťme do práce. Slibovaná úprava vzhledu nebude tentokrát nijak drastická a tak ji určitě rádi použijí i ti, kteří se drží spíše konzervativního vzhledu svých aplikací. Ukážeme si, jak přidat decentní poloprůhledný stín k oknu nebo vybraným oknům naší aplikace. Pozor však na starší systémy Windows, zde nebude příklad fungovat, takže musíte s touto eventualitou počítat! Celá záležitost je jinak poměrně jasná, stín nám zajistí parametr CS_DROPSHADOW. Společný zdrojový kód obou dnešních příkladů najdete dále.

Náš druhý dnešní příklad se týká známé klávesové zkratky CTRL-ALT-DEL, která za běžných okolností pod Windows XP vyvolá okno Správce úloh, kde vidíme seznam běžících procesů a řadu dalších informací. To jistě velmi dobře znáte. Pomocí jednoduchého triku lze však toto všechno změnit. Velmi drobným zápisem do registrů docílíme toho, že se okno nezobrazí a místo toho bude zobrazeno varovné hlášení, že "Správce tohoto systému zakázal Správce úloh".

A nyní tedy celý slibovaný zdrojový kód:

unit Unit1;

 interface

 uses
   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
   Dialogs, StdCtrls, Registry;

 type
   TForm1 = class(TForm)
     Button1: TButton;
     Button2: TButton;
     procedure Button1Click(Sender: TObject);
     procedure Button2Click(Sender: TObject);
   private
     { Private declarations }
   public
     { Public declarations }
   protected
     procedure CreateParams(var Params: TCreateParams); override;
   end;

 var
   Form1: TForm1;

 implementation

 {$R *.dfm}

 procedure TForm1.CreateParams(var Params: TCreateParams);
 const
   CS_DROPSHADOW = $00020000;
 begin
   inherited;
   Params.WindowClass.Style := Params.WindowClass.Style or CS_DROPSHADOW;
 end;

 procedure DisableTaskMgr(Disable: Boolean);
 var
   reg: TRegistry;
 begin
   reg := TRegistry.Create;
   reg.RootKey := HKEY_CURRENT_USER;
   reg.OpenKey(`Software\Microsoft\Windows\CurrentVersion\Policies\System`, True);
   if Disable then reg.WriteString(`DisableTaskMgr`, `1`)
              else reg.DeleteValue(`DisableTaskMgr`);
   reg.CloseKey;
   reg.Free;
 end;

 procedure TForm1.Button1Click(Sender: TObject);
 begin
   DisableTaskMgr(True);
 end;

 procedure TForm1.Button2Click(Sender: TObject);
 begin
   DisableTaskMgr(False);
 end;

 end.

Aby vaše aplikace tímto způsobem vypnula Správce úloh, musíte být přihlášeni jako správce systému, protože jinak vám systém nedovolí zápis do této části registru provést. U ostatních uživatelů systému (pokud nějaké takové účty jsou) však zůstane stav beze změn.