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