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

C# Discussion :

récupération automatique du presse papier (clipboard)


Sujet :

C#

  1. #1
    Futur Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Juin 2006
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2006
    Messages : 22
    Points : 7
    Points
    7
    Par défaut récupération automatique du presse papier (clipboard)
    Bonjour
    Je suis en train de créer un programme qui récupère automatiquement dans le presse papier les informations quand on copie quelque chose n'importe ou. Après je regarde si c'est un numéro de téléphone et si oui j'enregistre.

    Tout marche presque bien sauf :

    - Firefox qui retourne 2 fois le message WM_DRAWCLIPBOARD quand on copie n'importe quoi.
    - IE qui retourne 2 fois le même message mais quand ferme le navigateur.

    Avez-vous une solution pour empêcher Firefox de retourner 2 fois le message à chaque copie et surtout savez-vous comment faire pour qu'IE ne m'emmerde plus?

    merci d'avance

  2. #2
    Expert éminent
    Avatar de smyley
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    6 270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 6 270
    Points : 8 344
    Points
    8 344
    Par défaut
    La solution pour qu'un logiciel A fonctionne lorsqu'on a pas le contrôle sur les logiciels B et C n'est pas de se tuer à trouver un moyen de hacker les logiciels B et C mais de coder la gestion des cas particuliers dans le logiciel A.

    Vérifie avec par exemple un temps d'attente si tu reçois deux fois le même message et tu pourra en déduire que ça correspond à une action à la Firefox ou IE et agir en conséquence.

  3. #3
    Futur Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Juin 2006
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2006
    Messages : 22
    Points : 7
    Points
    7
    Par défaut
    oui oui j'ai déjà pensé au problème des 2 messages d'affilés.
    Je ne veux pas toucher IE, je suis en entreprise et je ne vais pas m'amuser à modifier 400 postes.

    mais le problème c'est qu'IE lorsqu'il ferme, envoi 2 messages comme quoi il a modifié le presse papier. Or je ne veut pas de ces 2 messages.
    Et là je ne sais pas comment faire pour détecter ce cas dans mon code...
    une idée?

  4. #4
    Membre émérite
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Points : 2 498
    Points
    2 498
    Par défaut
    Une simple verification de contenu ne suffit pas ?

  5. #5
    Futur Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Juin 2006
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2006
    Messages : 22
    Points : 7
    Points
    7
    Par défaut
    je vérifie déjà le contenu, mais je ne peux pas déterminer si le contenu est valable seulement en le regardant.

    cas 1 :
    - Dans IE je copie un numéro de téléphone 0160504030.
    - Mon programme prend le numéro 0160504030.
    - Ensuite je quitte IE.
    - Mon programme prend 2 fois le numéro 0160504030.

    Comment je distingue ce cas de celui-ci, cas 2 :
    - Dans IE je copie un numéro de téléphone 0160504030.
    - Mon programme prend le numéro 0160504030.
    - Ensuite dans IE je copie de nouveau le numéro de téléphone 0160504030.
    - Mon programme prend le numéro 0160504030.

    Dans le 1er cas je peux facilement prendre qu'une fois le numéro, mais comment je sais que je ne dois pas prendre les 2 numéro du tout au moment où IE ferme.

  6. #6
    Expert éminent
    Avatar de smyley
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    6 270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 6 270
    Points : 8 344
    Points
    8 344
    Par défaut
    TU ne peux pas voir que le numéro en question a déjà été ajouté ?

  7. #7
    Futur Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Juin 2006
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2006
    Messages : 22
    Points : 7
    Points
    7
    Par défaut
    si la personne veut copier 2 fois le même numéro ce n'est pas interdit

  8. #8
    Membre émérite
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Points : 2 498
    Points
    2 498
    Par défaut
    Et c'est utile de le garder 2 fois ?
    Et c'est utile de le garder 2 fois ?


  9. #9
    Futur Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Juin 2006
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2006
    Messages : 22
    Points : 7
    Points
    7
    Par défaut
    oui
    la personne copie le numéro
    je lui propose d'appeler le numéro

    s'il dit non ca disparait

    la fois suivante s'il recopie le même numéro il faut que je lui repropose

  10. #10
    Membre émérite
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Points : 2 498
    Points
    2 498
    Par défaut
    - Firefox qui retourne 2 fois le message WM_DRAWCLIPBOARD quand on copie n'importe quoi.
    - IE qui retourne 2 fois le même message mais quand ferme le navigateur.
    Donc tu pourrais jouer sur la duplication du contenu ET un timer ..

    Mais j'y pense aussi ....

    Quand tu recois le message : le numero est une seule fois dans le clipboard ou deja deux fois ?

  11. #11
    Futur Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Juin 2006
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2006
    Messages : 22
    Points : 7
    Points
    7
    Par défaut
    Finalement le fait que firefox retourne 2 fois le clipboard identique ne pose plus de problème, j'affiche un message à l'utilisateur et en fait c'est transparent pour lui puisque c'est le même numéro.

    Par contre pour IE c'est un problème. I l va fermer IE et là paf on lui demande s'il veut enregistrer le numéro alors qu'il n'a rien copié.

    Dns le clipboard il n'est présent qu'1 fois le numéro. C'est le message windows d'évènement que je reçois 2 fois alors que ca devrait être 0 si IE ferme.

  12. #12
    Membre émérite
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Points : 2 498
    Points
    2 498
    Par défaut
    Et par quelle magie un numero se trouve dans le clipboard s'il l'utilisateur ne l'a pas copié ?

    Si c'est le dernier numéro qui avait été copié pourquoi ne l'as tu pas effacé lors de ton traitement ?

    Et si c'est vide dois tu faire aussi qq chose ?

  13. #13
    Futur Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Juin 2006
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2006
    Messages : 22
    Points : 7
    Points
    7
    Par défaut
    je te donne un exemple :

    l'utilisateur ouvre IE
    il va sur les pages jaunes chercher un numéro
    il copie le numéro

    mon programme lui demande s'il veut l'enregistrer
    il répond oui ou non peut importe

    il ferme IE car il a finit sa recherche
    mon programme, qui regarde les event windows passés à propos des modifications du presse papier, récupère 2 fois l'event alors que rien n'a été modifié dans le presse papier et qu'on a juste fermé IE.

    Si l'utilisateur a copié le numéro c'est peut être qu'il en a besoin dans un document Word par exemple donc je ne peux pas enlever le numéro du presse papier.

    Si c'est vide je ne regarde pas le presse papier

  14. #14
    Expert éminent
    Avatar de smyley
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    6 270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 6 270
    Points : 8 344
    Points
    8 344
    Par défaut
    Là par contre question ouverte : quand on reçois le contenu du presse papier par ton moyen, il y a un moyen de savoir quel process l'a envoyé ou à la limite quel handle de fenêtre ? parce que si IE se ferme et que tu peux avoir cette information, tu pourrai rajouter un délais qui vérifie par exemple si au bout de 500 ms ou 1 s IE qui était ouvert est maintenant fermé et tu pourrai en déduire que c'est un faux positif.

  15. #15
    Futur Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Juin 2006
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2006
    Messages : 22
    Points : 7
    Points
    7
    Par défaut
    j'espérais qu'on puisse me donner cette réponse concernant le handle qui a modifié le presse papier car je n'ai pas trouvé.

    Actuellement je peux avoir la liste des process qui tournent et éventuellement en déduire qu'IE a fermé mais ca ne me parait pas une solution très propre et surtout elle risque d'être consommatrice de ressource pour rien.

  16. #16
    Futur Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Juin 2006
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2006
    Messages : 22
    Points : 7
    Points
    7
    Par défaut
    Bon je réponds à moi même pour ceux qui un jour auraient besoin de ces informations.

    Pour firefox :
    j'ai juste gardé dans une variable la date actuel DateTime.Now à chaque fois que je lève l'évènement du changement dans le clipboard.

    Pour IE (mais c'est valable pour tous les programmes qui feraient la même chose) :
    Je regarde qui a envoyer l'évènement grâce à :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    [DllImport("user32.dll", SetLastError = true)]
    static extern uint GetWindowThreadProcessId(IntPtr hWnd, out uint lpdwProcessId);
    Je liste les process et je regarde l'id, si il est identique je temporise car il faut laisser le temps à l'application problématique de fermer, je regarde s'il existe toujours et si on a pas affaire au problème de firefox. Si tout est bon on lève l'évènement :
    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
    uint processId;
    GetWindowThreadProcessId(m.WParam, out processId);
    List<Process> processes = new List<Process>(Process.GetProcesses());
     
    foreach (Process process in processes)
       {
       if (process.Id == processId)
          {
          try
              {
              Thread.Sleep(300);
     
              if (ClipboardChanged != null && !process.HasExited && temporisation < (DateTime.Now))
                 {
                  this.ClipboardChanged(this, EventArgs.Empty);
     
                  temporisation = DateTime.Now;	
                 }
              }
              catch (Exception e){}
          }
       }
    Merci à Roman le Russe du Canada qui m'a trouvé la solution

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

Discussions similaires

  1. Problème avec le Presse-papier (Clipboard)
    Par DPhBxl dans le forum Windows Vista
    Réponses: 5
    Dernier message: 27/11/2008, 01h42
  2. 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
  3. vider automatiquement le presse papier
    Par abu143 dans le forum Général VBA
    Réponses: 5
    Dernier message: 01/11/2006, 18h33
  4. Réponses: 7
    Dernier message: 06/06/2006, 15h38
  5. Réponses: 4
    Dernier message: 18/05/2006, 11h07

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