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

Windows Forms Discussion :

[Débutant] Comment émuler une touche du clavier ?


Sujet :

Windows Forms

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 98
    Points : 48
    Points
    48
    Par défaut [Débutant] Comment émuler une touche du clavier ?
    Bonjour à tous,
    je voudrais "tromper Windows" en lui faisant croire que la touche CTRL a été pressée alors qu'en réalité aucune action n'a eu lieu sur le clavier...
    Comment fait on ça en VB.net SVP ?

    Merci d'avance,

    Robert

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 98
    Points : 48
    Points
    48
    Par défaut
    Bon... mea culpa,
    1 - je n'avais pas bien pigé comment ça se passait au niveau de Windows
    2- je me suis super mal expliqué...

    SendKeys est très pratique, mais il envoie la séquence à la fenêtre principale de l'appli... Hum... et si je veux l'envoyer à une appli qui tourne "à côté" ?

    Là je sens que vous allez me dire que c'est beaucoup plus compliqué. Je suppose qu'il faut récupérer des handles et patin coufin... non?

    Désolé d'être aussi nul...

    Robert

  3. #3
    Expert confirmé
    Avatar de Aspic
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    3 905
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2005
    Messages : 3 905
    Points : 4 388
    Points
    4 388
    Par défaut
    Alors si j'ai bien compris tu veux interagir avec 2 applications codées en .Net
    Par exemple, si tu cliques sur une touche de ton clavier dans ta première application, un label ou une msgbox va s'afficher sur ta deuxième application...

    Si c'est ca que tu veux faire, alors il va falloir passer par les handles par tes fenetres et c'est la galère...
    Qui ne tente rien n'a rien !
    Ce qui ne nous tue pas nous rends plus fort !!
    Mon projet ZELDA en C++/Allegro
    http://www.tutoworld.com - Le Forum -
    Mes ressources Dotnet (cours, sources, tutos)
    --------------------------------------------
    + + =

    Ne pas oublier le Tag !

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 98
    Points : 48
    Points
    48
    Par défaut
    En fait, voilà le paysage:
    il y a une appli qui tourne en tâche de fond (je ne sais même pas en quoi elle est écrite). C'est TeamSpeak au cas où tu connaîtrais... Cette appli se commande par une touche du clavier. Même lorsqu'elle n'a pas le focus, elle intercepte la touche concernée. En fait je voudrais la commander depuis mon programme, d'où ma recherche pour envoyer une touche... où, je ne sais pas... au driver du clavier pour leurrer le système ? Où alors ça passe par le système de messages ?

    Je nage un peu (enfin... beaucoup...)

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    138
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 138
    Points : 121
    Points
    121
    Par défaut
    Salut,

    Je connais TeamSpeak. Je n'ai pas la solution, mais je vais essayer d'éclaircir le problème, pour d'autres personne ssusceptibles de t'aider, ne connaissant pas teamspeak:

    Si je saisis bien ta question: Tu veux, par exemple, qu'en appuyant sur un bouton dans ton appli, cela fasse comme si la touche "CTRL" était appuyée, et que TeamSpeak prenne en compte cette simulation (qu'il verra comme appui sur la touche).
    SendKeys risque de ne pas marcher puisqu'il me semble que cela ne fonctionne qu'avec l'application que tu programmes.
    Là, il faut qu'un programme externe (teamspeak) sur lequel tu n'as aucun contrôle reconnaisse une simulation de touche appuyée à partir de ton programme.
    Voilà je pense le problème, en terme de programmation.

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 98
    Points : 48
    Points
    48
    Par défaut
    C'est bien ça...
    En fait Teamspeak semble intercepter tout ce qui rentre depuis le clavier (même quand il n'a pas le focus) et réagit quand c'est la touche pour laquelle il est programmé...
    Le but du jeu, c'est d'envoyer (dans la pile de message ?) à l'aide d'un soft quelque chose (un message "broadcast" ?) qu'il va interpréter comme venant du clavier et lui faisant croire que la touche en question à été enfoncée...

    Il y a deux problèmes: je ne sais pas si c'est une bonne idée, et si elle est bonne, je ne sais pas la mettre en musique...

    Merci en tout cas...

    Robert

  7. #7
    Expert confirmé
    Avatar de Aspic
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    3 905
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2005
    Messages : 3 905
    Points : 4 388
    Points
    4 388
    Par défaut
    Dans ce cas la si l'application est externe, et que tu n'a aucun controle dessus cela me semble impossible...
    Qui ne tente rien n'a rien !
    Ce qui ne nous tue pas nous rends plus fort !!
    Mon projet ZELDA en C++/Allegro
    http://www.tutoworld.com - Le Forum -
    Mes ressources Dotnet (cours, sources, tutos)
    --------------------------------------------
    + + =

    Ne pas oublier le Tag !

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 98
    Points : 48
    Points
    48
    Par défaut
    Bonjour,
    j'ai trouvé un petit logiciel freeware qui fait ça pour le joystick. L'appui sur un bouton emule l'appui sur une touche du clavier... et ça marche.
    Malheureusement, le source n'est pas fourni, mais lors de l'appui sur le bouton il envoie un WM_KEYDOWN suivi d'un WM_CHAR. Quand le bouton est relaché il envoie WM_KEYUP...
    Ce que je n'ai pas trouvé, c'est comment il les envoie... j'ai essayé postmessage avec HWND_BROADCAST, ça m'envoie une rafale de messagess (apparemment un par fenêtre ouverte comme dit la doc si j'ai bien tout compris) mais ça ne marche pas... Pourtant, la solution ne doit pas être bien loin...

    Une idée ?

    Merci d'avance,

    Robert

  9. #9
    Membre chevronné
    Avatar de olsimare
    Inscrit en
    Décembre 2006
    Messages
    1 179
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 179
    Points : 1 776
    Points
    1 776
    Par défaut
    Bonjour.

    Ca se fait par l'API Sendmessage :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Public Declare Function SendMessage Lib "user32.dll" Alias "SendMessageW" (ByVal hWnd As IntPtr, ByVal Msg As Integer, ByVal wParam As Integer, ByVal lParam As Integer) As IntPtr
    (Cf Msdn2 pour plus d'info)

    Avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    WM_KEYDOWN = &H100
    WM_KEYUP = &H101
    WM_CHAR = &H102
    Il te faut en prime le handle de la fenêtre principale de l'autre application ça doit pouvoir ce faire via Process.MainWindowHandle.

    Cdt.
    Bon à savoir : la touche F1 ne sert pas à commander des places pour le grand prix de Belgique.

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 98
    Points : 48
    Points
    48
    Par défaut
    Merci pour cette suggestion que je vais essayer.
    Ce qui me bluffe avec le petit programme dont je parlais, c'est qu'il n'a pas de fenêtre destinataire en particulier, d'où mon idée du broadcast... (mais c'est vrai que je n'y connais pas grand chose, donc c'est pas dur de me bluffer).

    Encore merci, j'y retourne !

    Robert

  11. #11
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 1
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par pdgnr
    Merci pour cette suggestion que je vais essayer.
    J'ai exactement dû développé une appli similaire au boulot (prise de contrôle d'un soft par un autre). J'ai pas le code à la maison et faudra attendre que je retourne au boulot, mais de souvenir, n'utilise pas 'SendMessage', c'est la galère.

    Il faut plutôt retrouver l'API qui permet de basculer une fenêtre au premier plan et ensuite envoyer un 'sendKeys' (émulation d'une touche à la fenêtre active et non obligatoirement à ta Winform)

Discussions similaires

  1. Réponses: 7
    Dernier message: 08/07/2009, 18h22
  2. comment taper une touche de clavier
    Par baidimed dans le forum Débuter
    Réponses: 1
    Dernier message: 08/10/2008, 16h46
  3. Comment intercepter une touche clavier avec un projet GUI
    Par guitz2fr dans le forum Débuter
    Réponses: 12
    Dernier message: 24/06/2008, 21h50
  4. émuler une touche du clavier par le port //
    Par zileg dans le forum Audio
    Réponses: 2
    Dernier message: 12/04/2007, 16h59
  5. [CF][C#/PPC] Comment être à l'écouter d'une touche du clavier ?
    Par freddyboy dans le forum Windows Mobile
    Réponses: 6
    Dernier message: 18/05/2005, 17h32

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