Tipy a triky v Delphi, díl 97.

Nejen samotný výkon počítače, ale rovněž úspora energie dnes hraje velkou roli a to nejen u notebooků. Naučíme se detekovat, zda jsou na počítači povoleny rozličné úsporné režimy.
Dnešní téma je jasné, takže se rovnou pustíme do práce. Nejprve si drobně ujasníme pojmy. Nechci zabřednout do nějakého slovíčkaření a proto prosím čtenáře věci znalé, aby omluvili zjednodušení. Pro jednoduchost se tedy dá říci, že běžný úsporný režim (suspend) uvede počítač do jakéhosi polospánku, ve kterém se vypne monitor, uspí se disky, celkově se sníží spotřeba a jelikož i procesor pracuje na minimum, chytřejší základní desky obvykle i sníží otáčky větráků. Probuzení pak trvá obvykle jen několik sekund. Režim spánku jde ještě o krok dál. Uloží stav počítače na disk (včetně obsahu paměti, takže se na disku vytvoří tak velký soubor, jak velkou máte RAM) a vypne ho kompletně. Probuzení (vlastně opětovné zapnutí) již pak trvá o něco déle, ale "uložená pozice" se obvykle načte znatelně rychleji než normální restart operačního systému a navíc je počítač ve stejném stavu, jako byl před usnutím, takže již běží všechny předtím spuštěné aplikace.

Tolik tedy pro představu, o čem se vlastně dnes budeme bavit. Kromě toho, že samotný počítač musí zvládat jednotlivé režimy hardwarově, může si je navíc uživatel zapnout či vypnout přímo ve Windows. A právě to, jestli jsou tyto dva úsporné režimy povoleny a lze je tím pádem aktivovat, se teď naučíme detekovat.

Zdrojový kód se skládá ze dvou víceméně totožných funkcí, přičemž první slouží k otestování možnosti použití režimu spánku (hibernace), druhá má na starost "klasický" úsporný režim.

unit Unit1;

interface

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

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 HibernateAllowed: Boolean;
type
  TIsPwrHibernateAllowed = function: Boolean; stdcall;
var
  hPowrprof: HMODULE;
  IsPwrHibernateAllowed: TIsPwrHibernateAllowed;
begin
  Result := False;
  try
  hPowrprof := LoadLibrary(`powrprof.dll`);
  if hPowrprof <> 0 then
  begin
    try
      @IsPwrHibernateAllowed := GetProcAddress(hPowrprof, `IsPwrHibernateAllowed`);
      if @IsPwrHibernateAllowed <> nil then Result := IsPwrHibernateAllowed;
    finally
      FreeLibrary(hPowrprof);
    end;
  end;
  except
  end;
end;

function SuspendAllowed: Boolean;
type
  TIsPwrSuspendAllowed = function: Boolean; stdcall;
var
  hPowrprof: HMODULE;
  IsPwrSuspendAllowed: TIsPwrSuspendAllowed;
begin
  Result := False;
  try
  hPowrprof := LoadLibrary(`powrprof.dll`);
  if hPowrprof <> 0 then
  begin
    try
      @IsPwrSuspendAllowed := GetProcAddress(hPowrprof, `IsPwrSuspendAllowed`);
      if @IsPwrSuspendAllowed <> nil then Result := IsPwrSuspendAllowed;
    finally
      FreeLibrary(hPowrprof);
    end;
  end;
  except
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  if HibernateAllowed then ShowMessage(`Rezim spanku povolen.`)
                      else ShowMessage(`Rezim spanku NENI povolen!`);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  if SuspendAllowed then ShowMessage(`Usporny rezim povolen.`)
                    else ShowMessage(`Usporny rezim NENI povolen!`);
end;

end.

Na závěr pro doplnění snad jen poznámka, že u starších systémů (95 a NT4) ani nemá cenu hibernaci testovat, protože tyto systémy ji nepodporují. Plně funkční je až od verze Windows ME.

Váš názor Další článek: TechEd 2003: Novinky v BizTalk 2004

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


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

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

Takhle zemřete, když asteroid dopadne na vaše město

Takhle zemřete, když asteroid dopadne na vaše město

** Jak by to dopadlo, kdyby na světovou metropoli či do nedalekého moře dopadl velký asteroid? ** Simulovali to odborníci z University of Southampton ** Výsledky jsou velmi zajímavé

Petr Kubala | 32

Nová zbraň Microsoftu proti iPadu: Levný tablet Surface Go bude stát jen deset tisíc

Nová zbraň Microsoftu proti iPadu: Levný tablet Surface Go bude stát jen deset tisíc

** Microsoft představil nový tablet Surface Go ** Nový model zaujme nízkou cenou, ale schopnostmi zařízení Surface ** Microsoft nepoužil čip ARM, ale klasický procesor od Intelu 

Karel Javůrek | 116

Porno insider: Jak virtuální realita vstupuje do filmů pro dospělé

Porno insider: Jak virtuální realita vstupuje do filmů pro dospělé

** Pornografie údajně představuje třetinu internetové obsahu a je technologický tahounem ** Do erotického obsahu postupně zasahuje i virtuální realita ** Kromě vizuálního vjemu se pracuje také na virtuálním uspokojení toho hmatového

Jan Dudek | 28

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

Jak dopadl velký den Applu s náloží novinek: Sledujte, co letos připravil

Jak dopadl velký den Applu s náloží novinek: Sledujte, co letos připravil

** Apple večer představil novinky ** Ukáže nové operační systémy, ale čekala se i nová zařízení ** Začíná vývojářská konference Applu WWDC 2018

Karel Javůrek | 87


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