[DELPHI] DESLIGAR, REINICIAR OU FAZER LOGOF NO WINDOWS

O exemplo a seguir permite fazer Logof, Desligar ou Reiniciar o Windows pelo Delphi.


Abra o Delphi e crie um novo projeto através do menu File -> New -> VCL Forms Application - Delphi, e altere as propriedade do Form:

Caption = DESLIGAR OU REINICIAR O WINDOWS POR COMANDO
Name = Frm_Principal
Position = poDesktopCenter

Adicione ao formulário o componente TRadioGroup, disponível na paleta Standard do Delphi (Tool Palette -> Standard: TRadioGroup) e altere seu nome para rgpOpcoes.

Com o rgpOpcoes selecionado, clique na propriedade Items no Object Inspector, na janela que irá aparecer (String List Editor) digite o texto abaixo:

LOGOF
REINICIAR
DESLIGAR
FORÇAR DESLIGAR

Adicione também um TButton disponível na paleta Standard do Delphi (Tool Palette -> Standard: TButton) e altere seu nome para btnExecutar.

Altere as propriedades do componentes conforme baixo:

PROPERTIES TRADIOGROUP:
Caption = Opções:
ItemIndex = 0

PROPERTIES TBUTTON:
Caption = Executar

Adicione à seção Uses a referência ShellAPI.

De um duplo-clique no btnExecutar e deixe seu código da seguinte forma:

procedure TFrm_Principal.btnExecutarClick(Sender: TObject);
var
  TTkHandle: THandle;
  TTkAtu, TTkAnt: TTokenPrivileges;
  TTkRet: DWORD;
  opcao: String;
begin
  // Ajusta os privilégios para o seu processo
  if OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES or
    TOKEN_QUERY, TTkHandle) then
    if LookupPrivilegeValue(nil, 'SeShutdownPrivilege',
      TTkAtu.Privileges[0].Luid) then
    begin
      TTkAtu.PrivilegeCount := 1;
      TTkAtu.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
      Windows.AdjustTokenPrivileges(TTkHandle, False, TTkAtu, SizeOf(TTkAtu),
        TTkAnt, TTkRet);
    end;

  //pega item selecionado no rgpOpcoes
  opcao := rgpOpcoes.Items[rgpOpcoes.ItemIndex];

  // Solicita confirmação do usuário, se confirmar "Yes" executa o código
  if Application.MessageBox(PChar('Confirma ' + opcao + '?'), 'Aviso',
    mb_iconquestion + mb_yesno + mb_defbutton2) = idYes then
  begin
    if UpperCase(opcao) = 'LOGOF' then
      ExitWindowsEx(EWX_LOGOFF, 0)
    else if UpperCase(opcao) = 'REINICIAR' then
      ExitWindowsEx(EWX_REBOOT, 0)
    else if UpperCase(opcao) = 'DESLIGAR' then
      ExitWindowsEx(EWX_SHUTDOWN, 0)
    else if UpperCase(opcao) = 'FORÇAR DESLIGAR' then
      ExitWindowsEx(EWX_FORCE + EWX_SHUTDOWN, 0);
  end;

end;

Salve as alterações (File -> Save All), coloque o nome uPrincipal para Unit e Principal para o nome do projeto.

Pronto, execute a aplicação (menu Run -> Run ou Pressione F9) e veja o resultado.

Gostou? Deixe seu comentário... Convido você a seguir meu blog, sua presença é bem vinda!【ツ】

Nenhum comentário:

Postar um comentário