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)
-   -   Controlar Monitor (https://www.clubdelphi.com/foros/showthread.php?t=12572)

tiel 21-07-2004 05:34:04

Controlar Monitor
 
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?:
Código Delphi [-]
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

Nop
 
Esas líneas son las que uso (usaba) y con XP no sirven.

¿Alguien sabe cómo?

tiel 30-07-2004 23:06:21

Ya pude
 
Pues nadie me respondió, pero ya investigué, y las nuevas instrucciones son éstas para apagar el monitor en XP:

Para poweroff:

Código:

SendMessage(Handle, WM_SYSCOMMAND, SC_MONITORPOWER, 2);
Para standby:

Código:

SendMessage(Handle, WM_SYSCOMMAND, SC_MONITORPOWER, 1);
Para encenderlo:

Código:

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

Cita:

Empezado por emeceuy (Mensaje 328059)
hola ! no hay forma de hacer esto?

no como uno quisiera;

Código Delphi [-]
 repeat Sleep(1000);
  SendMessage(HWND_BROADCAST, WM_SYSCOMMAND, SC_MONITORPOWER, 1);
 until OnMonitor;
 
// ...
 
 SendMessage(HWND_BROADCAST, WM_SYSCOMMAND, SC_MONITORPOWER, -1);

ó

Código Delphi [-]
 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

Cita:

Empezado por BlueSteel (Mensaje 328099)
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)


La franja horaria es GMT +2. Ahora son las 06:08:52.

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