Estoy creando una aplicación Electron con una función de notificación personalizada en la que los divs html5 aparecen y desaparecen según sea necesario en una ventana transparente, sin marco y siempre visible.
Funciona muy bien, pero todavía me gusta el centro de notificaciones de Windows y me gustaría tener la opción de ver las notificaciones anteriores allí, sin mostrarlas en la pantalla con la API de HTML5.
Yo he tratado:
Si bien mencioné Node, también aceptaré cualquier enlace/API de nivel inferior que me permita hacer esto.
Gracias por adelantado.
Con la ayuda de @treckstar en los comentarios, encontré una manera de hacer lo que quería usando:
A pesar de algunos problemas para construir NodeRT y usar la reconstrucción de electrones, aquí hay un PoC funcional:
const { XmlDocument } = require('@nodert-win10-rs4/windows.data.xml.dom'); const { ToastNotification, ToastNotificationManager } = require('@nodert-win10-rs4/windows.ui.notifications'); const localImage = path.join(__dirname, 'icon.png'); const template = ` <toast launch="app-defined-string"> <visual> <binding template="ToastGeneric"> <image id="1" placement="appLogoOverride" hint-crop="circle" src="${localImage}"/> </binding> </visual> </toast> `; const xml = new XmlDocument(); xml.loadXml(template); const toast = new ToastNotification(xml); const notifier = ToastNotificationManager.createToastNotifier("com.myapp.testnotif"); toast.suppressPopup = true; notifier.show(toast);Que esto ayude a cualquiera que se encuentre con el mismo problema altamente específico.
Además de lo que muestra @MadWard en la PoC, la tecla suppressPopup es realmente el actor principal de la solución.
Mientras revisaba toneladas de ejemplos y código de electrones, seguí enfrentándome a obstáculos debido a versiones aleatorias de SDK y bibliotecas de cosas que había instalado. Por ejemplo, el paquete electron-windows-notifications , que usa NodeRT, no pudo cargar mi preload.js porque el SDK de Windows 10 que había instalado (compilación 15063) necesitaba nodert-win10-cu en lugar de lo que se usaba en la mayoría de las soluciones por predeterminado nodert-wind10-au .
| SDK | Conocido como | Versión de Windows | Alcance npm |
|---|---|---|---|
| Windows 10, compilación 17134 | Actualización de abril de 2018 (Redstone 4) | 1803 | npmjs.com/org/nodert-win10-rs4 |
| Windows 10, compilación 16299 | Actualización de Fall Creators (Redstone 3) | 1709 | npmjs.com/org/nodert-win10-rs3 |
| Windows 10, compilación 15063 | Actualización de creadores (Redstone 2) | 1703 | npmjs.com/org/nodert-win10-cu |
| Windows 10, compilación 14393 | Actualización de aniversario (Redstone 1) | 1607 | npmjs.com/org/nodert-win10-au |
| Windows 10, compilación 10586 | Umbral 2 | 1511 | npmjs.com/~nodert-win10 |
EDITAR: Olvidé incluir los pasos más específicos que tomé para obtener archivos de dependencia
electron-windows-notificationsen este problema de GitHub aquí. Básicamente todo, desdePython,node-gypgyp roto y archivos.winmdfaltantes.
Por último, Electron 14+ y NodeRT tienen un problema en el que deberá asegurarse de tener app.allowRendererProcessReuse = false y, como dice el archivo Léame, para asegurarse de que se esté ejecutando en el archivo main.js
Espero que esto ayude a alguien en el camino, ya que nunca antes había usado Electron hasta hoy y había aprendido mucho gracias a la ayuda de otras personas.