Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   API de Windows (https://www.clubdelphi.com/foros/forumdisplay.php?f=7)
-   -   No puedo reiniciar windows desde mi aplicacion (https://www.clubdelphi.com/foros/showthread.php?t=48604)

gilberto_1126 28-09-2007 18:34:03

No puedo reiniciar windows desde mi aplicacion
 
Saludos foristas.

Necesito dejar programado Reiniciar una computadora.

tengo problemas con los permisos ya que no me ejecuta ninguna accion.

La hice con la finalidad de que trabaje con windows xp

Aqui les muestro el codigo que utilizo para los permisos

Código Delphi [-]
 
function TForm1.EnablePrivilege(PrivilegeName:PChar;Enable:Boolean):boolean;
var
  TokenPriv: TOKEN_PRIVILEGES;
  Luid:TLargeInteger;
  HToken:THandle;
begin
  Result:=FALSE;
  if OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES,HToken) then
  if LookupPrivilegeValue(NIL,PrivilegeName,Luid) then
  begin
    TokenPriv.PrivilegeCount:=1;
    TokenPriv.Privileges[0].Attributes:= Luid;
    if Enable then
      TokenPriv.Privileges[0].Attributes:=SE_PRIVILEGE_ENABLED
    else
      TokenPriv.Privileges[0].Attributes:=0;
    Result:=AdjustTokenPrivileges(HToken, FALSE,TokenPriv,0,NIL,PDWORD(nil)^);
    CloseHandle(HToken);
  end;
end;
 
procedure TForm1.Button1Click(Sender: TObject);
begin  
  Application.Terminate;
end;
 
procedure TForm1.FormDestroy(Sender: TObject);
begin
  EnablePrivilege('SeShutDownPrivilege',TRUE);
  ExitWindowsEx(EWX_REBOOT or EWX_FORCE, 0);
end;

gracias por su tiempo

dec 28-09-2007 19:19:38

Hola,

¿Pusiste un punto de ruptura en "FormDestroy"? Lo mismo es que no puedes "terminar" la aplicación de ese modo (si quieres pasar por el "FormDestroy"). Tal vez lo suyo sería usar el evento "OnCloseQuery" u "OnClose", simplemente, del formulario principal, y no usar "Terminate", sino el método "Close" del formulario principal.

O, puestos a llevar a cabo una acción en concreto... el "botón" podría ejecutar directamente lo necesario para reiniciar el sistema, y, acto seguido, cerrar la aplicación...

gilberto_1126 28-09-2007 19:27:29

Gracias por responder Dec

Mira la llamada de la funcion la agregue al clic del boton y aun asi no hace nada.

dec 28-09-2007 19:44:58

Hola,

Pues es raro. No es que revisase completamente la función que habilita los permisos necesarios, pero, yo diría que es muy similar (por no decir la misma) que yo mismo he usado alguna vez... sin problema alguno...

Deberías comprobar qué retornan las funciones implicadas, y, en caso de error, echar mano de algo como "GetLastError()", o "SysErrorMessage()", de modo que pudieras obtener algo más de información acerca del posible problema...

gilberto_1126 28-09-2007 20:06:39

No tendra algo que ver que tengo instalado el service pack 2 de windows xp????

dec 28-09-2007 20:19:12

Hola,

Pues no lo creo. Yo uso para apagar el sistema (luego de cierto tiempo) un programa escrito en C# (es cierto), en el que uso las mismas funciones que tú... y tengo instalado el Service Pack 2 de Windows XP.

gilberto_1126 28-09-2007 20:20:20

le agregue un raise y me aparece el error 1314

que significa este error?

dec 28-09-2007 20:36:30

Hola,

No entiendo lo del "raise". Supongo que usas "RaiseLastOSError()", pero,... da igual. En todo caso, según "SysErrorMessage()" el código de error que refieres tiene que ver con la falta de algún privilegio.

No sé si será debido a que usas una cuenta de usuario "no administrador"... En todo caso la solución no pasa por cambiar de usuario, sino por mirar los resultados de las funciones... yo comenzaría por revisar concienzudamente la ayuda de la función "ExitWindowsEx()", que tiene bastante tela que cortar...

cHackAll 29-09-2007 23:27:49

Si es que no es mucho lio ver un mensaje propio del Güindos se me ocurre un:

Código Delphi [-]
WinExec('shutdown -s -f -t 3600', 0);

Saludos


La franja horaria es GMT +2. Ahora son las 07:02:02.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi