Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Suspender e hibernar el pc (https://www.clubdelphi.com/foros/showthread.php?t=49870)

jorgegetafe 01-11-2007 18:15:14

Suspender e hibernar el pc
 
Se como apagar y reiniciar el pc, pero alguien me podria dar el codigo para hibernar y suspender el pc? no lo encuentro por los trucos... :-(

gracias.

enecumene 01-11-2007 18:37:46

Hola jorgegetafe, intenta con esto:

Código Delphi [-]
SetSystemPowerState(FALSE,FALSE);

Saludos.

jorgegetafe 01-11-2007 18:39:55

Cita:

Empezado por enecumene (Mensaje 242905)
Hola jorgegetafe, intenta con esto:


Código Delphi [-]SetSystemPowerState(FALSE,FALSE);



Saludos.

No me hace nada el codigo cuando lo ejecuto :-(

enecumene 01-11-2007 18:43:14

Hola, Que raro, en el uses tienes puesto la ShellApi?

Saludos.

jorgegetafe 01-11-2007 18:44:10

Si, me pasa lo mismo tambien cuando quiero apagar la pantalla, que no hace nada. :mad:

enecumene 01-11-2007 18:57:26

Que raro, porque lo acabo de probar y me funciona. prueba tratando de configurar la energia del monitor en las propiedades del escritorio en la paleta del protector de pantalla a ver, luego me comentas.

Saludos.

jorgegetafe 02-11-2007 11:20:46

En opciones de energia tengo habilitado: "habilitar hibernacion" y en combinaciones de energia tengo: "escritorio u oficina" y aun asi no me hace nada el código cuando lo ejecuto.

Lepe 02-11-2007 13:13:00

Igual no tienes permisos para ejecutar esas tareas, o tu proceso requiere permisos de administrador.

Me pasó al migrar un programa a XP.

Código Delphi [-]
function TFrmteclas.ShutDownWindows(Flag: Word): Boolean;
var
  TokenPriv: TTokenPrivileges;
  H:         DWord;
  HToken:    THandle;
begin

  Flag := EWX_POWEROFF; // EWX_REBOOT, ETC.

  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;

Para apagar el monitor basta con:
Código Delphi [-]
  Application.ProcessMessages;
  Sleep(150);
  PostMessage(Application.Handle , WM_SYSCOMMAND, SC_MONITORPOWER,1);
Ojo al Sleep. Se puede procesar el postMessage pero por el ciclo de mensajes, se puede activar de nuevo y aparentar que no hace nada la instrucción.

Saludos

jorgegetafe 02-11-2007 13:31:49

Me salen algunos errores y no entiendo la función, me dice por ejemplo que la funcion necesita un resultado aunque se lo das mas abajo y algunas variables que no estan declaradas...

enecumene 02-11-2007 14:12:22

Hombre lo tuyo esta complicado, el mismo codigo de lepe lo acabo de probar y no me tira errores, revisa el codigo bien si hay alguna laguna.

Saludos.

jorgegetafe 02-11-2007 14:18:14

Copio y pego tal cual el codigo que me indicais, este es el resultado:

http://img514.imageshack.us/img514/8646/erroryd2.jpg

enecumene 02-11-2007 14:24:07

Seguro tienes SHellApi en el Uses? si es asi y sigues con el problema vamos a esperar al Maestro Lepe a ver que te dice? digame una cosa que version de delphi usas?

Saludos.

jorgegetafe 02-11-2007 14:43:30

Tengo delphi 7.0 y si, tengo ShellApi incluido en mi uses.

Pos tocara esperar, gracias.

Lepe 02-11-2007 16:14:16

Hombre.... copiar y pegar... no sé yo.

Mi ventana se llama FrmTeclas, la tuya no sé.
Tendrás que declarar el prototipo de la función (o hacerla un procedimiento), es decir, declararla en:
Código Delphi [-]
class TForm23= class(TForm)

private
   function ShutDownWindows(Flag: Word): Boolean;
end;

Dentro de la función asigno el valor de "Flag", esa línea la puedes quitar, era solo de ejemplo para que vieses el valor que puede tomar.

Si acaso faltase algún "uses" podría ser "shlobj", pero si te dice Undeclared identifier, haces un clic sobre la palabra en cuestión en el editor de código fuente y pulsas F1 (el compilador no sabe donde está declarada, pero la ayuda de delphi si).

PD: Muy bueno el nombre de tu unidad ... "somnifero.pas" deja bien claro lo que hace dicha unidad ;).

Saludos

jorgegetafe 02-11-2007 16:15:52

Gracias probaré lo que me has comentado.


La franja horaria es GMT +2. Ahora son las 07:12:09.

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