Discussions au sujet de NI LabVIEW

cancel
Showing results for 
Search instead for 
Did you mean: 

Récupérer une image contenu dans le presse papier

Solved!
Go to solution
Highlighted

Bonjour à tous,

 

Pour l'un de mes banc de test, j'utilise un Picoscope de chez NI et je dois récupérer pour chaque test effectué une image du signal que je viens coller dans un rapport de test excel par la suite. Pour faire cela, j'utilise le sous VI du Piscope disponible qui permet de copier mon image dans le presse papier, ensuite j'ai besoin de récupérer cette image et de la sauvegarder dans un fichier pour ensuite pouvoir la gérer lors de la création de mon rapport de test.

 

Pour récupérer mon image contenu dans le presse papier j'utilise le Noeud de Méthode "Presse-papiers => Obtenir une image" et ensuite je peux la sauvegarder dans une fichier avec un nom spécifique comme voulu.

 

LE soucis et que ce Noeud de propriété ne fonctionne qu'en mode développement et non en mode exécutable ce qui fait que lorsque je crée l'exécutable de mon Vi il me sort une erreur.

erreur.png

Le problème est connu de Ni car il est même indiqué dans l'aide du Noeud de méthode que cela ne fonctionnera pas en mode exécutable...

erreurrecupimage.png

 

En cherchant une autre méthode sur les forums anglophone, je me rend compte que beaucoup de monde ont rencontré le même soucis que moi et certain on réussi à résoudre ce problème en passant par des Noeud de Méthode .NET. Le soucis est que le noeud de méthode .NET utilisé n'est pas disponible chez moi... Noeud de méthode System.Windows.Forms.Clipboard.GetImage....

NETClipboard.png

Voici la solution proposé dans les forums mais que je ne peux pas appliquer car la méthode .NET n'est pas disponible chez moi...

 

NETmethodtosaveClipboard.png

 

Donc voila, je me retrouve bloqué à cause de cela alors que mon programme est prêt à partir en production... Quel intérêt de mettre en place des Noeuds de méthode inutilisable en mode exécutable??? Bref, avez vous déjà rencontré ce soucis et si oui avez vous une autre méthode pour récupérer une image contenu dans le presse papier de Windows? J'indique que je suis sous Windows 10, avec un Labview2019 et Runtime 2019 du coup.

 

Merci d'avance à tous.

0 Kudos
Message 1 of 12
(761 Views)
Highlighted

https://lavag.org/topic/10281-discuss-get-data-from-clipboard/?tab=comments#comment-61589

 

Lien vers une solution un peu vieille (Windows XP) basée sur les dll de Windows (user32, kernel32 et shell32).

Je sais pas si ça marche encore sous XP mais je l'ai utilisé sous 7 et ça marchait bien.

 

Bon courage!


We have two ears and one mouth so that we can listen twice as much as we speak.

Epictetus

Antoine Chalons

0 Kudos
Message 2 of 12
(742 Views)
Highlighted

Bonjour et merci pour votre réponse,

 

Malheureusement le sous vi qui permet de récupérer une image du presse papier et le même code que le miens et il ne fonctionne pas lorsque l'on créer un exécutable... il ne fonctionne qu'en mode développement.

 

 

0 Kudos
Message 3 of 12
(723 Views)

Damned!

 

Regarde ce fil : https://forums.ni.com/t5/LabVIEW/bug-get-clipboard-image-fails-in-executable/td-p/2550223

 

Dans le dernier message il y a un screenshot assez simple et le posteur dit que ça marche aussi en EXE.

Vu que le post date de 2017, c'est peut être du Windows 10


We have two ears and one mouth so that we can listen twice as much as we speak.

Epictetus

Antoine Chalons

0 Kudos
Message 4 of 12
(719 Views)
Highlighted

Je suis tombé sur ce post, le problème est que je n'arrive pas a trouvé le nœud de méthode "Clipboard-Get Image" du début. Apparemment il s'agit d'un nœud de méthode .NET mais je n'arrive pas à le trouver malgré les indications que j'ai trouvé sur un post  un peu plus haut (page 2) qu'un employé NI à posté :

 

"It should work properly for you. The Clipboard class is a static class so no need for a constructor (which is why you have a null reference). Just place a .NET Invoke Node and select the "System.Windows.Forms.Clipboard" class.

To have it working, you need also to use the User Interface as Preferred Execution System (FIle>>VI Properties>>Execution)"

 

Si je place juste un nœud de méthode .NET je ne peux pas choisir la méthode à utilisé, je suis obligé de mettre une référence en entrée de cette méthode pour pouvoir choisir quelque chose mais quoi? lui sur son screenshot il n'a pas d'entrée de câblé sur son nœud de méthode...

 

Arriveriez vous à recréer le code du screenshot? Trouver comment avoir ce nœud de méthode "Clipboard-Get Image"? si oui pourriez vous m'expliquer comment faire ou m'envoyer le vi reconstruit?

0 Kudos
Message 5 of 12
(717 Views)
Highlighted

Bonsoir,

 

Retrouver le bon nœud dans l'arborescence des classes .Net peut s'avérer fastidieux. La référence des méthodes et propriétés des objets Microsoft sur MSDN peut être un bon point d'entrée pour comprendre comment manipuler ces bêtes-là, et retrouver l'assembly dont elles dépendent.

 

Ensuite, sous LabVIEW :

  • Sur le diagramme, clic-droit, palette Connectivity » .Net » Invoke Node (.Net), et on le pose quelque part sur le diagramme
  • Sur le nœud de méthode instancié, clic-droit, Select Class » Browse...
    .Net002.png
  • Puis, dans la boîte de dialogue qui apparaît, il faut aller chercher System.Windows.Forms(4.0.0.0) dans la liste déroulante Assembly, développer l'item System.Windows.Form dans les Objects pour enfin aller sélectionner Clipboard :
    .Net001.png
  • Désormais que l'on sait à quelle classe on a à faire, il n'y a plus qu'à sélectionner la méthode GetImage(). Son caractère statique est dénoté par le préfixe [S] dans la liste.
    .Net003.png

 ...et voilà.

 

Cordialement,

Message 6 of 12
(692 Views)
Highlighted

Pour moi ça ne marche pas, je pense que ça vient de la version de .net ou bien une question de droit en sélectionnant cette méthode, je n'ai jamais rien en sortie (la ref "get imge" est toujours vide).

Et si j'essie de faire constuctor node, je ne peux pas sélectionner "clipboard" car il n'y a rien de public :

 

Annotation 2019-11-09 181047.png

 

N'étant pas familier de .net, je ne sais pas trop comment avancer


We have two ears and one mouth so that we can listen twice as much as we speak.

Epictetus

Antoine Chalons

0 Kudos
Message 7 of 12
(675 Views)
Highlighted
Solution
Accepted by JC51

Zut. Trop content de détailler le cheminement pour configurer les nœuds .Net dans LabVIEW, je n'ai même pas testé ou tenté de reproduire le code proposé.

 

De fait, même constat ici, référence vide. Si je fais un SetText (j'ai voulu tester une opération vers le presse-papier), je me ramasse l'erreur suivante :

Error 1172 occurred at Invoke Node System.Reflection.TargetInvocationException: Une exception a été levée par la cible d'un appel.
Inner Exception: System.Threading.ThreadStateException: Le thread actuel doit être en mode STA (Single Thread Apartment) avant que des appels OLE puissent être effectués. Assurez-vous que votre fonction Main est marquée comme STAThreadAttribute.

 

...ce qui me fait arriver après quelques recherches sur MSDN, sur les remarques qui accompagnent la doc de la classe Clipboard, où il est question de d'utilisation en "single thread apartment" uniquement. Je suppose que le problème vaut aussi pour la méthode GetImage, même si le message d'erreur n'est alors pas aussi explicite (une histoire de key null).

 

Le moyen d'obtenir cette configuration dans le Main que préconise MSDN, il faut forcer l'exécution dans le thread UI (il est unique, et doit donc s'apparenter au mode STA). C'est d’ailleurs mentionné dans le post un peu plus haut, dans ce que rapporte JC51 :

To have it working, you need also to use the User Interface as Preferred Execution System (FIle>>VI Properties>>Execution)"

 

Ainsi, cela fonctionne. Je joint le sous-VI dûment configuré (LV2019).

 

Message 8 of 12
(663 Views)
Highlighted

Super! Merci d'avoir approfondi le sujet.


We have two ears and one mouth so that we can listen twice as much as we speak.

Epictetus

Antoine Chalons

0 Kudos
Message 9 of 12
(642 Views)
Highlighted

Question probablement idiote : n'y a-t-il pas moyen d'éviter le passage par le presse-papier en générant directement le fichier avec l'image ?

0 Kudos
Message 10 of 12
(612 Views)