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.

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

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

Velká podzimní aktualizace Windows 10 je tady: Co přináší Fall Creators Update

Velká podzimní aktualizace Windows 10 je tady: Co přináší Fall Creators Update

** Po půl roce je tu další aktualizace Windows ** A opět přináší hlavně hromadu drobných kosmetických vylepšení ** Podívali jsme se na ty nejzajímavější

17.  10.  2017 | Jakub Čížek | 183

Budoucností Windows 10 je Fluent Design. Takto bude jednou vypadat celý systém

Budoucností Windows 10 je Fluent Design. Takto bude jednou vypadat celý systém

** Fluent Design je vzhled, do kterého postupně Microsoft převleče celý systém ** Staví na průhlednosti a velkých plochách ** Do Windows 10 se z části dostane už zítra při vydání podzimní aktualizace

16.  10.  2017 | Stanislav Janů | 155

Nejlepší optické iluze: Z toho vám půjde hlava kolem

Nejlepší optické iluze: Z toho vám půjde hlava kolem

** Mozek se nechá snadno ošálit, a to mnoha způsoby ** Podívejte se na několik nejlepších optických iluzí ** Iluze dokazují, že vnímání reality může být značně zkreslené

16.  10.  2017 | Vojtěch Malý

Přichází doba hypersonických zbraní. Hrozí zvýšené riziko jaderného konfliktu

Přichází doba hypersonických zbraní. Hrozí zvýšené riziko jaderného konfliktu

** Světové mocnosti vyvíjí nové, nesmírně rychlé zbraně ** Jsou schopné pokořit rychlost Mach 5 ** Tyto zbraně mohou zvýšit riziko rozpoutání válečného konfliktu

Včera | Stanislav Mihulka | 18


Aktuální číslo časopisu Computer

Nový seriál o programování elektroniky

Otestovali jsme 17 bezdrátových sluchátek

Jak na nákup vánočních dárků ze zahraničí

4 tankové tiskárny v přímém souboji