XNA - Entrée de texte au clavier

Ok, donc, fondamentalement, je veux être en mesure de récupérer clavier texte. Comme la saisie de texte dans un champ de texte ou quelque chose. Je suis seulement en train d'écrire mon jeu pour windows.
J'ai ignoré l'aide de Guide.BeginShowKeyboardInput parce qu'il rompt l'impression d'être autonome en jeu, et le fait que le Guide indique toujours XBOX boutons ne semble pas juste pour moi. Oui, c'est le moyen le plus facile, mais je ne l'aime pas.

Ensuite, j'ai essayé d'utiliser le Système.De Windows.Les formulaires.NativeWindow. J'ai créé une classe qui a hérité d'elle, et elle passa les Jeux de la poignée de la fenêtre, de la mise en œuvre de la fonction WndProc pour attraper WM_CHAR (ou WM_KEYDOWN), bien que la WndProc ai appelé pour les autres messages, WM_CHAR et WM_KEYDOWN n'a jamais fait. J'ai donc dû abandonner cette idée, et d'ailleurs, j'ai également du référencement de l'ensemble des formes de Windows, ce qui signifiait inutile de mémoire de la météorisation.

Ma dernière idée était de créer un Thread niveau de, le faible niveau de hook clavier. Cela a été la plus réussie jusqu'à présent. Je reçois des message WM_KEYDOWN, (pas essayé WM_CHAR encore) de traduire le code de touche virtuel avec Win32 funcation MapVirtualKey à un char. Et je reçois mon texte! (Je suis juste l'impression avec la fonction de Débogage.Écrire sur le moment),

Quelques problèmes cependant. C'est comme si j'ai le verrouillage des majuscules, et un qui ne répond pas touche maj enfoncée. (Bien sûr, il n'est pas cependant, c'est juste qu'il y a un Code de Touche Virtuelle par la clé, ainsi que la traduction n'a qu'une seule sortie) et il ajoute de la surcharge qu'il s'attache à la Windows Crochet de la Liste et n'est pas aussi rapide que je le souhaiterais, mais la lenteur pourraient être plus en raison de Débogage.Écrire.

Quelqu'un d'autre a abordé ce problème et l'a résolu, sans avoir à recourir à un clavier virtuel à l'écran? ou quelqu'un a d'autres idées pour m'essayer?

merci d'avance.

Question posée par Jimmy

Peut-être que je ne suis pas à comprendre la question, mais pourquoi ne pouvez-vous pas utiliser le XNA Clavier et KeyboardState classes?

Mon commentaire:

C'est parce que si vous pouvez lire keystates, vous ne pouvez pas obtenir l'accès en texte tapé comme et la façon dont il est saisi par l'utilisateur.

Alors permettez-moi de préciser davantage. Je tiens à mettre en œuvre étant en mesure de lire le texte de l'entrée de l'utilisateur comme si ils sont à taper dans la zone de texte est windows. Le clavier et la KeyboardState classe d'obtenir des états de toutes les clés, mais j'ai dû la carte chaque clé et combinaison du caractère de la représentation. Cela tombe lorsque l'utilisateur n'utilise pas la même langue du clavier, comme je le fais surtout avec des symboles (mes doubles guillemets est maj + 2, tandis que les claviers américains leur ont quelque part près de la touche retour).


il semble que mon crochet de la fenêtre était la voie à suivre, la raison pour laquelle je n'étais pas WM_CHAR est parce que le XNA message de la pompe ne fait pas de traduire le message.

Ajoutant TranslateMessage à chaque fois que j'ai reçu un WM_KEYDOWN message j'ai eu mon message WM_CHAR, j'ai ensuite utilisé le présent de l'incendie d'un caractère tapé événement dans ma MessageHook classe qui ma KeyboardBuffer classe a souscrit, puis les tampons d'un tampon texte 😀 (ou StringBuilder, mais le résultat est le même)

J'ai donc tout cela fonctionne comme je le veux.

Un grand merci à Jimmy pour un lien vers un très instructif fil.

source d'informationauteur Sekhat