Tipy a triky v Delphi, díl 104.

Jak zamknout pracovní stanici a jak zjistit kolik paměti zabírá náš proces, tak to je dnešní program.
Tipy a triky v Delphi, díl 104.
Oba dnešní příklady jsou opět určeny pro generaci Windows na bázi NT a oba příklady budou uvedeny v jednom zdrojovém kódu. Nejprve tedy několik slov k prvnímu tipu, tedy k uzamčení pracovní stanice. Možná že znáte a používáte tuto funkci běžně. Pro ty z vás, kteří snad neví o co jde, jen krátké vysvětlení. Jednoduše řečeno, pokud potřebujete od počítače na chvilku odběhnout, nechcete ho kvůli tomu vypínat a přitom nechcete, aby vám někdo jiný koukal do monitoru nebo se vám dokonce přímo v počítači "hrabal", stačí vaší stanici zamknout. V systému NT a 2000 stačí stisknout obvyklou trojkombinaci CTRL+ALT+DEL a vybrat příslušnou funkci, v XP tuto záležitost vlastně nahrazuje volba "Přepnout uživatele". Opětovné odemknutí počítače pak provedete jednoduše přihlášením do systému, přičemž všechny aplikace budou ve stavu před zamknutím. V našem příkladu docílíme zamknutí stanice snadno využitím příslušné funkce z knihovny USER32.DLL a naše funkce pouze vrací logickou hodnotu pro kontrolu, zda se věc podařila či ne.

Náš druhý dnešní příklad bude z trochu jiného soudku. Jednoduchá funkce nám zjistí, kolik paměti zabírá naše aplikace (aktuální proces). K této funkci budeme potřebovat knihovnu psAPI. Nyní tedy společný zdrojový kód pro oba příklady:

unit Unit1;

interface

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

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 LockWS: Boolean;
type
  TLockWorkStation = function: Boolean;
var
  hUser32: HMODULE;
  LockWorkStation: TLockWorkStation;
begin
  result := False;
  hUser32 := GetModuleHandle(`USER32.DLL`);
  if hUser32 <> 0 then
  begin
    @LockWorkStation := GetProcAddress(hUser32, `LockWorkStation`);
    if @LockWorkStation <> nil then
    begin
      LockWorkStation;
      Result := True;
    end;
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  if not LockWS then ShowMessage(`Chyba, funkci se nepodarilo spustit.`);
end;

procedure TForm1.Button2Click(Sender: TObject);
var
  pmc: PPROCESS_MEMORY_COUNTERS;
  cb: Integer;
begin
  try
    cb := SizeOf(_PROCESS_MEMORY_COUNTERS);
    GetMem(pmc, cb);
    pmc^.cb := cb;
    if GetProcessMemoryInfo(GetCurrentProcess(), pmc, cb) then ShowMessage(IntToStr(pmc^.WorkingSetSize) + ` Bytes`)
    else ShowMessage(`Chyba, nelze zjistit pouziti pameti.`);
    FreeMem(pmc);
  except
  end;
end;

end.

Jak bylo řečeno v úvodu, dnešní příklady budou pracovat pouze pod NT systémy. Ve starších systémech však k žádné chybě nedojde, prostě se nic nestane.

Témata článku: Software, Windows, Programování, Díl, Trik

1 komentář

Nejnovější komentáře

  • Petr 20. 8. 2003 12:03:37
    Mozna by bylo vhodne vysvetlit ze "to co aplikace zabira v pameti" (v jake...
Určitě si přečtěte

USB zařízení je možné odposlouchávat ze sousedního portu

USB zařízení je možné odposlouchávat ze sousedního portu

** Crosstalk byl dřív problém paralelních portů, dnes se ho pokusili prověřit na USB ** Zařízení ze sousedního USB portu může odposlouchávat to vedlejší ** Mohou vznikat záškodnické flašky nebo třeba USB lampičky

14.  8.  2017 | Adam Harmada | 19

Co je realita a fikce? Brzy to nepoznáme. A.I. ze Stanfordu tvoří fotky z neexistujících měst

Co je realita a fikce? Brzy to nepoznáme. A.I. ze Stanfordu tvoří fotky z neexistujících měst

** Fotografii každý vnímá jako jednoznačný důkaz ** časem to ale přestane platit ** Strojové učení se totiž neustále zdokonaluje

16.  8.  2017 | Jakub Čížek | 13


Aktuální číslo časopisu Computer

Velký test NVMe a SATA SSD

Máte slabý signál
Wi-Fi? Poradíme!

Jak umělá inteligence opravuje fotky

Kupujete dron? Ty levné se nevyplatí