Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Screen Saver

Iniciado por Pogacha, 02 de Febrero de 2006, 11:29:30 AM

« anterior - próximo »

Pogacha

 Que tal ... estaba yo implementando soporte para joystick en el dylo cuando de repente me salto el salva pantallas  :blink: , entonces me di cuenta que mi codigo en el callback de mensajes de windows:case WM_SYSCOMMAND:
  switch(mParam)
  {  
     case SC_SCREENSAVE:
     case SC_MONITORPOWER:
     return 0;
  }
break;
no funciona.
Puede que halla equivocado al copiarlo pues lo hice de memoria, pero esta bien porque debuggeandolo devuelve el 0 cuando viene el salvapantallas.
Pero no hay caso este se activa igual y tengo que mover el ratón o tocar una tecla para continuar en el juego.

A alguién le pasa lo mismo?
Como lo solucionaron?
Hay alguna funcion barata como para resetear el contador del screensaver y evitar que encienda? ( un refresh o algo así )

Saludos y gracias.

MrSickman

 Puedes deshabilitar el salvapantallas de los webos:
SystemParametersInfo( SPI_SETSCREENSAVEACTIVE, FALSE,0,SPIF_SENDWININICHANGE);
Y despues habilitarlo de nuevo antes de que termine el programa:
SystemParametersInfo( SPI_SETSCREENSAVEACTIVE, TRUE, 0, SPIF_SENDWININICHANGE);
a href='http://gpufever.blogspot.com/' target='_blank'>GPUFever blog

Pogacha

 Gracias, voy a investigarlo ...

Es "el camino" o se te ocurrio ahora?

Saludos

[EX3]

 No se si sera el mejor metodo pero es el mismo metodo que uso yo en la dx_lib32 para evitar problemas con la clase grafica. Desactivo el salvapantallas en el metodo de inicializacion y lo vuelvo a activar en el metodo de terminacion de la clase. La cuestion es que va de perlas :)

Salu2...
José Miguel Sánchez Fernández
.NET Developer | Game Programmer | Unity Developer

Blog | Game Portfolio | LinkedIn | Twitter | Itch.io | Gamejolt

Pogacha

 Bien ... ya lo probé y en el XP anda joya ... pero no estoy seguro si es el metodo para general :( , esa es mi duda ahora anda en win 9x/nt/me/2k/xp igual de efectivo?
No tiene problemas de permisos?

Gracias

BeRSeRKeR

 Hola.

Según la documentación de SystemParametersInfo, se puede utilizar en Windows Vista, Windows XP, Windows 2000 Professional, Windows NT Workstation, Windows Me, Windows 98 y Windows 95. En la sección de observaciones no viene nada sobre permisos.

Saludos.
¡Si te buscan en nombre de la ley, huye en nombre de la libertad!!

tewe76

 No me había planteado el tema de desactivar el salvapantallas, pero ciertamente parece importante. El problema es que me da un error, ya que no me admite el "0" ("SystemParametersInfo( SPI_SETSCREENSAVEACTIVE, FALSE,0,SPIF_SENDWININICHANGE)"), dice que no coinciden los tipos. He probado con Null, y tampoco  <_<

¿Estoy haciendo algo mal? EX3, ¿exactamente cómo lo tienes implementado tú? (se lo pregunto a él porque yo también trabajo en VB6, no os pongáis celosos :D)

El código es:
Private Declare Function SystemParametersInfo Lib "user32" Alias "SystemParametersInfoA" (ByVal uAction As Long, ByVal uParam As Long, ByVal lpvParam As Any, ByVal fuWinIni As Long) As Long

Private Sub Form_Load()
Call SystemParametersInfo(SPI_SETSCREENSAVEACTIVE, False, 0, SPIF_SENDWININICHANGE)
End Sub
Tewe
www.TAPAZAPA.com : Funny and easy to play games for all ages! - Fairy Match - Brain Crash
www.LaRebelionDelBiberon.com : Experiencias de unos padres primerizos

MrSickman

 Se que no soy EX3... :D  pero creo que el 3er parametro, lpvParam, ya que es un puntero, va a ser ByRef.
Saludos y espero que rule asi... (ole)
a href='http://gpufever.blogspot.com/' target='_blank'>GPUFever blog

Pogacha

 Ok ... cosas a tener en cuenta:

1 - Averiguar si anda en todas las otras plataformas 9x/me, supongo que si pero me gustaria serciorarme.

2 - Averiguar si realmente no hay problemas de permisos( ya que le estamos dandole al win.ini ),  al parecer no, no me da mucha gana de crear una cuenta de usuario no admin para probar, por ahora voy a suponer que anda, si salta el error veremos despues.

3 - El tipo puede tener el salvapantallas desactivado y nosotros no lo tenemos en cuenta, osea: hay que leer el valor que original, luego hay que ponerlo a 0 y al salir volver a poner el valor original, esto se puede optimizar viendo si no esta apagado de entrada y no tocando nada en ese caso  :lol:  que loco!!!

4 - Hay que preveer el screen saver y el otro de apagado de monitor por inactividad, y ver si no hay otro mas ... como apagado por baja bateria o cosas así ( estos me parecen que no deberian ser evitados )

5 - Al jugar con el teclado y raton no hay problema, el problema lo tuve cuando me puse a jugar con el joystick ... windows no detecta los eventos de joystick como refrescantes, ni siquiera cuando capturas el joystick!

6 - Otra solución alternativa es mandar cada 30 segundos un mensaje de SetCursorPos en el mismo lugar, pero esto realmente es una gronchada   (nooo) .


Luego escribo los resultados que obtenga ( y que otro no halla obtenido antes ;) )

Saludos

MrSickman

 
CitarOtra solución alternativa es mandar cada 30 segundos un mensaje de SetCursorPos en el mismo lugar, pero esto realmente es una gronchada  .
En tal caso seria una Pogachada  :D
a href='http://gpufever.blogspot.com/' target='_blank'>GPUFever blog

[EX3]

 Este el codigo que uso en la dx_lib32:
Public Sub SYS_EnableScreenSaver(Enable As Boolean)
On Local Error Resume Next

Call SystemParametersInfo(SPI_SETSCREENSAVEACTIVE, Enable, CStr(1), 0)

End Sub

Ese parametro de tipo Any (osease, ni su padre lo sabe :D) recibe un argumento de tipo String, en mi caso de valor 1, no 0. Este codigo funciona perfectamente.

Cita de: "Pogacha"3 - El tipo puede tener el salvapantallas desactivado y nosotros no lo tenemos en cuenta, osea: hay que leer el valor que original, luego hay que ponerlo a 0 y al salir volver a poner el valor original, esto se puede optimizar viendo si no esta apagado de entrada y no tocando nada en ese caso  :lol:  que loco!!!
Yo suelo tener desactivado el salvapantallas y aun asi al cerrar mi libreria que vuelve a activar el salvapantallas este sigue configurado como lo deje. Sin embargo, si el salvapantallas estaba activado, despues lo vuelve a activar. Se debe de tratar de un indicador para desactivar lo que seria el evento que lanza el salvapantallas y no la configuracion del mismo. Asi que no temas, que no daras sorpresas innesperadas a nadie con el salvapantallas ;)

Salu2...
José Miguel Sánchez Fernández
.NET Developer | Game Programmer | Unity Developer

Blog | Game Portfolio | LinkedIn | Twitter | Itch.io | Gamejolt

Mars Attacks

 Y si el programa casca después de abrirse, ¿dejáis al usuario sin salvapantallas y sin apagado del monitor?

[EX3]

 
Cita de: "Mars Attacks"Y si el programa casca después de abrirse, ¿dejáis al usuario sin salvapantallas y sin apagado del monitor?
Esto lo estuve pensando un tiempo y pense en interceptar los errores fatales de Windows y reaccionar antes de cerrar el programa.

Esto era algo que pense que no se podia pero revisando unos viejos tutoriales encontre la forma de realizar dicha intercepcion mediante unas llamadas al API de Windows. El tema, si el programa casca, ejecuta un procedimiento justo al producirse el error, dando la posibilidad de reaccionar y realizar algunas llamadas para salvar datos o para reactivar el salvapantallas :)

Aunque alguno mas lo conocera (o eso espero con el nivel que teneis algunos :P) pero por si las moscas y por si algun programador descarriado que se mueva por VB6 como yo :P aqui esta el codigo y una breve explicacion para VB6 que imagino no sera complicado portar a C++ ;)

Tratar errores ajenos a VB

Salu2...

P.D.: ethernet, no me acorde en su dia pero ya que esta puesto el enlace (y contando con que lo veas :P) miratelo y añadelo como COTW, que de seguro le sera util a mas gente ;)
José Miguel Sánchez Fernández
.NET Developer | Game Programmer | Unity Developer

Blog | Game Portfolio | LinkedIn | Twitter | Itch.io | Gamejolt

seryu

 Te recomiendo que utilices DirectInput para el joystick. Si es para un juego shareware y quieres asegurarte de que funcione sin instalar directx adicionales, hazlo con la versión 5 que es la que soporta por defecto windows 98. Y es preferible no tener usuarios de windows 95 ya que todo son problemas.

Puedes utilizar SDL como wrapper del sistema operativo, para el input, sonido, etc, si piensas en hacer versiones para mac o linux. La verdad es que te ahorra muchos problemas.

jaure

 Una solución simple y rápida, aunque no sé si es la mejor, porque no simulas la pulsación de una tecla cualquiera cada X tiempo (se podría hacer mirando el ciclo del salva pantallas).

De esta forma si tu programa deja de funcionar simplemente no se madará la tecla, y el salvapantallas funcionara.  :)

Vaya, ya se te había ocurrido algo así (no leí todo el hilo) antes pero con el ratón, pues a mi no me parece una idea tan descabellada, más me molestaría como usuario que un programa me desactivara la opción del salva pantallas sin preguntarme.






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.