Est-il possible d'obtenir le caractère après « Shift » a été pressé, sans appuyer sur changement?

StackOverflow https://stackoverflow.com/questions/2009444

Question

Est-il possible d'obtenir le caractère si « Shift » a été pressée, qui est, si j'appuie sur « 1 » Je reçois le caractère « 1 », mais si je tiens la touche « Shift » devient « ! » - tous sans les guillemets bien sûr. Comment dois-je faire quelque chose comme ça programatically?

Il y avait une méthode où vous pouvez simplement ajouter au code ASCII. Toutefois, cette option ne convient pas car il ne fonctionnera pas dans tous les paramètres régionaux.

Y at-il une option qui fonctionnera dans .NET, et peut-être dans Silverlight, où je peux passer dans un caractère comme « 9 » et obtenir le résultat « ( »?

en appuyant sur Programmatically « Shift » ne fonctionnera pas dans ce cas, ni aucune ne SendKeys solution en raison des limites de la plate-forme.

Ce serait pour un clavier virtuel, comme le clavier à l'écran dans Silverlight.

Était-ce utile?

La solution

Ne pourriez-vous passer à seulement quelques minutes à faire une table de correspondance de votre propre?

1->!
2->@
3->#
etc. etc. etc.

Autres conseils

Les chances sont que vous aurez à faire un peu d'API rampant.

Vous pouvez commencer ici: http://msdn.microsoft.com/en-us/library/aa920537. aspx

Plus bonne lecture: http://www.microsoft.com/globaldev/handson/dev/ unicode-kbdsonwindows.pdf

Je voudrais revenir à la question: comment savez-vous ce que la mise en page clavier est utilisé? À savoir, sur un de mes systèmes, le numéro 2 a le symbole @. Sur une autre, il a la « --sign (guillemet). Vous dites que le 9 a la (--sign, mais le mien a la (--sign au-dessus du 0 et) -SIGN au-dessus du signe moins.

Windows est par défaut avec des centaines de href="http://en.wikipedia.org/wiki/Keyboard_layout" fichiers de correspondance (par exemple, ouzbek cyrillique, US International , Etats-Unis par défaut, néerlandais, allemand IBM et l'allemand, etc.). vs AZERTY QWERTY et ainsi de suite.

La vraie question pourrait être: comment lire un mappage du clavier dans les fenêtres d'un programme. Je ne sais pas. Bien qu'il sera possible si vous trouvez comment vous pouvez interagir avec les fichiers du pilote, vous serez probablement plus rapide de l'aide d'une cartographie basée sur, par exemple, les mises en page dans mon premier lien ci-dessus. Lorsque vous lisez le type de clavier à partir du registre, il va couvrir la majorité des cas.

Vous pouvez également envisager de mettre en programmation touches rémanentes pour Maj (définir les touches rémanentes, expédiez le message touche Maj enfoncée et vous avez terminé).

(notez que ASCII n'a rien à voir avec les codes de balayage du clavier. Bien qu'il pourrait avoir travaillé pour certains systèmes, il aurait jamais travaillé de manière fiable pour tous.)

EDIT: pensez à essayer créateur de Microsoft. À la suite de son processus de création et un peu d'ingénierie inverse, il ne peut être difficile de savoir comment les dispositions de clavier sont écrits. Cependant, si vous avez besoin est un soutien pour une mise en page du clavier, prendre que l'un dans l'éditeur, inverser l'action Maj et simplement définir par programme la disposition du clavier nouvellement créé (et changer de retour) avant et après que quelqu'un commence à taper.

Pour exactement cette fin, WPF et SilverLight offrent le TextInput événement. Le caractère saisi sera contenu dans le TextCompositionEventArgs.Text propriété. L'événement considère déjà paramètres régionaux utilisateur et la disposition du clavier:

private void Window_TextInput(object sender, TextCompositionEventArgs e)
{
    // e.Text contains the character that corresponds to the
    // key combination that was pressed
    Trace.WriteLine("TEXT: " + e.Text);
}

Cette réalité pourrait ne pas résoudre votre problème, puisque vous spécifiquement interrogé sur une fonction de conversion. Je ne suis pas au courant d'une telle fonction dans WPF / Silverlight (Il y a la classe KeyConverter, mais son but est différent, vous pouvez l'utiliser pour mapper les touches numériques et les touches numériques du pavé numérique à la même touche). Cependant, vous devez être obtenir les codes clés de quelque part, et si c'est le clavier de cet événement devrait parfaitement faire.

Dans Windows Forms applications (qui ne semble pas pertinent ici si) l'événement correspondant pour obtenir le caractère réel serait Control.KeyPress.

trouver les maths derrière les numéros de chaque personnage et de travailler avec elle ...

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top