Array
(
)

Desligar windows 98

Bacarin
   - 18 mar 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;


Paullsoftware
   - 18 mar 2006

caramba pra que esse código todo, eu faço somente assim:
declare a unit windows
#Código


//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:


Kitsystem
   - 18 mar 2006

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


Kroki
   - 19 mar 2006

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.


Paullsoftware
   - 20 mar 2006


Citação:
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ê bacarin desculpe-me não tive essa intenção! mais o código que citei para vc funciona perfeitamente! :wink: