PDA

Ver la Versión Completa : Apagar, reiniciar y cerrar sesión


jorgegetafe
05-06-2007, 01:12:56
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:

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

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


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
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.

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 (http://www.clubdelphi.com/foros/showthread.php?t=44223)?: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

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

OpenProcessToken(GetCurrentProcess, TOKEN_ADJUST_PRIVILEGES,HToken);

y en esta otra

TokenPriv.Privileges[0].Luid);

y en esta

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:

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:

// Elevamos nuestros privilegios
EnablePrivilege('SeShutdownPrivilege',TRUE);
// Y Apagamos
ExitWindowsEx(EWX_POWEROFF, 0);

dec
05-06-2007, 12:45:15
Hola,


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 (http://msdn2.microsoft.com/en-us/library/aa376868.aspx)" verás que existen otras constantes a parte de "EWX_POWEROFF" que puedes utilizar. :)

jorgegetafe
05-06-2007, 13:47:09
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
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
me perdío :confused:

¿Qué te perdió?

// Saludos

jorgegetafe
05-06-2007, 17:37:19
Ya me resolvieron la duda, gracias de todas formas.

jorgegetafe
05-06-2007, 17:38:13
Ya me han aclarado la duda, muchas gracias.

roman
05-06-2007, 17:40:09
Yo lo dije para que comprendieras porqué la función que escribió Caral no te funciona, pero bueno...

// Saludos

Caral
05-06-2007, 19:11:02
Hola
Pero bueno Egostar amanecio sensible por aqui:http://www.clubdelphi.com/foros/showthread.php?p=206176#post206176
Y vosotros no andáis muy lejos, que esta pasando en Mexico, el tequila subió.?:confused: :D
Saludos

egostar
05-06-2007, 20:17:19
Hola
Pero bueno Egostar amanecio sensible por aqui:http://www.clubdelphi.com/foros/showthread.php?p=206176#post206176
Y vosotros no andáis muy lejos, que esta pasando en Mexico, el tequila subió.?:confused: :D
Saludos

:D:D:D, no, en mi caso es el %&$#" calor que hace por las noches y no deja dormir a gusto.

Ustedes perdonaran.

Salud OS.

Casimiro Notevi
05-06-2007, 20:28:17
¿Qué te perdió?

// Saludos

Perdón, es que me había saltado un par de mensajes y no era capaz de seguir el hilo.
:)