Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Apagar, reiniciar y cerrar sesión (https://www.clubdelphi.com/foros/showthread.php?t=44371)

jorgegetafe 05-06-2007 01:12:56

Apagar, reiniciar y cerrar sesión
 
Hola, me gustaría saber el código para apagar, reiniciar y cerrar sesión de un ordenador en windows. Gracias.

Caral 05-06-2007 01:21:46

Hola
Codigo de seoane:
Código Delphi [-]
 //Función que permite apagar la computadora o desloguearse
function ShutDownWindows(Flag: word): Boolean;
  var
    TokenPriv: TTokenPrivileges;
    H: DWord;
    HToken: THandle;
  begin
    if Win32Platform = VER_PLATFORM_WIN32_NT then
  begin
      OpenProcessToken(GetCurrentProcess,
        TOKEN_ADJUST_PRIVILEGES,HToken);
      LookUpPrivilegeValue(NIL, 'SeShutdownPrivilege',
        TokenPriv.Privileges[0].Luid);
      TokenPriv.PrivilegeCount := 1;
      TokenPriv.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
      H := 0;
      AdjustTokenPrivileges(HToken, FALSE,
       TokenPriv, 0, PTokenPrivileges(NIL)^, H);
      CloseHandle(HToken);
    end;
    Result := ExitWindowsEx(Flag, 0);
 end;
Procedimiento:
Código Delphi [-]
procedure TFMonitor.FormDestroy(Sender: TObject);
begin
  // OJO Usar o uno u otro procedimiento
 
    // con esto se cierra windows
   ShutDownWindows(EWX_POWEROFF);

    // con esto se cierra la sesion
   // ShutDownWindows(EWX_LOGOFF);

end;
Verdad, Seoane es un Maestro.:D
Saludos

Casimiro Notevi 05-06-2007 01:27:07

Creo recordar que es esto, aunque hace falta que algún experto/maestro lo dé por bueno :)

Cita:

ShutDownWindows(EWX_POWEROFF); // apagar windows
ShutDownWindows(EWX_REBOOT); // reiniciar windows

ShutDownWindows(EWX_POWEROFF or EWX_FORCE); // forzar apagado
ShutDownWindows(EWX_REBOOT or EWX_FORCE); // forzar reiniciado

shutdownwindows(EWX_LOGOFF); // cerrar session


Edito: No había visto tu mensaje, Caral.

jorgegetafe 05-06-2007 01:28:14

thank you very much ;-)

Caral 05-06-2007 01:33:55

Hola Casimiro
Aqui estoy, mas rapido que en el oeste.:D
Pero, reconozco que desconocia la manera de reiniciar, ves, importante tu aparte.
Saludos

jorgegetafe 05-06-2007 01:50:16

Vale la pruebo mañana y os cuento gracias a todos, chao!

jorgegetafe 05-06-2007 01:56:53

la funcion ShutDownWindows no la reconoce, necesito una uses o algo?

seoane 05-06-2007 02:06:04

Cita:

Empezado por jorgegetafe
la funcion ShutDownWindows no la reconoce, necesito una uses o algo?

El código de la función ShutDownWindows te lo escribió Caral :confused:

Caral 05-06-2007 06:14:20

Hola
Yo no escribi el codigo, hey que lo he dicho en mi primer mensaje, seoane.
Cita:

Escrito por mi:
Codigo de seoane:
Si hay que echarle la culpa a alguien no es a mi.:D
Que va seoane, no soy capaz de hacer cosas tan buenas, este es todo tuyo, yo solo copie y pegue.:p
Saludos

Delphius 05-06-2007 06:27:45

Bueno muchachos... tampoco es que esten peliandose por un copyrigth ¿Se convertirá esto en un segundo reconocimiento del trabajo ajeno?:D

Saludos,

roman 05-06-2007 07:42:18

Que seoane me desmienta, pero su intervención no fue para reclamar autoría- cosa que ya Caral había dejado en claro -sino para manifestar su extrañeza ante el comentario

Cita:

Empezado por jorgegetafe
la funcion ShutDownWindows no la reconoce, necesito una uses o algo?

pues, siendo que Caral acababa de escribirla aquí, es por demás raro que se pregunte eso, ¿no creen? ;)

// Saludos

Casimiro Notevi 05-06-2007 10:01:10

me perdío :confused:

jorgegetafe 05-06-2007 10:23:06

Utilizando la función que me habeis dado me salte este error:

"statement expectec, but expression of type 'longbool found, en la siguiente linea

Código Delphi [-]
OpenProcessToken(GetCurrentProcess, TOKEN_ADJUST_PRIVILEGES,HToken);

y en esta otra

Código Delphi [-]
TokenPriv.Privileges[0].Luid);

y en esta

Código Delphi [-]
CloseHandle(HToken);

Para acabar me dice que result no esta definido.

A ver si me podeis ayudar porque no me entero de nada del codigo.

seoane 05-06-2007 12:42:55

La función que puso Caral debería de funcionar, pero aquí te dejo una mas genérica, que seguro que funciona:
Código Delphi [-]
function EnablePrivilege(PrivilegeName: PChar; Enable: Boolean): Boolean;
var
  hToken: THandle;
  Tp: TOKEN_PRIVILEGES;
  Luid: TLargeInteger;
begin
  Result:= FALSE;
  if OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES or
    TOKEN_QUERY or TOKEN_READ, hToken) then
    if LookupPrivilegeValue(nil,PrivilegeName,Luid) then
    begin
      Tp.PrivilegeCount:= 1;
      Tp.Privileges[0].Luid:= Luid;
      if Enable then
        Tp.Privileges[0].Attributes:= SE_PRIVILEGE_ENABLED
      else
        Tp.Privileges[0].Attributes:= 0;
      Result:= AdjustTokenPrivileges(hToken,FALSE,Tp,0,nil,PDWORD(nil)^);
      CloseHandle(hToken);
    end;
end;

Ahora para apagar:
Código Delphi [-]
// Elevamos nuestros privilegios
EnablePrivilege('SeShutdownPrivilege',TRUE);
// Y Apagamos
ExitWindowsEx(EWX_POWEROFF, 0);

dec 05-06-2007 12:45:15

Hola,

Cita:

Empezado por Delphius
Bueno muchachos... tampoco es que esten peliandose por un copyrigth ¿Se convertirá esto en un segundo reconocimiento del trabajo ajeno?

¡Aquí tiran con bala! ¡Cuidado! :D :D

jorgegetafe 05-06-2007 13:37:21

Gracias season, ese código si que me funciona.

¿Y para reiniciar y cerrar sesión?

gracias.

dec 05-06-2007 13:46:15

Hola,

Si revisas la ayuda de la función "ExitWindowsEx" verás que existen otras constantes a parte de "EWX_POWEROFF" que puedes utilizar. :)

jorgegetafe 05-06-2007 13:47:09

Cita:

Empezado por dec
Hola,

Si revisas la ayuda de la función "ExitWindowsEx" verás que existen otras constantes a parte de "EWX_POWEROFF" que puedes utilizar. :)

Gracias mirare en ayuda.

roman 05-06-2007 17:35:13

Cita:

Empezado por jorgegetafe
Utilizando la función que me habeis dado me salte este error:

"statement expectec, but expression of type 'longbool found, en la siguiente linea

Jorge, esto se debe a lo mismo que te pasó en el otro hilo. Tienes desactivada la opción de "Extended Syntax"

// Saludos

roman 05-06-2007 17:37:10

Cita:

Empezado por Casimiro Notevi
me perdío :confused:

¿Qué te perdió?

// Saludos


La franja horaria es GMT +2. Ahora son las 16:08:05.

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