PDA

Ver la Versión Completa : Controlar Monitor


tiel
21-07-2004, 05:34:04
Hasta Windows ME pude controlar el monitor (apagar y encender), pero cuando migré a XP ya no pude, leí la Microsoft SDK y no encontré nada, sólo decía que SC_MONITORPOWER es sólo para Windows 95.

Pero supongo que de alguna manera la API sigue controlando el monitor, así que si alguien me pudiera decir cómo, se lo agradecería mucho.

De antemano gracias.

Gydba
21-07-2004, 13:51:28
Buenas,

En XP no anda estas líneas?:

SendMessage(Application.Handle, wm_SysCommand, SC_MonitorPower, 1);
...
SendMessage(Application.Handle, wm_SysCommand, SC_MonitorPower, -1);


Que yo sepa la API (Esta u otra) si sigue controlando el monitor, pero nunca probé nada sobre XP.

Saludos!

tiel
22-07-2004, 06:25:14
Esas líneas son las que uso (usaba) y con XP no sirven.

¿Alguien sabe cómo?

tiel
30-07-2004, 23:06:21
Pues nadie me respondió, pero ya investigué, y las nuevas instrucciones son éstas para apagar el monitor en XP:

Para poweroff:


SendMessage(Handle, WM_SYSCOMMAND, SC_MONITORPOWER, 2);


Para standby:


SendMessage(Handle, WM_SYSCOMMAND, SC_MONITORPOWER, 1);


Para encenderlo:


SendMessage(.Handle, WM_SYSCOMMAND, SC_MONITORPOWER, -1);


Aunque no entiendo la diferencia específica entre standby y poweroff, pero bueno.

Gydba
30-07-2004, 23:21:09
Perdón que me meta, pero lo que yo te mencioné no estaba del todo errado.

Lamentablemente no puede comprobar su funcionamiento porque no tengo una PC con XP, pero no quiere decir que nadie te dio una respuesta.

•–[XII]–•
01-08-2004, 20:07:24
StandBy enciende el monitor cuando muves el ratón y lo otro lo apaga.

ramonibk
03-08-2004, 14:40:07
Bueno yo estoy usando win 2k.
y he probado los comandos puestos por Tiel.
la conclusion es que tanto el de PowerOff como el de Standby.
me ponen el monitor en Standby, y a cualquier movimiento de raton lo activa de nuevo.
alguin sabria como ponerlo para Win 2K

emeceuy
21-11-2008, 12:45:15
hola ! a mi me pasa lo mismo, esas dos funciones ponen al monitor en stand by, pero el problema es que al mover el mouse o tocar el teclado se enciende y eso es lo que justamente no quiero... alguien sabe como puedo evitarlo? de manera que la aplicacion apague y encienda el monitor segun lo necesite (pero que el usuario no lo pueda encender)...

inclusive creo que una opcion sería luego de apagar (o stand by) el monitor desactivar el mouse y el teclado, y luego cuando la aplicacion encienda el monitor volver a activar el mouse y teclado... esa sería una opcion "sencilla", pero se puede? (uso WinXP)

muchas gracias como siempre !

emeceuy
26-11-2008, 13:23:01
hola ! no hay forma de hacer esto?

cHackAll
26-11-2008, 14:45:44
hola ! no hay forma de hacer esto?

no como uno quisiera;

repeat Sleep(1000);
SendMessage(HWND_BROADCAST, WM_SYSCOMMAND, SC_MONITORPOWER, 1);
until OnMonitor;

// ...

SendMessage(HWND_BROADCAST, WM_SYSCOMMAND, SC_MONITORPOWER, -1);

ó

SendMessage(HWND_BROADCAST, WM_SYSCOMMAND, SC_MONITORPOWER, 1);
BlockInput(True);

// ...

SendMessage(HWND_BROADCAST, WM_SYSCOMMAND, SC_MONITORPOWER, -1);

BlueSteel
26-11-2008, 17:23:50
quisiera agregar que si bien puedo programar que el monitor se apague, ya sea utilizando una conbinación de teclas o presionando un boton en específico....:confused::confused:

como sabra el usuario que pulsar o boton presionar para prender el monitor despues ???? lo digo por que el monitor estará apagado, y por lo tanto no sabrá donde posicionar el mouse... o que esta presionando....:confused::confused::confused:

por lo tanto creo que la opción del Stanby es como la mejor...(es mi opinion)....

Salu2:p:D

escafandra
26-11-2008, 19:46:10
quisiera agregar que si bien puedo programar que el monitor se apague, ya sea utilizando una conbinación de teclas o presionando un boton en específico....:confused::confused:

como sabra el usuario que pulsar o boton presionar para prender el monitor despues ???? lo digo por que el monitor estará apagado, y por lo tanto no sabrá donde posicionar el mouse... o que esta presionando....:confused::confused::confused:


Pues parece que la solución a eso sería un Hook al teclado para detectar la combinación de teclas que enciendan el monitor, claro que previamente debe conocerla... O bien encender directamente el monitor.

Saludos.

emeceuy
27-11-2008, 00:40:02
Si, en realidad en mi caso eso no es problema. Mi idea es con 2 PCs usar el VNC o programa similar que permita ver en la PC1 la pantalla del PC2, sin que el usuario de la PC2 vea el proceso en esa PC; entonces cuando comienza el proceso se apaga el monitor de la PC2, y el usuario de la PC1 ve la pantalla por medio del VNC y luego al terminar el proceso se enciende nuevamente el monitor :)

Lepe
27-11-2008, 12:07:50
OFFTOPIC: Precisamente el escritorio remoto permite que ambos puedan ver la pantalla, si tú le apagas el monitor es igual que decirle al usuario: "oye, ¿puedes salir de la habitación?, es que voy a tocar en tu ordenador cosas que tú no puedes ver." :eek:

Yo aconsejaría transparencia, será mejor para ambas partes.

Saludos

emeceuy
27-11-2008, 13:42:53
Entiendo tu planteo Lepe, y es cierto que es mejor transparencia, pero en este caso el usuario sabe que no tiene acceso a ese proceso y es transparente desde el momento que está todo claro para ambas partes.

Estoy teniendo un problema al utilizar SendMessage(HWND_BROADCAST, WM_SYSCOMMAND, SC_MONITORPOWER, 1) y SendMessage(HWND_BROADCAST, WM_SYSCOMMAND, SC_MONITORPOWER, -1); No se porque, luego de encender el monitor el programa no responde (aun sin usar el blockinput, utilizando solamente el comando del monitor) al volver no responde, que raro ! que puede ser?

Edito: a mi en XP no me funcionan bien las lineas que puse arriba, pero sí me funciona SendMessage(Application.Handle, wm_SysCommand, SC_MonitorPower, 1) (como había planteado tiel al principio)