Tipy a triky v Delphi, díl 90.

Dnes si zakončíme naše malé povídání o několika aplikacích balíku MS Office a ukážeme si poslední dva jednoduché příklady. Naučíme se zjistit, zda je příslušná aplikace nainstalována či spuštěna.
Posledních pár dílů jsme věnovali různým tipům pro aplikace Office. Ve většině případů jsme používali technologie OLE a tím pádem byla funkčnost našich příkladů závislá na tom, zda je či není příslušná aplikace v našem systému nainstalována. I když jsme vždycky používali bezpečný způsob, který by v případě nepřítomnosti dané aplikace nezpůsobil pád našeho programu, určitě by bylo dobré předem vědět, jestli je aplikace v systému dostupná či ne.

Způsobů, jak to zjistit, existuje samozřejmě jako vždy více. My zvolíme jeden z těch jednodušších, který pracuje s registry. Z nich na příslušném místě vyčteme potřebnou informaci o přítomnosti či nepřítomnosti dané aplikace Office v systému. Společný zdrojový kód pro oba dnešní příklady naleznete dále.

Dalším problémem, který by mohl teoreticky v určitých případech při našich hrátkách s OLE (a nejen s ním) nastat, je drobná kolize mezi naším programem a příslušnou aplikací. Bude-li se náš program snažit zneužít danou aplikaci k nějaké činnosti zatímco aplikace běží a má v danou chvíli na práci úplně jiné věci, může dojít k problémům. Sice by neměla nastat žádná velká kolize a vše by mělo být dostatečně ošetřeno, ale přesto by bylo určitě dobré vědět, jestli je příslušná aplikace spuštěna a zda si můžeme dovolit ji zatížit na další půlhodinu našimi pokusy. To již záleží na povaze vaší aplikace a funkcích, které bude prostřednictvím OLE od aplikací Office požadovat. K tomu tedy slouží naše druhá dnešní funkce, která je opět velmi jednoduchá a využívá jednotek ComObj a ActiveX.

unit Unit1;

interface

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

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

var
  Form1: TForm1;

implementation

{$R *.dfm}

function IsObjectActive(const ClassName: string): Boolean;
var
  ClassID: TCLSID;
  Unknown: IUnknown;
begin
  try
    ClassID := ProgIDToClassID(ClassName);
    Result  := GetActiveObject(ClassID, nil, Unknown) = S_OK;
  except
    Result := False;
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  if IsObjectActive(`Word.Application`) then ShowMessage(`Word je spusten.`);
  if IsObjectActive(`Excel.Application`) then ShowMessage(`Excel je spusten.`);
  if IsObjectActive(`Outlook.Application`) then ShowMessage(`Outlook je spusten.`);
  if IsObjectActive(`Access.Application`) then ShowMessage(`Access je spusten.`);
  if IsObjectActive(`Powerpoint.Application`) then ShowMessage(`Powerpoint je spusten.`);
end;

function OfficeAppInst(const ClassName: string): Boolean;
var
  Reg: TRegistry;
begin
  Reg := TRegistry.Create;
  try
    Reg.RootKey := HKEY_CLASSES_ROOT;
    Result := Reg.KeyExists(ClassName);
  finally
    Reg.Free;
  end;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  if OfficeAppInst(`Word.Application`) then ShowMessage(`Word je nainstalovan.`);
end;

end.

Jak vidíte, funkce jsou velmi jednoduché a obě mají stejné parametry. A tím na nějaký čas s Office končíme a příště se zase vrhneme na jiné téma.

Váš názor Další článek: RIAA poprvé přiznala chybu

Témata článku: Software, Programování, Příslušná aplikace, Trik, Bezpečný způsob, Díl


Určitě si přečtěte

Sex a rozmnožování při mezihvězdné cestě: Kolik lidí je potřeba pro let k Proximě Centauri?

Sex a rozmnožování při mezihvězdné cestě: Kolik lidí je potřeba pro let k Proximě Centauri?

** Vědci spočítali, jak velká by musela být posádka pro vícegenerační let k nejbližší hvězdné soustavě ** Proxima Centauri se nachází 4,3 světelných let od nás ** Za současných technologií bychom k ní letěli 6300 let

Petr Kubala | 53

Google ADT-2: Miniaturní krabička s Android TV 8.0, kterou si nikdy nekoupíte

Google ADT-2: Miniaturní krabička s Android TV 8.0, kterou si nikdy nekoupíte

** Dlouho se nevědělo, co to přesně má být ** Pak se s krabičkou Google pochlubil na I/O ** Do „Chromecastu“ vtěsnal celý Android TV

Jakub Čížek | 24

Apple: naše mapy budou nejlepší na světě. Tajně jsme na nich pracovali několik let

Apple: naše mapy budou nejlepší na světě. Tajně jsme na nich pracovali několik let

** Apple odhalil své plány na zcela nové mapy ** Několik let pracuje na nových mapách, které by měly předběhnout konkurenci ** Objeví se s příchodem iOS 12 pro vybrané státy

Karel Javůrek | 50

Rekordy počasí: V Česku to ještě jde, skutečné extrémy zažívají jinde

Rekordy počasí: V Česku to ještě jde, skutečné extrémy zažívají jinde

** Teplotní extrémy dokážou překvapit. Seznamte se s rekordy v Česku i ve světě ** Rekordní hodnoty jsou mnohdy až k neuvěření ** Zjistěte, kdy ke bylo největší horko, zima, déšť či vítr

Karel Kilián | 7

Alan Turing: Genius, který matematicky stvořil počítač

Alan Turing: Genius, který matematicky stvořil počítač

Řešením matematického problému se dostal k modelu teoretického stroje, který nese jeho jméno a je základem logiky univerzálních počítačů.

Pavel Tronner | 56

15 věcí, které umí Windows 10, ale možná o nich vůbec nevíte

15 věcí, které umí Windows 10, ale možná o nich vůbec nevíte

** Systém Windows 10 umí spoustu užitečných drobností ** O mnoha praktických funkcích pravděpodobně ani nevíte ** Poznejte užitečné tipy, které se vám mohou hodit každý den

Vladislav Kluska | 36


Aktuální číslo časopisu Computer

Velký test 18 bezdrátových sluchátek

Vše o přechodu na DVB-T2

Procesory AMD opět porážejí Intel

7 NVMe M.2 SSD v přímém souboji