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);
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.
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.
:)
vBulletin v3.6.8, Derechos ©2000-2024, Jelsoft Enterprises Ltd.