2011-11-04 10 views
10

Aquí está la situación. La compañía para la que trabajo construye esta pieza de software en c que puede hacer que una computadora con Windows se comporte como un televisor. Esencialmente, nuestra pieza de software debe ser reproducida a pantalla completa y el contenido se muestra desde Internet sin que el usuario tenga que volver a tocar la computadora.Evitar todos los mensajes del sistema y los mensajes de otro software

El problema es que de vez en cuando, el sistema muestra ventanas emergentes como "Su sistema Windows está listo para una actualización". o "Renueve su suscripción a Norton", etc., que el usuario debe eliminar de forma periódica y manual.

¿Hay alguna manera de mostrar contenido en pantalla completa sin que le molesten esas advertencias?

+4

Hmya, estos mensajes son muy importantes. Considerar que tu aplicación es lo más importante es una batalla que es difícil de ganar. También es bastante cuestionable suprimir la notificación de "La placa madre está en llamas". Deberá convencer a Windows de que el usuario está utilizando activamente la ventana. Un poco difícil con una aplicación de TV. Puede generar alguna entrada falsa con la función SendInput(). –

+5

Lol, no sabía que había una notificación de "La placa madre está en llamas" – Randomblue

+5

Podría probarlo con un soplete. –

Respuesta

13

Yah, esté o no de acuerdo la comunidad de desarrolladores, Microsoft tiene varios estándares sobre cuándo y por qué podría ser aceptable el uso exclusivo del monitor.

La estrategia más oficial es usar DirectX en modo exclusivo. Esto es lo que hacen los juegos, lo que Windows Media Player hace en video de pantalla completa con aceleración de hardware habilitada, etc. Si su aplicación requiere multimedia (según lo sugerido por la TV como funcionalidad), probablemente también deba usar DirectX . Además de brindarle acceso exclusivo a la pantalla, también aumentará el rendimiento de sus aplicaciones a la vez que reducirá la carga de la CPU (ya que sobrecargará los gráficos a la tarjeta de video cuando sea posible).

Si DirectX no es una opción, hay una gran cantidad de hacks disponibles que parecen comportarse de forma diferente entre varias generaciones de sistemas operativos Windows. Por lo tanto, es posible que deba estar preparado para implementar varias técnicas para cubrir cada sistema operativo que tenga previsto admitir.

Una técnica es configurar su aplicación como protector de pantalla actualmente en ejecución. Un salvapantallas si realmente solo un EXE renombrado a SCR con ciertos interruptores de línea de comando debería ser compatible. Pero puede escribir su propia aplicación para que sea un salvapantallas y un pequeño trozo de iniciador que lo configure como salvapantallas y lo inicie. Al salir, la aplicación debe devolver la configuración original del protector de pantalla (tal vez el iniciador espera a que el proceso salga para que devuelva la configuración tanto en salidas elegantes como en terminaciones de proceso no planificadas, es decir, falla de la aplicación). Sin embargo, no estoy seguro si este comportamiento es constante en todas las plataformas, tendrás que probarlo.

Evitar que otras aplicaciones creen controladores de ventanas es realmente un truco en mi opinión y bastante malo que no apreciaría como cliente de dicho software.

Una llamada constante BringWindowToTop() para mantenerte en el frente es mejor (no rompe otro software) pero todavía un poco hack-ish.

7

Captura mensajes de creación de ventana con un gancho global. De esta forma, puede cerrar u ocultar ventanas no deseadas antes de que se vuelvan visibles.

EDIT: Si definitivamente desea evitar ganchos, puede llamar a una función periódicamente, lo que coloca su ventana en la parte superior de la pila z.

+1

Siento que ese tipo de gancho es un poco exagerado ...: S –

+1

Tuve el mismo problema hace unos años, y no pude encontrar ningún método más simple. Es especialmente feo que debe usar una DLL para el código del enlace global. – kol

3

Si usted no necesita el teclado o el ratón de entrada, ¿qué hay de ejecución de la aplicación como un screensaver?

3

Muchos de estos mensajes son activados/gestionados por el Explorador de Windows. Simplemente reemplácelo con su maniquí C#/winform. Al cambiar el valor del registro

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon] 
"Shell"="Explorer.exe" 

Puede especificar prácticamente cualquier exe como una alternativa a explorer.exe Esa es la forma en todas las ventanas sistema basado (incrustado) (ATM & co) hacen. Todavía hay pocos ajustes (deshabilite los servicios que no necesita/dr watson & otros), y por supuesto, querrá mantener una puerta trasera "restart explorer.exe". Pero eso es un buen comienzo

+0

Al ir de esta manera, recibirá soporte específico y eficiente de Microsoft directamente (si lo necesita), y en su mayoría, que no involucra ningún truco sucio. – 131

+0

Los mensajes de actualización de Windows pueden ser activados por el explorador, pero definitivamente no son "brindis" de terceros. Aparte del mencionado Norton, podría haber MS Outlook, google talk, msn messanger, etc. Como desarrollador de C#, incluso creo mis propios mensajes de brindis en algunas de mis aplicaciones que no dependen del explorador. Supongo que mi suposición anterior es que esta era una aplicación para el consumidor y no un dispositivo integrado, o bien podrían licenciar un sistema operativo integrado de Microsoft como XP incrustado. Esta es una versión simplificada de Windows destinada exactamente a su sugerencia como dispositivo dedicado. – BenSwayne

Cuestiones relacionadas