Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > API de Windows
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 28-09-2007
gilberto_1126 gilberto_1126 is offline
Miembro
 
Registrado: jun 2004
Posts: 74
Poder: 20
gilberto_1126 Va por buen camino
Question 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

Última edición por dec fecha: 28-09-2007 a las 19:17:04.
Responder Con Cita
  #2  
Antiguo 28-09-2007
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
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...
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #3  
Antiguo 28-09-2007
gilberto_1126 gilberto_1126 is offline
Miembro
 
Registrado: jun 2004
Posts: 74
Poder: 20
gilberto_1126 Va por buen camino
Gracias por responder Dec

Mira la llamada de la funcion la agregue al clic del boton y aun asi no hace nada.
Responder Con Cita
  #4  
Antiguo 28-09-2007
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
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...
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #5  
Antiguo 28-09-2007
gilberto_1126 gilberto_1126 is offline
Miembro
 
Registrado: jun 2004
Posts: 74
Poder: 20
gilberto_1126 Va por buen camino
No tendra algo que ver que tengo instalado el service pack 2 de windows xp????
Responder Con Cita
  #6  
Antiguo 28-09-2007
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
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.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #7  
Antiguo 28-09-2007
gilberto_1126 gilberto_1126 is offline
Miembro
 
Registrado: jun 2004
Posts: 74
Poder: 20
gilberto_1126 Va por buen camino
le agregue un raise y me aparece el error 1314

que significa este error?
Responder Con Cita
  #8  
Antiguo 28-09-2007
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
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...
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #9  
Antiguo 29-09-2007
Avatar de cHackAll
[cHackAll] cHackAll is offline
Baneado?
 
Registrado: oct 2006
Posts: 2.159
Poder: 20
cHackAll Va por buen camino
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
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Puedo finalizar una aplicación desde la mía??? vejerf Varios 4 15-03-2007 13:14:05
Cómo cerrar otra aplicacion desde mi aplicacion en Delphi 7 Gaby123 API de Windows 5 04-01-2007 22:44:51
Reiniciar Windows 98/XP SoulSoldier C++ Builder 2 17-08-2005 22:42:00
¿Cómo puedo saber desde mi aplicación cuándo se abre por primera vez? nuri Varios 7 21-07-2005 14:07:51
reiniciar un componente COM de windows erickperez6 Varios 0 04-05-2004 22:11:23


La franja horaria es GMT +2. Ahora son las 08:17:43.


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
Copyright 1996-2007 Club Delphi