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)
-   -   Reboot despues de la ejecucion de determinado programa (https://www.clubdelphi.com/foros/showthread.php?t=63993)

gorsan 11-03-2009 22:57:50

Reboot despues de la ejecucion de determinado programa
 
Hola a todos. De nuevo les planteo un problema, supongo que fácil para ustedes que son unos monstruos, y que consiste en lo siguiente:

Necesito rebotar una maquina una vez que haya terminado determinda aplicacion. En concreto, la aplicacion activa/desactiva los puertos USB y cuando esta termina necesito que la maquina se reinicie para que los cambios surtan efecto y todo ello por control remoto. ¿Cómo puedo saber cuando esa aplicacion a terminado para lanzar el reboot en mi aplicacion?

Gracias por sus respuestas.

jhonny 11-03-2009 23:13:11

No necesitas capturar una especie de menaje "remoto" que indique que el proceso terminó para simplemente reiniciar esa maquina.

Al final de todo el proceso, dentro del mismo aplicativo, simplemente haces lo que indica dec, en el siguiente link...

http://www.clubdelphi.com/trucos/ind...l=0&scrollb=57

gorsan 11-03-2009 23:21:12

Lo que necesito realmente es saber cuendo determinado programa, por ejemplo, programa.exe deja de estar activo en el "Administrador de tareas de Windows" porque el usuario lo ha cerrado o porque ha terminado su ejecucion. Es en ese momento, cuando acaba la aplicacion, cuando yo debo proceder a reboot.

roman 11-03-2009 23:50:58

Intenta con el ejemplo que pongo aquí.

// Saludos

gorsan 12-03-2009 00:12:10

Muchas gracias Roman. Es justo lo que necesitaba.
Ahora: ¿Como hago un reboot forzoso?

escafandra 12-03-2009 00:42:46

Cita:

Empezado por gorsan (Mensaje 341063)
...Ahora: ¿Como hago un reboot forzoso?

Bueno, quizás jhonny ya te dió la solución.

Saludos.

gorsan 12-03-2009 09:20:59

Código Delphi [-]
if ExitWindowsEx (0,0) = 0 then
  showmessage ('No puedorrr reiniciar Windows');

if ExitWindowsEx (1,0) = 0 then
  showmessage ('No puedorrr cerrar el ordenador');

if ExitWindowsEx (2,0) = 0 then
  showmessage ('No puedorrr reiniciar el ordenador');

¿por qué me da el mensaje de error Incompatible types?
¿donde esta fallando?
Se supone que la funcion ExitWindowsEx esta en Windows.dcu ¿no?

escafandra 12-03-2009 09:33:58

ExitWindowsEx retorna BOOL

Saludos.

gorsan 13-03-2009 09:34:45

Necesito que se reinicie el pc. De la rutina que menciona Jhonny, es decir:
Código Delphi [-]
if ExitWindowsEx (0,0) = False then showmessage ('No puedorrr reiniciar Windows');
if ExitWindowsEx (1,0) = False then showmessage ('No puedorrr cerrar el ordenador');
if ExitWindowsEx (2,0) = False then showmessage ('No puedorrr reiniciar el ordenador');
solo se produce la (0,0), es decir, que se reinicia windows. Las otras dos, es decir, las (1,0) y (2,0), cerrar ordenador y reiniciar ordenador respectivamente no se producen.
Seguro que es porque el ordenador esta en un dominio y faltan privilegios de seguridad o no se cual es la razon.
¿alguien tiene alguna idea?
Gracias.

escafandra 13-03-2009 09:51:39

Código Delphi [-]
ExitWindowsEx(0,0); // EWX_LOGOFF - Cierra los procesos y la sesión del usuario. 
ExitWindowsEx(2,0); // EWX_REBOOT - Reboot. Debes tener privilegio SE_SHUTDOWN_NAME 
ExitWindowsEx(8,0); // EWX_POWEROFF - Apagar. Debes tener privilegio SE_SHUTDOWN_NAME
Saludos.

Lepe 13-03-2009 15:09:50

Aqui

Saludos

gorsan 13-03-2009 20:09:37

Gracias [Lepe]. Tiene buena pinta la funcion pero no compila.
Código Delphi [-]
    AdjustTokenPrivileges(HToken, FALSE,
      TokenPriv, 0, PTokenPrivileges(NIL)^, H);
Aqui da error "ambiguous overloaded call to 'AdjustTokenPrivileges' "
Uso Windows xp SP3 y Delphi 7
¿qué esta pasando?

gorsan 15-03-2009 09:42:44

Por favor que alguien me diga que es lo que esta pasando. Me he quedado colgao ...

escafandra 15-03-2009 12:42:44

Cita:

Empezado por gorsan (Mensaje 341391)
Código Delphi [-]
AdjustTokenPrivileges(HToken, FALSE, TokenPriv, 0, TokenPrivileges(NIL)^, H);

Aqui da error "ambiguous overloaded call to 'AdjustTokenPrivileges' "

Parece que estas tratando de sobrecargar la función....
Yo tengo Delphi 6 y no me da ese error. No se si tu versión tiene la función AdjustTokenPrivileges como parte de el, ademas de la API.

Como la llamada que interesa es a la API AdjustTokenPrivileges, trata de hacerlo así:
Código Delphi [-]
Windows.AdjustTokenPrivileges(HToken, FALSE, TokenPriv, 0, PTokenPrivileges(NIL)^, H);
Mira tambien si la has redeclarado....

Saludos.

gorsan 15-03-2009 21:46:16

Gracias escafandra. Por fin compila. Poniendo la palabra Windows delante de la funcion parece que se entera. Muchas gracias.
Con esto doy por concluido el hilo.
Gracias a todos por vuestra ayuda, especialmente a Roman y escafandra.


La franja horaria es GMT +2. Ahora son las 21:51:52.

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