VB SendKeys - problème

christophe68_is Messages postés 16 Date d'inscription mercredi 25 avril 2018 Statut Membre Dernière intervention 18 mai 2018 - 18 mai 2018 à 09:28
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 - 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)
A voir également:

4 réponses

Whismeril Messages postés 19043 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 16 mai 2024 656
18 mai 2018 à 10:38
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)
0
christophe68_is Messages postés 16 Date d'inscription mercredi 25 avril 2018 Statut Membre Dernière intervention 18 mai 2018
18 mai 2018 à 11:04
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
0
christophe68_is Messages postés 16 Date d'inscription mercredi 25 avril 2018 Statut Membre Dernière intervention 18 mai 2018
18 mai 2018 à 11:36
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)
0
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 137
19 mai 2018 à 15:15
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!


0
Rejoignez-nous