Paulo Nobre Postado Junho 20, 2004 Denunciar Share Postado Junho 20, 2004 Alguém saberia dizer por que, pelo menos no meu XP home a função da API ExitWindowsEx com o parâmetro 1 não funciona.ExitWindowsEx (EWX_FORCE,0) funciona, mas aparecendo tela para fazer logonExitWindowsEx (1,0) que seria para desligar não funciona.Alguém tem alguma idéia.Uso isto num programa simples de alarme que funcionava normalmente no Win9x e Me.Obrigado pela ajudaPaulo Nobre Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 s3c Postado Junho 21, 2004 Denunciar Share Postado Junho 21, 2004 Segundo a documentação funciona.Experimente combinar:ExitWindowsEx(EWX_SHUTDOWN or EWX_FORCE, 0);ouExitWindowsEx(EWX_SHUTDOWN or EWX_FORCEIFHUNG, 0);ouExitWindowsEx(EWX_POWEROFF,0);Obs: EWX_FORCE e EWX_FORCEIFHUNG são antagônicos. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Paulo Nobre Postado Junho 22, 2004 Autor Denunciar Share Postado Junho 22, 2004 s3c, obrigadose der certo postarei aqui.Paulo Nobre Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Paulo Nobre Postado Junho 22, 2004 Autor Denunciar Share Postado Junho 22, 2004 s3c, tentei todas as combinações possíveis e a única coisa que consegui como já havia mencionado foi ao usar:ExitWindowsEx(EWX_FORCE, 0);fazer aparecer a tela de logon com o meu nome para eu bootar de novo.Desligar mesmo não consigo nem a pau.É muito estranho isto!!!De qualquer forma muito obrigado.Paulo Nobre Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 s3c Postado Junho 22, 2004 Denunciar Share Postado Junho 22, 2004 Acho que tem a ver com os privilégios de shutdown do NT.Tente modificá-los: var TTkHandle :THandle; TTkAtu,TTkAnt :TTokenPrivileges; TTkRet :DWORD; begin 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); ExitWindowsEx(EWX_POWEROFF or EWX_FORCE, 0); end; end; Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Paulo Nobre Postado Junho 23, 2004 Autor Denunciar Share Postado Junho 23, 2004 Valeu s3c, desta vez funcionou!Muito obrigado, embora não tenha entendido o código.Paulo Nobre Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 s3c Postado Junho 23, 2004 Denunciar Share Postado Junho 23, 2004 São funções da Advapi32.dll na Windows.pasConfesso que não me aprofundo muito nisso também, mas basicamente é o seguinte:OpenProcessToken retorna o Handle da indicação de ajuste de privilégios para o seu processo.LookupPrivilegeValue retorna em TTkAtu.Privileges[0].Luid o identificador p/ o privilégio de shutdown(SeShutdownPrivilege).Com estas duas informações, você diz que o seu processo poderá desligar a máquina habilitando TTkAtu.Privileges[0].Attributes p/ enable e logo apos efetivar com AdjustTokenPrivileges.Se o NT não reclamar em nenhum desses passos, então o shutdown funciona.Se reclamar e você quiser saber o erro, então você deve utilizar GetLastError após cada uma delas. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Paulo Nobre Postado Junho 23, 2004 Autor Denunciar Share Postado Junho 23, 2004 Valeu pela explicação s3c, deu pelo menos para ter uma noção do que está acontecendo e não simplesmente estar copiando e colando código.Paulo Nobre Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
Paulo Nobre
Alguém saberia dizer por que, pelo menos no meu XP home a função da API ExitWindowsEx com o parâmetro 1 não funciona.
ExitWindowsEx (EWX_FORCE,0) funciona, mas aparecendo tela para fazer logon
ExitWindowsEx (1,0) que seria para desligar não funciona.
Alguém tem alguma idéia.
Uso isto num programa simples de alarme que funcionava normalmente no Win9x e Me.
Obrigado pela ajuda
Paulo Nobre
Link para o comentário
Compartilhar em outros sites
7 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.