Controlando Procedimentos do Windows via Delphi.

              Neste artigo vou explicar como executar alguns procedimentos do Sistema Operacional Windows pelo Delphi. Como: Fazer logoff, desligamento forçado, desligar,reiniciar e encerrar.

         

Crie um novo Projeto (File/New/VCL Forms Application – Delphi)

Coloque no Form:

       5 Buttons e nomeie como BtnShutdown e o Caption Shutdown, BtnForce e o Caption Force, BtnPower e o Caption Power, BtnLogoff e o Caption Logoff, BtnReboot e o Reboot Force.

Organize como abaixo:


 

Crie uma pasta e salve o Projeto com o nome que quiser.

Adicione uma Unit ao projeto e salve com o nome UControla_SO (File/New/Unit-Delphi)

Codifique a Unit Controla_SO como abaixo:



unit Controla_SO;

interface

uses
Windows, SysUtils;

procedure Controlar_SO(Fazer: Cardinal);

implementation

procedure Controlar_SO(Fazer: Cardinal);
var
  SimbPriv: TTokenPrivileges;
  X: DWORD;
  HSimb: THandle;
begin
  if Win32Platform = VER_PLATFORM_WIN32_NT then
  begin
   OpenProcessToken(GetCurrentProcess, TOKEN_ADJUST_PRIVILEGES,         HSimb);
   LookUpPrivilegeValue(nil, 'SeShutdownPrivilege',SimbPriv.Privileges[0].Luid);
   SimbPriv.PrivilegeCount := 1;
   SimbPriv.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
   X := 0;
   AdjustTokenPrivileges(HSimb, False, SimbPriv, 0,PTokenPrivileges(nil)^, X);
   CloseHandle(HSimb);
end;
  ExitWindowsEx(Fazer, 0);
end;
end.

Volte ao Formulário Principal e dê uses na Unit UControlar_SO. (Alt+F11).

Implemente os seguintes códigos nos botões:



procedure TForm1.BtnForceClick(Sender: TObject);
begin
     // desligamento forçado do computador.
  Controlar_SO(EWX_FORCE);
end;

procedure TForm1.BtnLogoffClick(Sender: TObject);
begin
    // executar logoff do computador.
  Controlar_SO(EWX_LOGOFF);
end;

procedure TForm1.BtnPowerOffClick(Sender: TObject);
begin
    //executa o desligamento do computador.
  Controlar_SO(EWX_POWEROFF);
end;

procedure TForm1.BtnRebootClick(Sender: TObject);
begin
    // executa a reinicialização do computador.
  Controlar_SO(EWX_REBOOT);
end;

procedure TForm1.BtnShutdownClick(Sender: TObject);
begin
    // executa o incerramento do computador.
  Controlar_SO(EWX_SHUTDOWN);
end;
Implementei dessa forma (em botões) para compreensão do código, porém podemos usar nos eventos dos forms .

Espero que seja útil pra vocês.

Compile o projeto clique nos botões e veja o resultado.

Até o próximo artigo.

Marco A. S. Carvalho