Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   API de Windows (https://www.clubdelphi.com/foros/forumdisplay.php?f=7)
-   -   Saber si el salvapantallas de windows está ejecutandose (https://www.clubdelphi.com/foros/showthread.php?t=81447)

ElDioni 15-11-2012 09:38:37

Saber si el salvapantallas de windows está ejecutandose
 
Buenos días,

me gustaría saber si se puede conocer el estado del salvapantallas de windows, si se está ejecutando o no. Esto lo quiero para ahorrar espacio en un programa que captura la pantalla del escritorio cada cierto tiempo, en caso de que estuviera el salvapantallas ejecutandose no guardaría la captura y pondría un texto indicando que está el salvapantallas.

Gracias y saludos.

Ñuño Martínez 15-11-2012 11:51:48

Buscando en DuckDuckGo he encontrado que existe una función del API llamada SystemParametersInfo, que al parecer devuelve información de estado del sistema, entre otras cosas el estado del salvapantallas.

Por desgracia sólo encuentro información para VisualBasic, pero parece prometedora. Mira aquí.

De todas formas, si no recuerdo mal de cuando programaba en C para Windows 3.1, el sistema enviaba un mensaje antes de activar el salvapantallas, aunque creo que era un mensaje genérico (tipo WM_PAUSE o WM_BACKGROUND o algo así) y no específico de salvapantallas.

Casimiro Notevi 15-11-2012 11:57:50

He encontrado esto en... parece basic :confused:, pero de ahí se puede saber ya hacerlo en delphi :)
Código SQL [-]
Private Sub Form_Load()     
  Dim bActive As Boolean          ' Find out if screen saver is active, and display a suitable message.     
  SystemParametersInfo SPI_GETSCREENSAVEACTIVE, 0, bActive, False     
  If bActive Then         
    Me.Caption = "Screen saver is active"     
  Else         
    Me.Caption = "Screen saver is not active"     
  End If 
End Sub

ElDioni 15-11-2012 12:11:42

Hola,

gracias a los dos por la información, voy a ponerme a investigar un poco a ver si saco petroleo. Ya os contaré.

Saludos.

ElDioni 15-11-2012 12:43:38

Hola,

estoy haciendo pruebas y por lo visto lo que se puede saber es si el protector de pantallas esta activo, que no es lo mismo que ejecutandose, o inactivo, quiere decir que si yo tengo desactivado el protector me devuelve false y si lo tengo activado me devuelve true pero no me indica si está corriendo en ese momento. Bueno seguiremos mirando a ver que encuentro.

Saludos.

Casimiro Notevi 15-11-2012 12:52:53

Cierto, aquí está el parámetro para saber si está corriendo:

Código SQL [-]
Private Sub Timer1_Timer()     
  Dim bRunning As Boolean      ' Beep if the screen saver is running.     
  SystemParametersInfo SPI_GETSCREENSAVERRUNNING, 0, bRunning, False     
  If bRunning Then         
    Beep     
  End If 
End Sub

ElDioni 15-11-2012 12:57:31

Buenas,

al final he visto otro parametro que es el que indica si el salvapantallas está corriendo. El código queda así.

Código Delphi [-]
Procedure ScreenSaverIsRun();
var
aire:boolean;
begin
SystemParametersInfo(SPI_GETSCREENSAVERRUNNING, 0,@aire, 0);
  if aire then
    begin
      label1.Caption:='Salvapantallas corriendo';
    end
  else
    begin
      label1.Caption:='No se está ejecutando el salvapantallas';
    end;
end;

Saludos y gracias por vuestro tiempo.

ElDioni 15-11-2012 12:59:43

Vaya,

tenía el hilo abierto y no he refrescado para darme cuenta de que habías sido más rápido que yo Casimiro, de nuevo gracias por tu tiempo.

Saludos.


La franja horaria es GMT +2. Ahora son las 08:00:21.

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