ni.com is currently undergoing scheduled maintenance.

Some services may be unavailable at this time. Please contact us for help or try again later.

Discussions au sujet de NI LabVIEW

annuler
Affichage des résultats de 
Rechercher plutôt 
Vouliez-vous dire : 

Comportement Structure Event avec événement dynamique lorsque l'app n'est pas au premier plan.

Bonjour à tous 🖐

 

Contexte :

Dans un projet Labview j'utilise la classe NotifyIcon du System.Windows.Form (.NET 4 Framework) accessible via la palette .NET.

Cela permet d'ajouter une icone en la zone de notification, avec un menu contextuel. Très utile lorsque l'on fait un programme qui tourne en tâche de fond, sans avoir de face-avant réduite (un serveur TCP dans mon cas qui gèrera quelques clients dév en Labview aussi sur le réseau ou en localhost).

Mais aussi, cela permet de faire des notifications qui s'affiche sur le coté inférieur droit de l'écran. Sur les derniers Windows elles sont plutôt bien mise en avant donc c'est pas si mal. Pour la connexion/déconnexion d'un "client", une info, une erreur à faire remonter, etc etc... bief c'est pas mal, plutot cool comme fonction.

 

Afin de pas réinventer la roue, j'utilise le complément "Notify Icon" d'Averna Tools. Il fonctionne bien, mais n'étant pas totalement complet au niveau des fonctions j'ai ajouté sur celui-ci les événements "BalloonTipShown", "BalloonTipClosed" et "BalloonTipClicked". Les deux premiers c'est pour les logs pour faire du débug principalement, le dernier est plutot utile. Il permet d'avoir un event lorsque l'on clique sur la notification qui s'affiche. Par exemple, une notif d'erreur apparait, je clique dessus afin d'avoir une fenêtre qui va m'expliquer plus en détail le problème ou encore, un process s'est terminé, cela affiche une notif, et je clique dessus afin d'avoir une fenêtre avec les résultats... Les possibilités sont multiples.

 

KaleckFR_0-1674036867213.png

Exemple d'une connexion d'un client sur le serveur (bon c'est en local actuellement 😁)

 

Problème :

J'ai quelques soucis avec les évents justement. Parfois, lorsque l'application n'est pas au premier plan (ce qui est tout le temps le cas dans une appli qui tourne en tache de fond...), bah la structure évent me fait pas forcément le retour instantanément... 😒 faut que je clique sur l'icone par exemple pour que ça fonctionne...

Pour un double clic sur l'icône de l'appli pour ouvrir l'appli ça fonctionne forcément, l'event doubleclick est directement récupéré par la structure évent, mais pour un clic sur une notification généré par l'appli, elle va pas réagir au clic tant que j'ai pas mis l'appli au premier plan ou que je clique sur l'icone. Je vois pas ce qui bloque 😐

 

D'où ma question, une structure évent ne peut fonctionner que si l'appli est au premier plan ? 🤔

 

Aussi, on voit plein de notif d'appli de Microsoft avec des boutons, comme l'appli de mail qui propose 3 boutons avec la notif. J'ai vu que ça ne fonctionnait pas avec NotifyIcon mais avec Microsoft.Toolkit.Uwp.Notifications 😮 Microsoft.Toolkit.Uwp.Notifications 7.1.3 supported frameworks 

On peut voir qu'elle fonctionne à partir de .NET Framework 4.6.1.

Et ICI on peut voir que Labview 2021 utilise .NET Framework 4.6.2 !

Youhou ! Mouais... je trouve pas le toolkit !

Pourtant ce toolkit serait bien mieux, intégration de boutons et d'images (on pourrait mettre l'image d'un graphe de résultat !).

 

Une idée pour charger celui-ci ?

 

Message 1 sur 5
2 161 Visites

Pour Microsoft.Toolkit.Uwp.Notifications j'ai trouvé. Je n'étais pas loin... 😅

 

ICI on peut récupérer la DLL Microsoft.Toolkit.Uwp.Notifications.dll pour .NET 4.6.1

 

Puis on la charge avec un noeud du contructeur, et on a bien accès aux fonctions. 👍

Après on suit la logique de programmation :

// Construct the content and show the toast!
(ref new ToastContentBuilder())
    ->AddArgument("action", "viewConversation")
    ->AddArgument("conversationId", 9813)
    ->AddText("Andrew sent you a picture")
    ->AddText("Check this out, The Enchantments in Washington!")
    ->Show();

et on l'applique à Labview :

ToastContentBuilder.png

Ce qui donne :

KaleckFR_0-1674051339219.png

 

Il semble qu'à partir de Windows 10, il est recommandé d'utiliser ce toolkit à la place de NotifyIcon (pour les notifications). Par ailleurs, plusieurs développeurs indiquent que NotifyIcon est "cassé" depuis Windows 10 au niveau des déclenchements d'events.

 

Je vais donc me pencher sur celui-ci, surtout en ce qui concerne la récupération des évents pour les abonnements aux structures événements.

 

Message 2 sur 5
2 137 Visites

Hello,

 

On utilise aussi NotyIcon, et on cherchait à remplacer les images par défaut. Avec NotifyIcon, il faut redéssiner complètement la fenêtre en la surchargeant ce qui devient vite compliqué en LabVIEW.

J'ai creusé ton problème, et j'ai réussi en récupérant effectivement la dll dans le package.

 

J'ai réussi a gérer les événements et récupérer l'info d'un bouton cliqué par exemple. Par contre, je ne sais pas pourquoi il faut un premier show en même temps que l'enregistrement de l'événement.

Pour les user Input, si on met une case a remplis, on tombe sur une autre dépendance que je n'ai pas trouvé pour le moment. windows.Foundation.dll

Bref, on avance. 

Sinon, effectivement, cette méthode sera certainement plus utilisé que Notify Icon, mais a été développé pour les applications universelle  Windows (UWP), donc on risque aussi de tomber sur des blocages par moment.

En tout cas ca permet de faire plus de choses que le NotifyIcon. A voir en déploiement en exe.

Maxime R.  

  CLA - Certified LabVIEW Architect / Architecte LabVIEW Certifié
  CTA - Certified TestStand Architect / Architecte TestStand Certifié

Message 3 sur 5
2 092 Visites

Salut Maxime,

 

Excellent ! Le callback fonctionne !

Pour le problème de l'enregistrement de l'événement, j'ai testé dans tout les sens, et effectivement il faut absolument que la notification soit affichée pour pouvoir enregistrer l'évent. Si l'on force dans l'autre sens l'enregistrement ne fonctionne pas.

 

Aussi, j'ai l'impression, contrairement à NotifyIcon, que la référence n'a pas vocation à rester ouverte, puisque qu'une fois que les boutons, images, textes, ont été ajouté, il n'est pas possible de les enlever. Donc une référence = une notif. Pour une autre notif différente, il faut alors créer une nouvelle référence, et du coup un nouvel abonnement dynamique... Mais je me trompe peut-être. Je ne connais pas bien les outils .NET... 😫

0 Compliments
Message 4 sur 5
2 068 Visites

J'ai continué a creusé un peu avec un collègue. Mon exemple d'enregistrement n'est pas excellent car en fait l'inscription est au service entier de Toast Notifications. Du coup on peut connaître le nombre de notifications ouvertes avec ce service sur le PC par exemple.

 

Mais j'ai eu des comportements étranges tout de même. Il faut encore passer un peu de temps dessus, mais on doit pouvoir faire des trucs vraiment sympas avec cette dll. Dans notre cas, on devrait pouvoir faire des notifications plus personnalisées avant d'aller dans la notifications à boutons. J'avais installé le SDK .net et je l'ai retiré, mais il faudrait avoir certaines DLL du sdk pour avoir les infos saisies par exemple.

 

Bref, belle trouvaille, sujet a affiner clairement.

Maxime R.  

  CLA - Certified LabVIEW Architect / Architecte LabVIEW Certifié
  CTA - Certified TestStand Architect / Architecte TestStand Certifié

0 Compliments
Message 5 sur 5
2 064 Visites