Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > API de Windows
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 24-01-2008
Wellnic Wellnic is offline
Miembro
 
Registrado: mar 2007
Posts: 70
Poder: 20
Wellnic Va por buen camino
La mía la adquirí por 995 pesetas hace unos once años, era la primera de una serie de fascículos sobre programación. Apuesto a que es tu mismo caso.

Para lo que hago es más que suficiente Y desde luego no me quejo, ni mucho menos. De hecho aún me viene grande
Responder Con Cita
  #2  
Antiguo 24-01-2008
Avatar de cHackAll
[cHackAll] cHackAll is offline
Baneado?
 
Registrado: oct 2006
Posts: 2.159
Poder: 22
cHackAll Va por buen camino
Cita:
Empezado por Wellnic
Hola, ¿cómo se puede averiguar si en Windows está activada la hibernación?
Revisa el primer comentario de éste truco.

Saludos
Responder Con Cita
  #3  
Antiguo 24-01-2008
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.142
Poder: 36
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Yo utilizo en cierto proyecto una función similar a esta:

Código Delphi [-]
function SystemCanHibernate(): boolean;
resourcestring
  rsDll = 'powrprof.dll';
  rsFunc = 'IsPwrHibernateAllowed';
type
  TFunc = function: boolean; stdcall;
var
  func: TFunc;
  hDll: THandle;
begin
  result := false;
  hDll := LoadLibrary(PChar(rsDll));
  if (hDll <> 0) then
  try
    @func := GetProcAddress(hDll, PChar(rsFunc));
    result := Assigned(func) and func();
  finally
    FreeLibrary(hDll);
  end;
end;

Esta otra función serviría para averiguar si el sistema puede suspenderse:

Código Delphi [-]
function SystemCanSuspend(): boolean;
resourcestring
  rsDll = 'powrprof.dll';
  rsFunc = 'IsPwrSuspendAllowed';
type
  TFunc = function: boolean; stdcall;
var
  func: TFunc;
  hDll: THandle;
begin
  result := false;
  hDll := LoadLibrary(PChar(rsDll));
  if (hDll <> 0) then
  try
    @func := GetProcAddress(hDll, PChar(rsFunc));
    result := Assigned(func) and func();
  finally
    FreeLibrary(hDll);
  end;
end;
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #4  
Antiguo 24-01-2008
Avatar de cHackAll
[cHackAll] cHackAll is offline
Baneado?
 
Registrado: oct 2006
Posts: 2.159
Poder: 22
cHackAll Va por buen camino
Cita:
Empezado por dec Ver Mensaje
Yo utilizo en cierto proyecto una función similar a esta...
han usado mi truco y le han aumentado "cosas"...

Código Delphi [-]
uses Windows;
function IsPwrHibernateAllowed: LongBool; external 'powrprof.dll';
var hToken: Cardinal;
begin
 if OpenProcessToken(DWORD(-1), TOKEN_ADJUST_PRIVILEGES, hToken) then
  AdjustTokenPrivileges(hToken, False, PTokenPrivileges(PChar(#1#0#0#0#19#0#0#0#0#0#0#0#2#0#0#0))^, 16, nil, PDWORD(0)^);
 if not IsPwrHibernateAllowed then
  MessageBox(0, 'No está habilitada la hibernación del sistema!', nil, MB_ICONEXCLAMATION)
 else if not SetSystemPowerState(False, True) then
  MessageBox(0, 'No se ha podido hibernar el equipo!', nil, MB_ICONEXCLAMATION);
end.

PD: tenemos que usar más la sección de trucos.

Saludos
Responder Con Cita
  #5  
Antiguo 24-01-2008
Wellnic Wellnic is offline
Miembro
 
Registrado: mar 2007
Posts: 70
Poder: 20
Wellnic Va por buen camino
Muchas gracias. Trataré de estudiar todas estas funciones, a ver si consigo entenderlas, porque yo no me conformo con copiar y pegar
Responder Con Cita
  #6  
Antiguo 16-05-2008
Wellnic Wellnic is offline
Miembro
 
Registrado: mar 2007
Posts: 70
Poder: 20
Wellnic Va por buen camino
Estas funciones, en realidad, no siempre detectan si se puede hibernar o no. Cuando tengo el MODEM encendido, por ejemplo, no se dan por enteradas de que no se puede hibernar el ordenador.
Responder Con Cita
  #7  
Antiguo 16-05-2008
Avatar de cHackAll
[cHackAll] cHackAll is offline
Baneado?
 
Registrado: oct 2006
Posts: 2.159
Poder: 22
cHackAll Va por buen camino
Otra cosa es que cuando se inicia el proceso de hibernado en modo NO crítico, el sistema envia a todas las colas de mensajes el mensaje WM_POWERBROADCAST, con la estructura PBT_APMQUERYSUSPEND, el cual puede retornar el valor BROADCAST_QUERY_DENY para suspender el intento de hibernación. Esto no significa que las anteriores APIs no sean las adecuadas.

Saludos
Responder Con Cita
  #8  
Antiguo 17-05-2008
Wellnic Wellnic is offline
Miembro
 
Registrado: mar 2007
Posts: 70
Poder: 20
Wellnic Va por buen camino
Sin embargo entiendo que esos mensajes se producen a posteriori, cuando es un poco "demasiado tarde". En la práctica no sirve de mucho saber que no se pudo hibernar, sería más útil saber si se podrá hibernar.

Debería existir una función que lo detectara a priori en todos los casos.

Última edición por Wellnic fecha: 17-05-2008 a las 01:42:13.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Suspender e hibernar el pc jorgegetafe Varios 14 02-11-2007 16:15:52
Dilema marcoszorrilla La Taberna 9 21-09-2007 16:23:20
Delphi - VB : Gran Dilema jorge_mosquera OOP 1 20-03-2007 16:13:58
El gran dilema de la impresión hgiacobone Impresión 5 19-04-2005 09:28:06
Dilema Matrimonial guillotmarc Humor 4 17-05-2003 00:02:22


La franja horaria es GMT +2. Ahora son las 21:26:22.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi