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
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
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
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...
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...)
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.
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
Dans ce cas la si l'application est externe, et que tu n'a aucun controle dessus cela me semble impossible...
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
Bonjour.
Ca se fait par l'API Sendmessage :
(Cf Msdn2 pour plus d'info)
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
Avec :
Il te faut en prime le handle de la fenêtre principale de l'autre application ça doit pouvoir ce faire via Process.MainWindowHandle.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 WM_KEYDOWN = &H100 WM_KEYUP = &H101 WM_CHAR = &H102
Cdt.
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
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.Envoyé par pdgnr
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)
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager