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 :

Gestion du Presse Papier (Clipboard) [Débutant]


Sujet :

VB.NET

  1. #1
    Candidat au Club
    Homme Profil pro
    Développeur COBOL
    Inscrit en
    Mars 2020
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur COBOL
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2020
    Messages : 5
    Points : 2
    Points
    2
    Par défaut Gestion du Presse Papier (Clipboard)
    Bonjour,

    Je cherche à faire un programme qui va gérer le presse papier de Windows.

    Pour cela j'ai trouvé un bout de code qui permet de récupérer le texte lorsqu'il y a un changement dans le presse papier.
    Mais pour la suite, j'ai un problème...

    Je précise que je ne connait pas très bien le VB.NET, je début quoi, donc j'ai pas forcément bien compris le code que j'ai copié.
    Le code a un comportement étrange, il ne passe pas par ces deux lignes, qui sont dans la fonction WndProc.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    SauvegardePressePapier(0, 0) = Clipboard.GetText()
    MsgBox(SauvegardePressePapier(0, 0))
    Pouvez-vous me dire pourquoi ? Et comment je peux résoudre ce problème ?

    Voici le code en entier :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    Imports System.Runtime.InteropServices
    Public Class Form1
        Private SauvegardeListBox(,) As String
        Private Const WM_DRAWCLIPBOARD As Integer = 776
        Private Const WM_CHANGECBCHAIN As Integer = 781
        Private fpChainedWindowHandle As IntPtr
     
        Private Sub ListBox1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ListBox1.SelectedIndexChanged
            Me.ListBox2.SelectedIndex = Me.ListBox1.SelectedIndex
        End Sub
     
        Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
            fpChainedWindowHandle = SetClipboardViewer(Me.Handle)
        End Sub
        <DllImport("User32.dll")>
        Public Shared Function SetClipboardViewer(ByVal hWndNewViewer As IntPtr) As IntPtr
        End Function
        <DllImport("User32.dll")>
        Public Shared Function SendMessage(ByVal Handle As IntPtr,
                                     ByVal msg As Integer,
                                     ByVal wParam As IntPtr,
                                     ByVal lParam As IntPtr) As IntPtr
        End Function
     
        Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message)
            MyBase.WndProc(m)
            If m.Msg = WM_DRAWCLIPBOARD Then
                If My.Computer.Clipboard.ContainsText = True Then
                    Me.ListBox1.Items.Add(Clipboard.GetText())
                    SauvegardeListBox(0, 0) = Clipboard.GetText()
                    MsgBox(SauvegardeListBox(0, 0))
                End If
                SendMessage(fpChainedWindowHandle, m.Msg, m.LParam, m.WParam)
            End If
        End Sub
    End Class
    Merci pour votre aide !

  2. #2
    Candidat au Club
    Homme Profil pro
    Développeur COBOL
    Inscrit en
    Mars 2020
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur COBOL
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2020
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    J'ai regardé sur internet la plupart des exemples utilisent cette façon de faire.

    Certain récupère le presse papier simplement avec :

    Mais je souhaite récupérer les valeurs du presse papier même quand l'application est en arrière plan et ce n'est pas possible avec cette méthode à ma connaissance...

    Si vous avez des idées je suis preneur !

  3. #3
    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,
    Si GetText donne ce que tu veux quand il est exécuté, dis-nous comment compte-tu activer ce code quand ton appli est en standby au bas de l'écran ?

  4. #4
    Candidat au Club
    Homme Profil pro
    Développeur COBOL
    Inscrit en
    Mars 2020
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur COBOL
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2020
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    C'est bien là où je suis bloqué

    J'arrive à capter le contenu du presse papier soit avec la méthode de mon 1er message, soit avec celle de mon 2ème message.

    Par contre uniquement la 1er méthode semble permettre de capter les changements du presse papier pendant que mon application est en arrière plan (réduit ou en bas de l'écran)

    Je ne connais pas une autre méthode mais si vous avez une piste je peux toujours regarder

  5. #5
    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
    Peut-être que si tu programmes en réponse à l'événement Activate du Form, tu auras ce que tu veux.
    Tu ne verras le résultat que lorsque le Form sera activé, donc aussi quand tu cliques son icône au bas de l'écran.
    Tu dois savoir aussi que la méthode Paste du TextBox (et d'autres) ramène le contenu du presse-papier dans sa zone de texte.

  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
    Suite ...

    Voici un projet de test : Copier-Coller.zip

    La vidéo suivante montre son fonctionnement : https://www.dropbox.com/s/z24ghz2f5a...oller.mp4?dl=0

    Bon amusement,


  7. #7
    Candidat au Club
    Homme Profil pro
    Développeur COBOL
    Inscrit en
    Mars 2020
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur COBOL
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2020
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    Merci pour tes réponses !

    On se rapproche de ce que je cherche à faire mais ce n'est pas encore vraiment ce que je voudrais faire.

    Le but de mon application est de pouvoir récupérer la liste des copier/coller fait par un utilisateur.
    Ceci pendant que l'application tourne, peut importe qu'elle soit au 1er plan/réduit/arrière plan.

    Dans ton exemple, quand l'application est en arrière plan, uniquement le copié fait en dernier est sauvegardé dans tes texbox.
    Si je copie le mot "salut" et "bonjour, tu auras uniquement le mot "bonjour" dans ta textbox hors moi je voudrais que l'on y trouve "salut" et "bonjour".

    J'espère être plus clair, si je m'exprime mal hésite pas à me poser des questions.

  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
    Bonjour,

    Ce que tu demandes ne me parait pas possible.

    Avec les codes dont tu disposes, tu accèdes au contenu du presse-papier et ce contenu est unique (de plusieurs copier demandés, seuls le dernier est récupérable). C'est pourquoi, pour en obtenir plusieurs, il faut écrire ton propre presse-papier et celui-là, il ne fonctionnera qu'au niveau de ton application.
    Il t'es possible de surveiller ce qui se passe dans ton application et, éventuellement de mettre en place un dispositif pour capter tous les <CTRL>+<C> réalisés sur TES zones de textes, mais ton application ne pourra pas mémoriser (à la place du "vrai" presse-papier) ce qui se passe dans les autres programmes. Or, quand ton application sera réduites, les seuls copier pouvant être fait le seront dans d'autres programmes.

    Voila pourquoi je crois qu'il n'est pas possible de faire ce que tu demandes.

    Mais je peux me tromper et peut-être que quelqu'un d'autre possède une solution ...

  9. #9
    Candidat au Club
    Homme Profil pro
    Développeur COBOL
    Inscrit en
    Mars 2020
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur COBOL
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2020
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    Bonjour !

    Après plusieurs essais, j'ai réussi à faire ce que je veux

    Voici le code source si cela peux intéressé des personnes :

    Copier-Coller.zip

    Merci à toi Phil

  10. #10
    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
    Ah oui ... comme ça ...

    Merci pour le feedback.

    Très bon week-end.

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

Discussions similaires

  1. Réponses: 15
    Dernier message: 30/07/2009, 11h07
  2. Problème avec le Presse-papier (Clipboard)
    Par DPhBxl dans le forum Windows Vista
    Réponses: 5
    Dernier message: 27/11/2008, 01h42
  3. gérer le presse papier (clipboard)
    Par fast&furious dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 05/11/2007, 00h18
  4. Bouton pour copier dans le presse-papier chez le client
    Par kuja2053 dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 29/08/2007, 17h01
  5. lire nom de fichier pour sauvegarde ensuite sur presse papier
    Par chapeau_melon dans le forum VBScript
    Réponses: 3
    Dernier message: 21/03/2007, 20h35

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