9
votes

Comment simuler l'entrée du clavier dans toutes les applications?

J'écris une application (en C #) qui, dans ce cas, il doit simuler et envoyer des traits clés à une autre application. J'utilise http://inputsimulator.codeplex.com/ projet de simulation des clés, et cela fonctionne dans de nombreuses applications, mais dans certains Ce n'est pas - c.-à-d. Combat mortel 4.

J'ai googlé à ce sujet et j'ai trouvé de nombreuses réponses à partir de "Il est impossible" de "vous devez utiliser la bibliothèque xxx", etc. Ceux qui m'ont répondu beaucoup, et même presque convaincu, je ne suis pas capable de le faire à Ce temps, mais ...

M $ Clavier virtuel fonctionne. Cela fonctionne dans toutes les applications. Donc, c'est possible ... Quelqu'un de vous, des gars intelligents, savez comment puis-je y parvenir?


7 commentaires

Quel code avez-vous jusqu'à présent que vous avez essayé ..?


J'utilise le projet que j'ai mentionné ci-dessus. La méthode la plus basse là-bas est [DLLIMPORT ("user32.dll", SetLasterRor = true)] interne statique extern uint32 Sendinput (UINT32 Numberfinuts, entrées INPUTMSG [], INT32 TAILOFINPUCTURE); Et cela fonctionne parfaitement dans de nombreuses applications, mais pas tous. : /


@FENIXVOLTRES: I INVERSION INCONDÉE Le clavier à l'écran Windows et utilise la même méthode d'entrée que cette bibliothèque que vous avez liée à ( SendInput ). J'ai accroché toutes les fonctions liées au clavier qui sont venues à l'esprit ( keybd_event , sendinput , setkeyboardstate , etc.) et la seule fonction qui était appelé était sendinput ). Essayez de vérifier le code de la bibliothèque contre la documentation MSDN.


Wow, respect de cela. :) Ok, donc cela m'assure que c'est possible. Étrange que cela ne fonctionne pas, cependant. Je vais essayer même de trouer à la lecture de la totalité de la documentation à ce sujet. Peut-être que c'est une matière non connectée directement avec le clavier, par exemple en focalisant? Je ne fixe aucun objectif nulle part (mais cela fonctionne dans certaines applications).


Pourriez-vous me dire quel programme avez-vous l'habitude d'ingénierie d'ingénieur à l'écran du clavier à l'écran? Je vais essayer de faire la différence de mon code ... (essayé wiki.sharpdevelop.net/ilspy. Ashx mais cela ne peut pas le faire).


Au début, j'allais désassembler OSK et accrocher toutes les fonctions liées au clavier; J'ai décidé qu'il serait plus facile de surveiller l'exécution du programme avec un moniteur API ( ROHITAB.com/Apimonitor ) depuis Il n'y a qu'une poignée de fonctions capables de produire une contribution de cette manière. Vous devez enregistrer ces fonctions ci-dessus, ainsi que toutes les fonctions relatives aux codes de numérisation (elles doivent être dans la même catégorie).


Merci beaucoup pour des informations sur cet outil, c'est très utile et m'a aidé à résoudre le problème - plus d'informations dans ma réponse ci-dessous.


3 Réponses :


0
votes

Jetez un coup d'œil à SendKeys sur Msdn


3 commentaires

Je lui ai donné un coup, mais la même situation se passe - Sendkeys.send (String) fonctionne, mais pas dans chaque application. Le bloc-notes ou l'explorateur le gère correctement, mais je ne pouvais pas l'obtenir pour travailler dans n'importe quel jeu en plein écran.


La plupart des jeux en ligne plus récents prennent de grandes douleurs à essayer de feuilleter des programmes "Bot", il est donc un peu plus difficile que d'envoyer des coups de frappe au Bloc-notes. Vous pouvez toujours contourner certains de leurs efforts en utilisant les appels d'API Win32.dll à bas niveau, mais vous vous ouvrez à la responsabilité, bien sûr, en fonction de votre lieu de résidence afin de vous laisser les recherches à vous de comprendre.


Eh bien, pourriez-vous épargner un mot ou deux si ces méthodes ne sont pas celles que j'ai utilisées? En fait, ce projet fait partie du travail plus large qui est mon projet final de licence de licence de l'Université des sciences et de la technologie de AGH à Cracovie, en Pologne, je ne veux pas rompre une loi. : P Btw Faire un clavier virtuel (ou une nouvelle méthode d'entrée informatique dans mon cas) est complètement légal, je pense?



6
votes

OK, je pense que je l'ai enfin eu pour travailler. J'ai utilisé le moniteur API recommandé par NEAL P et il a montré des différences minimales entre les appels OSK et les miens. Un peu plus tard, j'ai essayé de rendre mon appel d'appel dormir un peu de temps entre envoyer des messages avec la touche de presse et relâchez-la.


3 commentaires

Pour toute autre personne qui tente d'utiliser un moniteur API, il ne montrera que le premier élément de tableau dans la matrice d'entrée, c'est-à-dire que si vous passez une matrice de 4 éléments à SendItem (par exemple, OSK le fait lorsqu'il se ferme pour simuler la clé LWIN, la clé U, U Keyup, Keyup Lwin). Pour pouvoir voir l'ensemble de la matrice dans la fenêtre Paramètres Modifier le fichier user32.xml dans le répertoire "\ API \ Windows" dans lequel le moniteur API est installé et modifier la ligne à


Comment avez-vous réussi à le faire fonctionner? J'essaie de comprendre le même problème, mais simplement de mettre le fil à dormir pendant un certain temps ne résout pas vraiment rien. INPUTSIMULATOLE.SIMUXYDOWN (VIRTUALKEYCODE.VK_0); System.Threading.thread.sleep (1000); INPUTSIMULATOLE.SIMUX_0);


Toute nouvelle sur le commentaire de @bogdanmolinger?



1
votes

Bien que vous ayez pu atteindre votre objectif, la façon dont vous avez atteint qu'il ne répond pas fondamentalement à votre question: comment simuler l'entrée du clavier dans toutes les applications?

Il y a une bande de situations où le mode utilisateur commun Microsoft API déjà mentionné ne fonctionne pas, comme des applications de jeu utilisant l'API DirectInput ou les jeux protégés.

J'ai construit un bibliothèque qui peut vous aider dans cette situation, il fournit une API C simple qui communique en interne avec Pilotes de filtres de l'appareil. Il est capable d'envoyer des entrées pour les jeux basés sur DirinCut et est également capable de contourner certaines protections de jeu. J'ai vérifié et il est toujours capable de contourner certaines protections de jeu connues en utilisant la version X64 de la bibliothèque. Les protections de jeu n'accrochent généralement que l'API du système X86. Eh bien, enfin maintenant, le 18 février 2012, c'est ce que je vois se dérouler.


2 commentaires

Vous avez raison, DirectInput est ma douleur dans le (_! _). Je devais arrêter de développer mon application pendant un moment, mais je vérifierai certainement votre bibliothèque dans les prochains jours, cela semble être quelque chose que je cherchais.


@Fenixvoltres En outre, comme actuellement, je supporte actuellement une API de la plaine C, un utilisateur a contribué avec un projet C # que P / invoKe celui-ci à GitHub, vous pouvez vérifier ici