Comment simuler l'entrée au clavier dans TOUTES les applications?
Je suis en train d'écrire une application (en C#) qui, comme une partie de cela doit simuler et envoyer quelques coups de clés à une autre application. Je suis en utilisant http://inputsimulator.codeplex.com/ projet pour la simulation des touches, et il fonctionne dans de nombreuses applications, mais dans certains, il n'est pas - c'est à dire un Combat Mortel 4.
J'ai googlé ce sujet, et trouvé beaucoup de réponses allant de "c'est impossible" à "vous devez utiliser XXX bibliothèque", etc. Ceux répondu m'a effrayé beaucoup, et même presque convaincu que je ne suis pas en mesure de le faire à ce moment, MAIS...
M$ Clavier Virtuel fonctionne. Il fonctionne dans TOUTES les applications. Donc, c'EST possible... quelqu'un d'entre vous, des gens intelligents, qui savent comment puis-je y parvenir?
Je suis en utilisant le projet que j'ai mentionné ci-dessus. La méthode la plus basse qu'il y a une DllImport("user32.dll", SetLastError = true)] interne static extern UInt32 SendInput(UInt32 numberOfInputs, InputMsg[] entrées, Int32 sizeOfInputStructure); et il fonctionne parfaitement dans de nombreuses applications, mais pas tous. :/
Je l'ingénierie inverse de la Windows Sur le Clavier à l'Écran et il utilise la même méthode de saisie en tant que bibliothèque est lié à (
SendInput
). J'ai accroché tout le clavier des fonctions connexes qui vient à l'esprit (keybd_event
, SendInput
, SetKeyboardState
, etc.) et la seule fonction qui a été appelé a été SendInput
). Essayez de double-vérification de la bibliothèque de code par rapport à la documentation MSDN.Wow, le respect pour cela. 🙂 OK, donc cela garantit moi, c'est possible. Étrange que ça ne fonctionne pas, cependant. Je vais essayer de voire le triple de lire toute la documentation à ce sujet. Peut-être que c'est de la matière n'est pas relié directement avec le clavier, par exemple en se concentrant? Je n'aime pas mettre n'importe n'importe où (mais cela fonctionne dans certaines applications).
Au début, j'allais démonter OSK et accrocher tout le clavier des fonctions connexes, j'ai décidé qu'il serait plus facile de contrôler l'exécution du programme de l'API Monitor (rohitab.com/apimonitor) car il ya seulement une poignée de fonctions capables de produire de l'entrée de cette manière. Vous devez vous connecter à ces fonctions ci-dessus, ainsi que toutes les fonctions relatives à la numérisation de codes (ils doivent être dans la même catégorie).
OriginalL'auteur Fenix Voltres | 2012-01-06
Vous devez vous connecter pour publier un commentaire.
Ok, je crois que j'ai enfin réussi à le faire fonctionner. J'ai utilisé l'API Monitor recommandé par Neal P et il a démontré des différences minimes entre les OSK appels et de la mienne. Un peu plus tard, j'ai essayé de faire de mon thread appelant sommeil le temps entre l'envoi de messages avec la presse et le relâchement de la touche et qu'il a été.
Comment avez-vous réussi à le faire fonctionner ? Je suis à essayer de comprendre le même problème, mais tout simplement en mettant le fil de dormir pendant un certain temps n'a pas vraiment de résoudre quoi que ce soit.
InputSimulator.SimulateKeyDown(VirtualKeyCode.VK_0);
System.Threading.Thread.Sleep(1000);
InputSimulator.SimulateKeyUp(VirtualKeyCode.VK_0);
toute l'actualité sur le commentaire de @BogdanMolinger?
OriginalL'auteur Fenix Voltres
Bien que vous avez été en mesure d'atteindre votre objectif, la façon de l'atteindre n'est pas, fondamentalement, la réponse à votre question: Comment faire pour simuler l'entrée au clavier dans TOUTES les applications?
Il y a un tas de situations où l'utilisateur de Microsoft en mode API déjà mentionné ne fonctionne pas, comme les applications de jeu qui utilisent le DirectInput API ou protégés de jeux.
J'ai construit une bibliothèque qui peuvent aider dans ce genre de situations, il fournit une simple API en C qu'en interne communique avec les périphériques les pilotes de filtre. Il est capable d'envoyer d'entrée pour DirectInput jeux et est également en mesure de contourner certaines protections. J'ai vérifié et elle est encore capable de contourner certains connu jeu de protections à l'aide de la version x64 de la bibliothèque. Jeu de protections couramment crochet seulement le système x86 à l'api. Eh bien, au dernier jour, 18 février 2012, c'est ce que je vois de passe.
Aussi, comme actuellement, je suis en soutenant une plaine de l'API C seulement, un utilisateur a contribué à un projet C# que P/Invoke est à github, vous pouvez en vérifier l' ici
OriginalL'auteur pepper_chico
Prendre un coup d'oeil à SendKeys sur MSDN
La plupart des nouveaux jeux en ligne prendre beaucoup de peine pour essayer de déjouer les gens écrire "bot" programmes de sorte qu'il est un peu plus difficile que de dire envoyer des séquences de touches pour le bloc-notes. Vous pouvez toujours contourner certains de leurs efforts en utilisant le faible niveau Win32.dll les appels d'api, mais vous vous ouvrez à la responsabilité, bien sûr, selon l'endroit où vous vivez je quitte donc la recherche à vous de le comprendre.
Eh bien, pouvez-vous donner un ou deux mots, si ces méthodes ne sont pas ceux que j'ai utilisé? En fait, ce projet est un cadre de travail plus large qui est mon Baccalauréat final du projet à l'Université AGH des Sciences et de la Technologie à Cracovie, en Pologne, je ne veux pas briser n'importe quelle loi. 😛 BTW faire un clavier virtuel (ou d'une nouvelle méthode d'entrée de l'ordinateur dans mon cas) est tout à fait légal, je pense?
OriginalL'auteur Bueller