Je peux envoyer des frappes de touches d'application Windows avec PostMessage() api.Mais je ne peux pas envoyer de coups de touches à la fenêtre de jeu en utilisant PostMessage. Tout le monde sait quoi que ce soit à propos de l'utilisation des fonctions d'entrée directe pour envoyer des clés à des jeux à partir de C#.Envoyer des frappes de touches aux jeux
Répondre
Une autre façon serait de brancher l'API DirectInput directement - Microsoft Research a fourni une bibliothèque pour faire déjà: http://research.microsoft.com/en-us/projects/detours/
Une fois que vous crochet dans l'API, vous pouvez faire ce que vous voulez. Cependant, il est à noter que dans les versions récentes de Windows, DirectInput pour la souris & entrée de clavier est juste un emballage autour des messages Windows Win32. DirectInput génère un thread en arrière-plan et intercepte simplement les messages de la fenêtre avant de les transmettre à l'application. C'est l'une des raisons pour lesquelles Microsoft ne recommande plus l'utilisation de DirectInput - et cela signifie que les API de messagerie telles que PostMessage devraient fonctionner correctement ().
Wow! Ils ont changé ça? Bon à entendre. Je n'ai jamais vraiment aimé DInput. –
Il existe maintenant un moyen de le faire via l'API DirectInput. La seule façon d'archiver le même effet serait d'écrire votre propre objet COM DirectInput qui enveloppe juste l'objet DirectInput normal. Ensuite, vous pouvez ajouter du code pour simuler des frappes. L'astuce consiste à remplacer le Win32 dinput.dll par votre version. Tous les jeux chargeront ensuite votre DLL au démarrage.
Je crains que vous ne puissiez pas le faire à partir d'un langage géré. Vous devez le faire avec du code natif car il nécessite un peu de piratage de bas niveau.
Vous pouvez utiliser la fonction SendInput non managée pour cela. Il poste l'entrée à un niveau inférieur à DirectInput. Il est très important de connaître les codes clés à envoyer. Ceux-ci peuvent varier entre les jeux. Si les codes de touches Windows Virtual ne fonctionnent pas pour un jeu, vous pouvez essayer d'envoyer des constantes DIKEYBOARD (comme DIKEYBOARD_A etc.) et si cela ne fonctionne toujours pas, essayez. Half Life ou Counter Strike, par exemple, attendent des codes ASCII comme codes clés (cela m'a pris du temps)
Une alternative, au lieu de se connecter à DirectX, consiste à utiliser un pilote de clavier (ce n'est pas SendInput ()) pour simuler les appuis sur les touches et les presses de la souris.
Vous pouvez utiliser Oblita's Interception keyboard driver (pour Windows 2000 - Windows 7) et le C# library Interception (enveloppe le pilote de clavier à utiliser en C#).
Avec elle, vous pouvez faire des choses cool comme:
input.MoveMouseTo(5, 5);
input.MoveMouseBy(25, 25);
input.SendLeftClick();
input.KeyDelay = 1; // See below for explanation; not necessary in non-game apps
input.SendKeys(Keys.Enter); // Presses the ENTER key down and then up (this constitutes a key press)
// Or you can do the same thing above using these two lines of code
input.SendKeys(Keys.Enter, KeyState.Down);
Thread.Sleep(1); // For use in games, be sure to sleep the thread so the game can capture all events. A lagging game cannot process input quickly, and you so you may have to adjust this to as much as 40 millisecond delay. Outside of a game, a delay of even 0 milliseconds can work (instant key presses).
input.SendKeys(Keys.Enter, KeyState.Up);
input.SendText("hello, I am typing!");
/* All these following characters/numbers/symbols work */
input.SendText("abcdefghijklmnopqrstuvwxyz");
input.SendText("1234567890");
input.SendText("[email protected]#$%^&*()");
input.SendText("[]\\;',./");
input.SendText("{}|:\"<>?");
Parce que le mécanisme derrière ces touches est un pilote de clavier, il est à peu près sans restriction.
- 1. Comment utiliser WScript.Shell SendKeys pour envoyer des frappes de touches numériques?
- 2. Attribut d'ajout de lots aux jeux d'attributs
- 3. UIViewController ne répond pas aux touches
- 4. Mapper une combinaison de touches aux flèches
- 5. postfix: Comment envoyer des emails aux utilisateurs
- 6. Puis-je utiliser Python pour intercepter les frappes de touches globales dans KDE?
- 7. Capture des frappes sans mise au point
- 8. Comment envoyer des pressions de touches de l'application qt vers libvlc
- 9. MSHTML IWebBrowser2 - L'enchaînement des événements de page provoque des frappes manqués?
- 10. Envoyer des tableaux aux services REST dans CakePHP
- 11. Définition des touches de raccourci dans Textmate
- 12. Détection des touches pressées
- 13. Django ne pas envoyer des e-mails aux administrateurs
- 14. SAS: chronométrage du fichier autoexec/application des formats aux jeux de données pour affichage
- 15. Affectation de touches d'accès rapide aux boutons des formulaires créés pour Excel vba
- 16. Comment puis-je envoyer des touches fléchées à un processus en utilisant Expect.pm
- 17. Envoi de séquences de touches à contrôler dans .Net
- 18. Génération d'un graphique avec plusieurs jeux de données d'ensembles d'axes X (jeux de plusieurs jeux multiples)
- 19. Codes-clés des touches fléchées
- 20. Jeux de données municipaux?
- 21. SendKeys.Send et désactivation des modificateurs de touches
- 22. MySQL Jeux de caractères
- 23. Développement de jeux iPhone
- 24. iPhone: Suivi/Identification des touches individuelles
- 25. Quelles sont les valeurs numériques des touches F (F [1-12]) et des touches fléchées?
- 26. Animation de touches aux objets - puis-je obtenir un objet de vue tactile?
- 27. Comment envoyer une séquence de touches d'interruption à un processus Java?
- 28. pour envoyer des emails de Google appengine
- 29. Comment charger des exemples de jeux de données dans R?
- 30. Récupérer plusieurs jeux de résultats
N'est-ce pas un doublon de http://stackoverflow.com/questions/407020/about-my-macro-programs? Si non, pourquoi avez-vous créé un nouveau compte? – M4N
non ce n'est pas en double. Je n'ai pas créer un nouveau compte. Le nom de compte est toujours le même. Et je veux envoyer des clés aux jeux. Non aux applications de Windows. –
maybee Il me manque soemthign mais ne sont pas des jeux Window Applications? Est-ce que les jeux n'ont pas de boucle de messages qu'ils pompent l'entrée de l'utilisateur? – JoshBerke