Dnešní díl bude po čase zase všehochuť čtyř nesouvisejících ale užitečných tipů, které se nevešly jinam.
Více jednou ranou
Nejprve se naučíme detekovat stisk několika kláves najednou. Obvykle není problém detekovat stisk dvou kláves, takže klasické kombinace CTRL+něco nebo ALT+něco jistě běžně používáte, protože mají interní podporu v událostech komponent. Pokud ale budeme potřebovat poněkud "brutálnější" kombinaci, třeba CTRL+F3+X, musíme použít trošku odlišnější způsob. Těch existuje jako obvykle víc, tohle je jeden z nich:
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
var
KeybState: TKeyboardState;
begin
GetKeyboardState(KeybState);
if ((KeybState[VK_CONTROL] and 128) = 128) and ((KeybState[VK_F3] and 128) = 128) and ((KeybState[Ord(`X`)] and 128) = 128) then ShowMessage(`Stisknuto CTRL+F3+X`);
end;
Jsme na NTFS?
Druhý tip je z jiného soudku. Ukážeme si, jak zjistit, zda-li se konkrétní soubor nachází na disku se souborovým systémem NTFS. Může se to někdy hodit, protože pokud se soubor nachází na NTFS disku, může být omezen přístupovými právy a je třeba s tím v programech počítat. Příslušná funkce využívá knihovnu ComObj a vypadá takto:
function IsNTFS(AFileName: string): Boolean;
var
fso, drv: OleVariant;
begin
IsNTFS := False;
fso := CreateOleObject(`Scripting.FileSystemObject`);
drv := fso.GetDrive(fso.GetDriveName(AFileName));
IsNTFS := drv.FileSystem = `NTFS`
end;
Hledáme vypalovačku
Třetí dnešní tip se týká vypalovačky. Jednoduchým testem zjistíme, zda je v systému nainstalovaná vypalovací mechanika CD/DVD. Nebude to žádný složitý hardwarový test, požadovaná informace se totiž dá nalézt v registrech systému. Proto budeme také potřebovat knihovnu Registry a pak jen jednoduchým způsobem ověříme existenci určité větve. Postup je funkční pod Windows XP.
function CDRecorder: Boolean;
var
reg: TRegistry;
begin
reg := TRegistry.Create;
try
reg.RootKey := HKEY_CURRENT_USER;
reg.OpenKey(`Software\Microsoft\Windows\CurrentVersion\Explorer\CD Burning`, False);
Result := reg.ValueExists(`CD Recorder Drive`);
reg.CloseKey;
finally
reg.Free;
end;
end;
IE: Reloaded
Poslední tip pracuje s Internet Explorerem. Budeme tentokrát potřebovat knihovny MSHTML a SHDocVw a naše funkce slouží k znovunačtení stránky v právě otevřených oknech IE.
procedure TForm1.Button3Click(Sender: TObject);
var
ShellWindow: IShellWindows;
WB: IWebbrowser2;
spDisp: IDispatch;
IDoc1: IHTMLDocument2;
k: Integer;
begin
ShellWindow := CoShellWindows.Create;
for k := 0 to ShellWindow.Count do
begin
spDisp := ShellWindow.Item(k);
if spDisp = nil then Continue;
spDisp.QueryInterface(iWebBrowser2, WB);
if WB <> nil then
begin
WB.Document.QueryInterface(IHTMLDocument2, iDoc1);
if iDoc1 <> nil then
begin
WB := ShellWindow.Item(k) as IWebbrowser2;
WB.Refresh;
end;
end;
end;
end;
A to už je z dnešního mixu úplně všechno. Ukázkový projekt s použitím všech uvedených funkcí můžete stahovat zde.