Visualización en pantalla
Visualización en pantalla
Hola, A ver si pueden ayudarme a resolver estas dudas:
1.-Es posible crear una ventana GUICreate("",1280,20,-1,750,$WS_POPUP,$WS_EX_TRANSPARENT ), justo encima de la barra de tareas de Win, de forma que siempre quede en esa posición independientemente de la resolución o tamaño del monitor.
2.-Cómo se puede conseguir el efecto de "Apagar equipo" en Win (la pantalla queda en gris a excepción de la ventana que queda en color). Otros programas como el TuneUp también lo hacen cuando compacta el registro por ejemplo ...
Saludos
1.-Es posible crear una ventana GUICreate("",1280,20,-1,750,$WS_POPUP,$WS_EX_TRANSPARENT ), justo encima de la barra de tareas de Win, de forma que siempre quede en esa posición independientemente de la resolución o tamaño del monitor.
2.-Cómo se puede conseguir el efecto de "Apagar equipo" en Win (la pantalla queda en gris a excepción de la ventana que queda en color). Otros programas como el TuneUp también lo hacen cuando compacta el registro por ejemplo ...
Saludos
- Ximorro
- Profesional del Autoit
- Mensajes: 1500
- Registrado: 10 Jul 2009, 12:35
- Ubicación: Castellón, España
Re: Visualización en pantalla
Es muy fácil mirando exáctamente dónde está la barra, en realidad mejor hacerlo así porque no sé si sabes que el usuario puede ponerla arriba, o incluso en los laterales.
Se me ocurre esta manera, pongo el resultado en un MsgBox pero simplemente puedes usar esos datos para crear tu GUI:
Aunque la barra se oculte automáticamente (como en mi caso) te muestra el valor completo, si también quieres ocultar tu barra pues eso no sé cómo detectarlo.
Para que esté siempre encima tendrás que usar probablemente el estilo extendido $WS_EX_TOPMOST al crearla, o posteriormente con WinSetOnTop(). Quizás también se pueda quitar el flag topmost a la bandeja, puede que se deje (tamibén se hace con WinSetOnTop())
Lo del efecto que dices ya es más complicado y requeriría investigación, supongo que lo haría usando GDI+, capturando la ventana, haciendo un GUI sin barra de título ni borde que lo tape todo y pintando a mano en ese GUI la pantalla modificada pasada a grises... y el otro GUI encima... Esa es la idea, te recomiendo ir mirando los ejemplos con GDI+, que la cosa tiene su intríngulis.
A ver qué haces con ese programa no me seas malo.
Se me ocurre esta manera, pongo el resultado en un MsgBox pero simplemente puedes usar esos datos para crear tu GUI:
Código: Seleccionar todo
$PosTamBarra = WinGetPos("[Class:Shell_TrayWnd]")
MsgBox(0, "BARRA DE TAREAS DE WINDOWS", "Posición (X,Y): " & $PosTamBarra[0] & "," & $PosTamBarra[1] & @CRLF & _
"Tamaño (ancho, alto): " & $PosTamBarra[2] & "," & $PosTamBarra[3])
Para que esté siempre encima tendrás que usar probablemente el estilo extendido $WS_EX_TOPMOST al crearla, o posteriormente con WinSetOnTop(). Quizás también se pueda quitar el flag topmost a la bandeja, puede que se deje (tamibén se hace con WinSetOnTop())
Lo del efecto que dices ya es más complicado y requeriría investigación, supongo que lo haría usando GDI+, capturando la ventana, haciendo un GUI sin barra de título ni borde que lo tape todo y pintando a mano en ese GUI la pantalla modificada pasada a grises... y el otro GUI encima... Esa es la idea, te recomiendo ir mirando los ejemplos con GDI+, que la cosa tiene su intríngulis.
A ver qué haces con ese programa no me seas malo.
"¿Y no será que en este mundo hay cada vez más gente y menos personas?". Mafalda (Quino)
Re: Visualización en pantalla
Gracias Ximorro por tu solución, me parece ideal para poder ubicar la GUI, que era la duda que planteaba... No había considerado que la barra pudiera estar en otro lado de la pantalla....
A ver.... explico un poco más, que igual hay algún tipo de confusión. Cuando plantee "justo encima", no me refería en el sentido de superpuesta a la barra de tareas, todo lo contrario, que no la tapara... La idea es crear un label que va mostrando un refran cada 10 segundos y me pareció que el sitio donde menos podia interferir era por encima de la barra de tareas (considerando que la barra está abajo, que suele ser lo más habitual). Bueno es una opción porque tambien se podria hacer con SplashText ,ToolTip. Enfin muestro el código y creo que quedará más claro...
...Preferiría que no mostrara la ventana en la barra de tareas mientra se ejecuta el script; sólo en el Tray.
Sobre la segunda pregunta,que en realidad no tiene que ver con la primera, jajajajaj, era pura curiosidad. Supongo que además de GDI, se debe hacer con alguna API, o algo similar. Debe haber alguna manera de controlar las propiedades de color, brillo, contraste del monitor.
Bien, muchas gracias por tu aportación...
Saludos
A ver.... explico un poco más, que igual hay algún tipo de confusión. Cuando plantee "justo encima", no me refería en el sentido de superpuesta a la barra de tareas, todo lo contrario, que no la tapara... La idea es crear un label que va mostrando un refran cada 10 segundos y me pareció que el sitio donde menos podia interferir era por encima de la barra de tareas (considerando que la barra está abajo, que suele ser lo más habitual). Bueno es una opción porque tambien se podria hacer con SplashText ,ToolTip. Enfin muestro el código y creo que quedará más claro...
Código: Seleccionar todo
#include <GUIConstants.au3>
#include <WindowsConstants.au3>
#include <StaticConstants.au3>
#include <IE.au3>
Opt("WinTitleMatchMode", 3)
Opt("GUICoordMode", 1)
Global $file, $hwnd , $nline, $tline
$file = FileOpen(@ScriptDir &"\refranes.txt", 0)
If $file = -1 Then
MsgBox(0, "Error", "No se puede abrir el fichero.")
Exit
EndIf
$hwnd = GUICreate("Refranes",1280,20,-1,750,$WS_POPUP )
GUISetBkColor(0xEEC900)
GUISetState()
$nline = Random (1, 10, 1)
$tline = FileReadLine($file,$nline)
While 1
If $tline = "" Then
$nline = 0
EndIf
$nline = $nline + 1
$tline = FileReadLine($file,$nline)
Sleep (10000)
GUICtrlCreateLabel($tline, 40, 2, 1200,50,$SS_CENTER)
GUICtrlSetFont( -1, 11, 600,2,"Trebuchet")
WinSetOnTop("Refranes", "", 1)
Wend
FileClose($file)
Sobre la segunda pregunta,que en realidad no tiene que ver con la primera, jajajajaj, era pura curiosidad. Supongo que además de GDI, se debe hacer con alguna API, o algo similar. Debe haber alguna manera de controlar las propiedades de color, brillo, contraste del monitor.
Bien, muchas gracias por tu aportación...
Saludos
- Chefito
- Profesional del Autoit
- Mensajes: 2035
- Registrado: 21 Feb 2008, 18:42
- Ubicación: Albacete/Cuenca (España)
Re: Visualización en pantalla
Las ideas de Ximorro son muy buenas .
Piensa también que puedes interactuar con la barra de tareas de win como si fuese una ventana, y puedes añadirle botones, labes, etc. Puede que esto te interese para poner un label fijo con los refranes o algo así.
Y respecto a lo de poner la pantalla en gris cuando le das a apagar.....pienso exactamente lo que Ximorro. Debe ser una captura de pantalla que a la que tratan los colores, ya que si te das cuenta, cuando intentas darle a algún elemento no puedes. Es como si hubiese una imagen encima. También, si tienes un ordenador un tanto lento, cuando le das a cancelar, hace un efecto como si se quitase algo de encima del escritorio .
Saludos.
Piensa también que puedes interactuar con la barra de tareas de win como si fuese una ventana, y puedes añadirle botones, labes, etc. Puede que esto te interese para poner un label fijo con los refranes o algo así.
Y respecto a lo de poner la pantalla en gris cuando le das a apagar.....pienso exactamente lo que Ximorro. Debe ser una captura de pantalla que a la que tratan los colores, ya que si te das cuenta, cuando intentas darle a algún elemento no puedes. Es como si hubiese una imagen encima. También, si tienes un ordenador un tanto lento, cuando le das a cancelar, hace un efecto como si se quitase algo de encima del escritorio .
Saludos.
Cita vista en algún lugar de la red: En este mundo hay 10 tipos de personas, los que saben binario y los que no ;).
- Ximorro
- Profesional del Autoit
- Mensajes: 1500
- Registrado: 10 Jul 2009, 12:35
- Ubicación: Castellón, España
Re: Visualización en pantalla
Además quieres tu ventana encima y esa no debe perder los colores... a ver cómo lo haces si estás quitando brillo al monitor.
De todas maneras lo de manejar esos ajustes del monitor lo veo difícil de forma general. Será factible de forma particular usando los drivers específicos, pero eso ya depende de lo que te ofrece cada uno.
Es algo más fácil probablemente atacando la tarjeta de video, pero entonces seguramente tendrás que ponerte en modo Direct3D o algo así.
Lo dicho, para lo que quieres lo más fácil es manipular una captura de la pantalla en un GUI TOPMOST, y que tu segundo GUI esté encima de este y no se vea afectado por esa manipulación de colores o brillos.
Me alegro de que sea este tipo de progama el que buscabas, es mucho mejor decir lo que se está haciendo porque así es más fácil dar la ayuda, ¡y mucho mejor si se pone código!
Estaba un poco preocupado por si estaba ayudando a alguna actuación delictiva , porque parecía que querías suplantar la barra de tareas, y simular un apagado aunque no lo fuera... ¿para dejar un ordenador abierto haciendo creer al usuario que no lo está?... malo malo
Sobre lo de que no aparezca en la barra de tareas, puedes hacerlo poniéndole el estilo extendido $WS_EX_TOOLWINDOW, esto es un poco especial porque además hace la barra de título más estrecha, y no pone icono. Pero eso en este caso te puede venir bien porque así tu GUI es más compacto y para lo que quieres probablemente queda mejor.
ciaooo
De todas maneras lo de manejar esos ajustes del monitor lo veo difícil de forma general. Será factible de forma particular usando los drivers específicos, pero eso ya depende de lo que te ofrece cada uno.
Es algo más fácil probablemente atacando la tarjeta de video, pero entonces seguramente tendrás que ponerte en modo Direct3D o algo así.
Lo dicho, para lo que quieres lo más fácil es manipular una captura de la pantalla en un GUI TOPMOST, y que tu segundo GUI esté encima de este y no se vea afectado por esa manipulación de colores o brillos.
Me alegro de que sea este tipo de progama el que buscabas, es mucho mejor decir lo que se está haciendo porque así es más fácil dar la ayuda, ¡y mucho mejor si se pone código!
Estaba un poco preocupado por si estaba ayudando a alguna actuación delictiva , porque parecía que querías suplantar la barra de tareas, y simular un apagado aunque no lo fuera... ¿para dejar un ordenador abierto haciendo creer al usuario que no lo está?... malo malo
Sobre lo de que no aparezca en la barra de tareas, puedes hacerlo poniéndole el estilo extendido $WS_EX_TOOLWINDOW, esto es un poco especial porque además hace la barra de título más estrecha, y no pone icono. Pero eso en este caso te puede venir bien porque así tu GUI es más compacto y para lo que quieres probablemente queda mejor.
ciaooo
"¿Y no será que en este mundo hay cada vez más gente y menos personas?". Mafalda (Quino)
Re: Visualización en pantalla
@Chefito: Thanks por la sugerencia...
@Ximorro: ...justo lo que buscaba para no mostrar la ventana en la barra de tareas de Win, queda más estético.
Respecto a la pantalla, tu respuesta supera mis posibilidades...Era curiosidad suscitada a partir del "Apagar equipo", y de otros programas como el "Desfragmentador de registro de TuneUp", que focaliza en color la ventana de la aplicación y deja el resto en gris inhabilitando la pantalla y su funcionalidad, supongo que es por seguridad e integridad del sistema, ya que el usuario podría interferir con algún proceso mientras se analiza y reescribe la base del registro. Bueno, ese creo que sería un efecto más benévolo que el que habías hipotetizado...
Por otro lado, fíjate que la posicion de la GUI es a 750, que si le sumas que mide 20, más los 30 que mide la barra de tareas de win son los 800 de una pantalla 1280x800, por lo que ninguna ventana queda superpuesta.
Al final la distancia entre lo que uno quiere comunicar, lo que llega a expresar, lo que el otro entiende, y lo que se acaba interpretando con lo que se cree haber entendido pues puede ser enorme, ¿no?... Espero haber disipado cualquier preocupación suscitada , que para este caso y en el sentido que apuntabas, era innecesaria.
Gracias nuevamente por las aportaciones.
Saludos
@Ximorro: ...justo lo que buscaba para no mostrar la ventana en la barra de tareas de Win, queda más estético.
Respecto a la pantalla, tu respuesta supera mis posibilidades...Era curiosidad suscitada a partir del "Apagar equipo", y de otros programas como el "Desfragmentador de registro de TuneUp", que focaliza en color la ventana de la aplicación y deja el resto en gris inhabilitando la pantalla y su funcionalidad, supongo que es por seguridad e integridad del sistema, ya que el usuario podría interferir con algún proceso mientras se analiza y reescribe la base del registro. Bueno, ese creo que sería un efecto más benévolo que el que habías hipotetizado...
Por otro lado, fíjate que la posicion de la GUI es a 750, que si le sumas que mide 20, más los 30 que mide la barra de tareas de win son los 800 de una pantalla 1280x800, por lo que ninguna ventana queda superpuesta.
Al final la distancia entre lo que uno quiere comunicar, lo que llega a expresar, lo que el otro entiende, y lo que se acaba interpretando con lo que se cree haber entendido pues puede ser enorme, ¿no?... Espero haber disipado cualquier preocupación suscitada , que para este caso y en el sentido que apuntabas, era innecesaria.
Gracias nuevamente por las aportaciones.
Saludos
- Ximorro
- Profesional del Autoit
- Mensajes: 1500
- Registrado: 10 Jul 2009, 12:35
- Ubicación: Castellón, España
Re: Visualización en pantalla
Respecto a la pantalla (realmente eran dos consultas totalmente diferentes, casi podías haber puesto dos posts) se me ha ocurrido esta manera sin usar GDI+. Es lo que te decía de poner un GUI que lo tape todo, pero en vez de copiarle el escritorio y manipular la imagen, oscurezco lo de atrás a base de transparencias. A ver qué te parece:
Hago que oscurezca pues el fondo es negro (cambiado con GUISetBkColor). Puedes hacer que aclare poniéndolo blanco, o que se tiña de otro color poniendo ahí lo que quieras.
Saludosssss
Código: Seleccionar todo
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
;Este GUI tapa toda la pantalla, no tiene barra de título ni borde, no aparece en la barra de tareas...
Global $GUI_fondo = GUICreate("Fondo", @DesktopWidth, @DesktopHeight, 0, 0, $WS_POPUP, BitOr($WS_EX_TOPMOST,$WS_EX_TOOLWINDOW))
GUISetBkColor(0)
WinSetTrans($GUI_fondo, "", 1)
;Este es el GUI normal
Global $GUI_frente = GUICreate("Mi ventana principal", 400, 160)
GUICtrlCreateLabel("Esta ventana queda resaltada en primer plano sin oscurecer", 75, 35, 250, 40, $SS_CENTER)
GUICtrlSetFont(-1, 12, 800, 0, "MS Sans Serif")
GUICtrlCreateLabel("", 50, 20, 300, 70, $SS_ETCHEDFRAME)
Global $btnSalir = GUICtrlCreateButton("&Salir", 150, 110, 100, 30)
GUISetState(@SW_SHOW, $GUI_fondo)
GUISetState(@SW_DISABLE, $GUI_fondo) ;Para que no se venga al frente cuando pinchamos
GUISetState(@SW_SHOW, $GUI_frente)
WinSetOnTop($GUI_frente, "", 1) ;Enfrente de todo, incluso $GUI_fondo que es POPUP y TOPMOST
;Hacemos que el escritorio oscurezca a base de cambiar la transparencia de $GUI_fondo
For $i = 0 To 150 Step 5
WinSetTrans($GUI_fondo, "", $i)
Sleep(25)
Next
While 1
Switch GUIGetMsg()
Case $GUI_EVENT_CLOSE, $btnSalir
Exit
EndSwitch
Wend
Saludosssss
"¿Y no será que en este mundo hay cada vez más gente y menos personas?". Mafalda (Quino)
Re: Visualización en pantalla
Una solución genial Ximorro!!!
Has conseguido un efecto muy logrado, y creo que el resultado es mejor incluso que la propuesta inicial ya que se puede escoger el tono para el fondo, preserva los colores del escritorio o la ventana que haya y en lugar de ser una captura, es "real", ya que por ejemplo la hora se actualiza, cosa que en la captura no. Por lo demás tiene la misma funcionalidad: focalizar la atención y la interacción con la ventana de la aplicación.
Además el código queda bastante simplificado y no me parece tan forzado como el método de capturar y manipular la imagen. En fin, muy ingenioso como resuelves con WinSetTrans!
Saludos
Has conseguido un efecto muy logrado, y creo que el resultado es mejor incluso que la propuesta inicial ya que se puede escoger el tono para el fondo, preserva los colores del escritorio o la ventana que haya y en lugar de ser una captura, es "real", ya que por ejemplo la hora se actualiza, cosa que en la captura no. Por lo demás tiene la misma funcionalidad: focalizar la atención y la interacción con la ventana de la aplicación.
Además el código queda bastante simplificado y no me parece tan forzado como el método de capturar y manipular la imagen. En fin, muy ingenioso como resuelves con WinSetTrans!
Saludos
- Chefito
- Profesional del Autoit
- Mensajes: 2035
- Registrado: 21 Feb 2008, 18:42
- Ubicación: Albacete/Cuenca (España)
Re: Visualización en pantalla
Sí, jejejeje....es una forma muy ingeniosa y chula de simular el efecto .
Enhorabuena Ximorro .
Enhorabuena Ximorro .
Cita vista en algún lugar de la red: En este mundo hay 10 tipos de personas, los que saben binario y los que no ;).
- Ximorro
- Profesional del Autoit
- Mensajes: 1500
- Registrado: 10 Jul 2009, 12:35
- Ubicación: Castellón, España
Re: Visualización en pantalla
Gracias, me alegro de que os haya gustado.
Lo mejor es que es una solución simple pero efectiva, esas son las mejores, sin complicaciones.
saludos
Lo mejor es que es una solución simple pero efectiva, esas son las mejores, sin complicaciones.
saludos
"¿Y no será que en este mundo hay cada vez más gente y menos personas?". Mafalda (Quino)