Delphi - saber si se ha lanzado el salvapantallas

 
Vista:

saber si se ha lanzado el salvapantallas

Publicado por tino (18 intervenciones) el 03/09/2001 10:43:11
Hola me gustaria saber como puedo preguntar por delphi si se ha activado el salvapantallas o no.

Un saludo ..
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Para Windows 98+ y Windows 2000+

Publicado por Ernesto D'Spirito (706 intervenciones) el 04/09/2001 00:27:38
A partir de Windows 98 y Windows 2000 puedes llamar a SystemParametersInfo con SPI_GETSCREENSAVERRUNNING para saber si el salvapantallas está corriendo.

Para versiones anteriores de Windows (95/NT), no tengo ni idea.

Ernesto
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Para Windows 98+ y Windows 2000+

Publicado por Tino (18 intervenciones) el 04/09/2001 10:55:32
Lo siento por seguir dando la bara pero SPI_GETSCREENSAVERRUNNING no me lo reconoce mi delphi 3
es normal??
Lo que tendria que poner seria?
if SystemParametersInfo(SPI_SETSCREENSAVEACTIVE, 1, nil, 0) then
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Para Windows 98+ y Windows 2000+

Publicado por Ernesto D'Spirito (706 intervenciones) el 04/09/2001 19:40:48
Claro, me imagino que Windows98 no estaba para la época que salió Delphi 3... así que no sólo que no tienes declarada la constante SPI_SCREENSAVERRUNNING (a propósito, vale 97) en windows.pas, sino que la ayuda MS SDK no está actualizada.. Bueno, tu código debería ser así:

const
SPI_GETSCREENSAVERRUNNING = 97;
var
Corriendo: LongInt; // Puede ser LongBool
begin
SystemParametersInfo(SPI_GETSCREENSAVERRUNNING, @Corriendo, nil, 0);
if Corriendo <> 0 then
// El salvapantallas está corriendo

Espero que te sirva.

Ernesto
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Para Windows 98+ y Windows 2000+

Publicado por Tino (18 intervenciones) el 05/09/2001 11:46:59
Siento ser el mas pesado del mundo pero , el codigo que me mandaste
me da el siguiente error (trabajando sobre w.2000 Professional):

Incompatibles types: \'Integer\' and \'Pointer\'

De todas maneras muchas gracias por haberte molestado..
Un saludo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Para Windows 98+ y Windows 2000+

Publicado por Ernesto D'spirito (706 intervenciones) el 05/09/2001 18:16:10
Ah... La función espera como segundo parámetro un entero (que lo interpreta como muchas cosas según el primer parámetro). Haz la conversión:

Integer(@corriendo)

Ernesto
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Para Windows 98+ y Windows 2000+

Publicado por Tino (18 intervenciones) el 06/09/2001 12:30:25
Hola de nuevo , no se como agradecerte ya el que te molestes en contestarme.E puesto todo lo que me mandaste ,solo que la variable
corriendo la he declarado general y la inicializo a 0 en el create, todo
lo demas lo tengo asi , no me da ningun fallo pero , la variable corriendo
he comprobado que no tomo otro valor que el 0 ,auque se halla lanzado el salvapantallas.

Estoi haciendo algo mal??

El codigo lo tengo asi:

procedure TForm1.Timer2Timer(Sender: TObject);
const
SPI_GETSCREENSAVERRUNNING = 97;
begin
SystemParametersInfo(SPI_GETSCREENSAVERRUNNING, integer(@Corriendo), nil, 0);
if Corriendo <> 0 then
showmessage('lanzado');
end;

Un saludo Tino..
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Para Windows 98+ y Windows 2000+

Publicado por Ernesto D'Spirito (706 intervenciones) el 07/09/2001 02:45:34
Te pido disculpas por mi error. El puntero se pasa como tercer parámetro, no como segundo. Te quedaría así:

procedure TForm1.Timer2Timer(Sender: TObject);
const
SPI_GETSCREENSAVERRUNNING = 97;
var
Corriendo: integer;
begin
SystemParametersInfo(SPI_GETSCREENSAVERRUNNING, 0, @Corriendo, 0);
if Corriendo <> 0 then
showmessage('lanzado');
end;

El único detalle, es que las ventanas de ShowMessage no se verán (serán tapadas por el salvapantallas).

Ernesto
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Para Windows 98+ y Windows 2000+

Publicado por Tino (18 intervenciones) el 07/09/2001 14:17:15
Hola de nuevo , ya he conseguido que me funcione a medias.
He cambiado una cosa para que me pudiera funcionar:
const
SPI_GETSCREENSAVERRUNNING = 114;
Lo vi en una pagina china hoy y asi si que funciona , pero me
parece que solo funciona en el 2000(las pruebas me salieron bien) y no en el 98(no he hecho muchas pruebas).

Esperemos cerrar aqui el capitulo del salvapantallas y muchas gracias
por todas las veces que me has contestado..

Un saludo ..
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Para Windows 98+ y Windows 2000+

Publicado por Ernesto D'Spirito (706 intervenciones) el 07/09/2001 18:03:37
A SPI_SCREENSAVERRUNNING (97) lo ví en la unidad Windows y pensé que era ese, curiosamente a mí me funcionó (tengo W98), pero acabo de chequear la página de la MSDN Library y allí dice SPI_GETSCREENSAVERRUNNING (114), y que es para W2000 y W98/Me.

Bueno, creo con eso ya te andará. Suerte!!!!! :-)

Ernesto
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar