Desligar windows 98

18/03/2006

Olá pessoal, estou tentando usar estas 2 funções para desligar o windows 98 mas nao esta funcionando... Peguei elas aki no forum mesmo. As 2 deram certo no windows xp. Será que é algum problema na versão do win98?
Por favor, espero a ajuda de vcs.

Abraço

Fabio

function MyExitWindows(RebootParam: Longword): Boolean;
var
TTokenHd: THandle;
TTokenPvg: TTokenPrivileges;
cbtpPrevious: DWORD;
rTTokenPvg: TTokenPrivileges;
pcbtpPreviousRequired: DWORD;
tpResult: Boolean;
const
SE_SHUTDOWN_NAME = ´SeShutdownPrivilege´;
begin
if Win32Platform = VER_PLATFORM_WIN32_NT then
begin
tpResult := OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, TTokenHd);
if tpResult then

begin
tpResult := LookupPrivilegeValue(nil, SE_SHUTDOWN_NAME, TTokenPvg.Privileges[0].Luid);
TTokenPvg.PrivilegeCount := 1;
TTokenPvg.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
cbtpPrevious := SizeOf(rTTokenPvg);
pcbtpPreviousRequired := 0;
if tpResult then
Windows.AdjustTokenPrivileges(TTokenHd, False,TTokenPvg,
cbtpPrevious, rTTokenPvg,pcbtpPreviousRequired);
end;
end;
Result := ExitWindowsEx(RebootParam, 0);
end;

procedure Finalizar;
var
TokenPriv : TTokenPrivileges;
Tamanho : DWord;
HToken : THandle;
begin
OpenProcessToken(GetCurrentProcess, TOKEN_ADJUST_PRIVILEGES,HToken);
LookUpPrivilegeValue(NIL, ´SeShutdownPrivilege´, TokenPriv.Privileges[0].Luid);
TokenPriv.PrivilegeCount := 1;
TokenPriv.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
Tamanho := 0;
AdjustTokenPrivileges(HToken, FALSE, TokenPriv, 0, PTokenPrivileges(NIL)^, Tamanho);
CloseHandle(HToken);
ExitWindowsEx(EWX_FORCE + EWX_POWEROFF, 0);
application.terminate;
end;


Bacarin

Respostas

18/03/2006

Paullsoftware

caramba pra que esse código todo, eu faço somente assim:
[b:0fd1b96d3e]declare a unit windows[/b:0fd1b96d3e]
//Desliga
ExitWindowsEx(EWX_FORCE,EWX_SHUTDOWN);
//Faz logoff
ExitWindowsEx(EWX_FORCE,EWX_LOGOFF);
//Reinicia
ExitWindowsEx(EWX_FORCE,EWX_REBOOT);


mais respondendo a sua pergunta, esse código que uso funciona normal num sistema de lan-house que tenho, já foi testado em Wind2k, Win98 e Win_XP... :lol:


Responder Citar

18/03/2006

Kitsystem

PaullSoftware,

O amigo esta com a duvida que não esta funcionando, tb já tive este problema, mas nem tentei muito a fundo em relação ao Win98, mas a pergunta dele tem sentido, ou seja, é melhor ajudar ao colocar que ´para que todo este codigo´, deixe algum com experiencia a area o ajudar


Responder Citar

19/03/2006

Kroki

Se não conseguir experimente essa função citada(ExitWindowsEx(EWX_FORCE,EWX_SHUTDOWN))no 98 dentro de um evento de Timer e executando para sua aplicação o ´application.Terminate´ antes de SHUTDOWN.


Responder Citar

20/03/2006

Paullsoftware

PaullSoftware, O amigo esta com a duvida que não esta funcionando, tb já tive este problema, mas nem tentei muito a fundo em relação ao Win98, mas a pergunta dele tem sentido, ou seja, é melhor ajudar ao colocar que ´para que todo este codigo´, deixe algum com experiencia a area o ajudar

:oops: :oops: :oops:
eu nõa estou esnobando com a dúvida dele, muito pelo contrário. Se dei essa impressão a você [b:e1f8a2a618]bacarin[/b:e1f8a2a618] desculpe-me não tive essa intenção! mais o código que citei para vc funciona perfeitamente! :wink:


Responder Citar