IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

Récupérer contenu du presse-papier [Débutant]


Sujet :

VB.NET

  1. #1
    Nouveau membre du Club
    Inscrit en
    Juillet 2007
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 25
    Points : 27
    Points
    27
    Par défaut Récupérer contenu du presse-papier
    Bonjour,

    J'ai fait mon premier petit programme avec SharpDevelop / VB.net.
    Vraiment très simple, je recommande aux débutants

    Ce programme est appelé depuis une page web (Chrome), où je sélectionne des mots qui m'intéressent (et contigus bien sûr), fait Ctrl+C pour les envoyer dans le presse papier puis Ctrl+Alt+B qui est le raccourci clavier que j'ai affecté au raccourci de mon programme.

    J'ai essayé, en entrée du programme, de récupérer le contenu du presse-papier, histoire de m'économiser le Ctrl+C.
    En vain. Car SetText(String) demande donc l'argument String que je ne connais pas, vu qu'il vient de Chrome. Ou est-ce qu'en simulant l'appui sur Ctrl+C cela pourrait marcher, ou alors ce sera trop tard, car étant sorti de Chrome ?

    J'ai peur que ce que je demande ne soit pas possible ?..

    Merci pour vos réponses,

    Christophe.

  2. #2
    Membre émérite Avatar de Phil Rob
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2013
    Messages
    1 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 613
    Points : 2 865
    Points
    2 865
    Par défaut
    Bonjour,

    Ce ne sera certes pas la solution que tu attends, mais ça te donnera peut-être une idée ...

    Il est possible en VB et C# d'envoyer une séquence de touches à l’objet qui a le focus :

    https://docs.microsoft.com/en-us/dot...tframework-4.8

    Une autre idée est celle-ci :
    Quand une zone de texte a le focus, on peut lui faire exécuter la méthode Paste() qui ramène le contenu du presse-papier. Pour l'exemple, je le fais ici sur le GotFocus d'une TextBox :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
        Private Sub TextBox1_GotFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles TextBox1.GotFocus
            TextBox1.Paste()   ' Place ce qui a été copié ailleurs avec <CTRL>+<C>
        End Sub
    Bon travail ...

  3. #3
    Nouveau membre du Club
    Inscrit en
    Juillet 2007
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 25
    Points : 27
    Points
    27
    Par défaut
    Bonjour Phil,
    Merci pour ta réponse. J'ai ajouté un SendKeys.Send("^c") juste derrière le Me.InitializeComponent(), et j'obtiens l'erreur
    System.InvalidOperationException Sendkeys ne peut s'exécuter dans cette application car l'application ne gère pas les messages Windows
    Et juste derrière j'ai le 'Coller', qui fonctionne, lui txtFil.Text = Clipboard.GetText().
    Je n'arrive pas à trouver le souci sur Google, je vais tenter de simuler un Clic droit / Descendre le pointeur de la souris jusqu'au 'Copier' / Clic gauche, soit l'équivalent en souris, vu que je n'arrive pas à émuler le clavier. En espérant qu'à ce moment, c'est toujours Chrome qui a le focus, et non mon programme ?!

    (Peut-être une dll manque, mais laquelle et où la trouver .. mystère.. pour le moment ^^)
    Merci,
    Christophe.

  4. #4
    Membre émérite Avatar de Phil Rob
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2013
    Messages
    1 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 613
    Points : 2 865
    Points
    2 865
    Par défaut
    Oui, je savais que ce n'était pas gagné ...

    Note toutefois que le SendKeys, je ne l'aurais pas tenté avant le Form installé (après le Form_Load, ou mieux sur un événement du comosant qui doit recevoir le contenu du presse-papier).

    N'oublie pas de tester auusi la méthode Paste, peut-être plus fiable que le SendKey.

    En tous cas, merci pour le feedback.

    Et bonne chance pour la suite ...


  5. #5
    Nouveau membre du Club
    Inscrit en
    Juillet 2007
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 25
    Points : 27
    Points
    27
    Par défaut
    La gestion de la souris me semble être assez compliquée & verbeuse. N'y arrivant pas, j'ai appelé un VBS, comme première instruction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    	Dim strChemin As String
    	strChemin = "C:\Users\Christophe\Documents\Scripts\Copier.vbs"
    	Call Shell("wscript """ & strChemin & """", vbNormalFocus)
    	System.Threading.Thread.Sleep(500)    (J'ai du ajouté un délai ici en plus de celui dans le VBS, sinon cela ne fonctionne pas)
    	Me.Focus
    VBS dont la seule fonction est de mettre le focus sur Chrome (j'ai évidemment tenté sans) puis d'activer CTRL+C :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    set WshShell = WScript.CreateObject("WScript.Shell")
    WScript.Sleep 050
    WshShell.AppActivate "Chrome"
    WScript.Sleep 150
    WshShell.SendKeys "^c"
    WScript.Sleep 150
    WshShell.AppActivate "Query"  (Le nom de mon pgm)
    WScript.Sleep 150
    Un souci est apparu : malgré le 'Me.Focus', mon programme ne prend plus le focus - il s'ouvre 'derrière', c'est Chrome qui reste en premier plan Idem si je met par exemple un txtFil.Focus.
    J'ai essayé 'Call Shell("wscript """ & strChemin & """", vbNormalFocus)' ou 'Call Shell("wscript """ & strChemin & """", vbNormalNoFocus)' rien n'y fait.
    Si je commente le 'Call Shell', ma fenêtre prend le focus.

    [EDIT] J'ai compris : Query.exe met un peu de temps à s'ouvrir, j'ai allongé le temps d'attente côté VBS et cela fonctionne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    WScript.Sleep 1000
    WshShell.AppActivate "Query"
    => je vais tenter de mettre une boucle d'attente "tant que Query.exe n'est pas trouvé dans la liste des tâches".

    Merci,

    Christophe.

  6. #6
    Membre émérite Avatar de Phil Rob
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2013
    Messages
    1 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 613
    Points : 2 865
    Points
    2 865
    Par défaut
    'Me.Focus', mon programme ne prend plus le focus - il s'ouvre 'derrière', c'est Chrome qui reste en premier plan Idem si je met par exemple un txtFil.Focus.
    Bonjour,

    Quand tu dis " ... il s'ouvre derrière ...", cela signifie donc qu'il n'est pas ouvert avant Chrome ?
    S'il en est ainsi, ton programme doit pouvoir réagir à l'événement Load de son Form et alors, dans la procédure Form_Load, tu peux programmer
    Me.BringToFront ' Devrait pousser le form à l'avant-plan.
    et/ou
    Me.TopMost = True ' Devrait mettre définitivement le form à l'avant-plan.
    Dans la même procédure, tu peux ajouter la ligne
    txtFil.Paste.

    Si ton programme est déjà ouvert avant d'appeler Chrome, je ne vois pas ce que tu faire ...

    Peut-être que ces instructions BingToFront et TopMost placées dans le Form_Load lui garderont l'avant-plan, tant que tu n'auras pas cliqué la fenêtre Chrome ... A essayer.


  7. #7
    Nouveau membre du Club
    Inscrit en
    Juillet 2007
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 25
    Points : 27
    Points
    27
    Par défaut
    Bonjour Phil,

    J'appelle mon programme depuis Chrome après avoir sélectionné un peu de texte. Le pgm s'ouvrait, mais en arrière plan (il clignote orange dans la barre des tâches).
    Le 'Me.TopMost = True' fonctionne, j'ai donc réduit tous les temps d'attente, et ça marche pile-poil

    Merci !!

  8. #8
    Membre émérite Avatar de Phil Rob
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2013
    Messages
    1 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 613
    Points : 2 865
    Points
    2 865
    Par défaut
    Ainsi, j'aurais quand même pu t’aider un peu ...

    Bon restant de week-end.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 27
    Dernier message: 26/11/2016, 03h53
  2. Recuperer le contenu du presse papier
    Par isoman dans le forum Linux
    Réponses: 6
    Dernier message: 09/02/2008, 19h50
  3. [Free Pascal] Voir le contenu du presse-papier
    Par JoseF dans le forum Free Pascal
    Réponses: 1
    Dernier message: 07/12/2007, 22h01
  4. Réponses: 1
    Dernier message: 29/09/2007, 10h46
  5. Réponses: 12
    Dernier message: 10/06/2006, 20h07

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo