VB SendKeys - problème

christophe68_is 16 Messages postés mercredi 25 avril 2018Date d'inscription 18 mai 2018 Dernière intervention - 18 mai 2018 à 09:28 - Dernière réponse : cs_Le Pivert 5454 Messages postés jeudi 13 septembre 2007Date d'inscriptionContributeurStatut 20 octobre 2018 Dernière intervention
- 19 mai 2018 à 15:15
Bonjour à tous!

Je viens de finir une petite application pour aider des utilisateurs mais je rencontre un "bug" aléatoire.
Je m'explique, j'ouvre un fichier PDF et j'affiche son contenu dans un AxAcroPDF, tout se passe super bien.

Je souhaite pouvoir le visualiser, puis copier le texte et le "retravailler" dans un textbox, tout fonctionne très bien. Par contre de façon aléatoire le "ctrl a", pour sélectionner puis copier les data ne se fait pas lorsque je recharge un nouveau PDF.

Je me suis dit cela vient du temps de chargement du fichier, donc j'ai mis une "pause" avec un sleep, petite amélioration mais toujours des bugs lors de l'ouverture d'un nouveau fichier.

Je remarque un point, lorsque j'ouvre mon fichier via 'lopenfiledialog' et si je clique ensuite sur le bureau windows, le sendkeys ne fonctionne plus. Est ce que cela pourrait venir du fait que l'objet "AxAcroPDF" ne soit plus sélectionner? Merci d'avance pour votre support car la je piétine et je n'ai plus d'idée ..... ()

AxAcroPDF1.LoadFile("unloade.pdf")

Me.OpenFileDialog1.Filter = String.Empty
Me.OpenFileDialog1.ShowDialog()
On Error Resume Next
Me.AxAcroPDF1.LoadFile(Me.OpenFileDialog1.FileName)
Threading.Thread.Sleep(2000)
'AxAcroPDF1.Focus()
My.Computer.Keyboard.SendKeys("^a", True)
Threading.Thread.Sleep(1001)
My.Computer.Keyboard.SendKeys("^c", True)
Afficher la suite 

Votre réponse

4 réponses

Whismeril 12122 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 21 octobre 2018 Dernière intervention - 18 mai 2018 à 10:38
0
Merci
Bonjour

Sendkeys c'est pas un truc magique, c'est même plutôt l'inverse. C'est de la bidouille.

Si tu veux retravailler le texte, charge le dans ton textbox avec les outils dont je t'ai déjà parlé.
Si tu veux afficher le pdf original, fais le avec ta lib, mais ne t'en sers pas pour les données.
A moins (je n'ai pas lu sa doc), qu'elle ait des points d'entrée et de sortie (un API quoi)
Commenter la réponse de Whismeril
christophe68_is 16 Messages postés mercredi 25 avril 2018Date d'inscription 18 mai 2018 Dernière intervention - 18 mai 2018 à 11:04
0
Merci
Bonjour Whismeril,

Je me doute que sendkeys c'est de la bidouille, mais pour le moment je progresse petit à petit.
Je fais les formations dont on m'a parlé, j'arrive à créer des fichiers, récupérer des valeurs, extraire lire. Par contre pour ta proposition, j'ai regardé, mais je n'ai pas encore le niveau je dois progresser.

Ce qui m'étonne, c'est que l'object AxAcroPDF1, ne dispose pas d'une fonction, select all et "copie", ou alors send text, to textbox (cela résoudrait mon problème d'instabilité)

Merci encore Whismeril
Commenter la réponse de christophe68_is
christophe68_is 16 Messages postés mercredi 25 avril 2018Date d'inscription 18 mai 2018 Dernière intervention - 18 mai 2018 à 11:36
0
Merci
Je vais rajouter un "select", avant de faire ma séléction, peut être cela va t il rendre la copie plus stable

AxAcroPDF1.Select()
My.Computer.Keyboard.SendKeys("^a", True)
Commenter la réponse de christophe68_is
cs_Le Pivert 5454 Messages postés jeudi 13 septembre 2007Date d'inscriptionContributeurStatut 20 octobre 2018 Dernière intervention - 19 mai 2018 à 15:15
0
Merci
Bonjour,

Une autre manière de faire sans SendKeys avec un Timer et le Clipboard (Presse papier)

Voir ceci

https://codes-sources.commentcamarche.net/source/view/50620/1203286#top

Exemple avec du texte et une TextBox et avec une image et une PictureBox:

  Private Sub Timer1_Tick(sender As System.Object, e As System.EventArgs) Handles Timer1.Tick
        If Not Clipboard.GetImage Is Nothing Then
            PictureBox1.Image = Clipboard.GetImage
        End If
        If Clipboard.ContainsText = True Then
            TextBox1.Text = Clipboard.GetText
           End If
    End Sub


je te laisse le soin de faire démarrer le Timer et de l'arréter

Voilà c'est tout simple, il faut quand même sélectionner manuellement!


Commenter la réponse de cs_Le Pivert

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.