如果按下“Shift”,是否可以获得角色,也就是说,如果我按“1”我得到“1”字符,但如果我按住“Shift”则变为“!” - 当然没有引号。我如何以编程方式执行此类操作?
有一种方法可以添加到ASCII代码中。但是,此选项不适用,因为它不适用于所有语言环境。
是否有一个可以在.NET中运行的选项,可能在Silverlight中,我可以传入一个像“9”这样的字符并获得结果“(”?
在这种情况下,以编程方式按“Shift”将不起作用,也不会因平台限制而使用任何基于SendKeys的解决方案。
这适用于虚拟键盘,例如Silverlight中的屏幕键盘。
答案 0 :(得分:2)
难道你不能花几分钟制作一张你自己的地图表吗?
1->!
2->@
3->#
etc. etc. etc.
答案 1 :(得分:0)
我想回答一个问题:你怎么知道使用什么键盘布局?即,在我的一个系统上,数字2有@ -sign。另一方面,它有“-sign(双引号)。你说9有(-sign,但是我有(-sign在0和 - 的顶部)-sign在减号之上。” / p>
默认情况下,Windows有数百个keyboard mappings(即乌兹别克斯坦西里尔语,美国国际,美国默认,荷兰,德国和德国IBM等)。 AZERTY vs QWERTY等等。
真正的问题可能是:如何以编程方式在Windows中读取键盘映射。我不知道。虽然您可以了解如何与驱动程序文件进行交互,但您可能会更快地使用基于(例如)上面first link中的布局的映射。当您从注册表中读取键盘类型时,它将覆盖大多数情况。
或者,您可以考虑以编程方式设置Shift sticky keys(设置粘滞键,发送Shift键消息,然后就完成了)。
(请注意,ASCII与键盘扫描码无关。虽然它可能适用于某些系统,但它永远不会对所有系统都可靠。)
编辑:考虑尝试微软的keyboard layout creator。按照它的创建过程和一些逆向工程,可以很难找到键盘布局的编写方式。然而,如果您只需要支持一个键盘布局,请在编辑器中取一个键盘布局,反转Shift-action,然后在有人开始输入之前和之后,以编程方式设置新创建的键盘布局(并将其更改回来)。
答案 2 :(得分:0)
你可能需要做一些API卑鄙的事情。
你可以从这里开始: http://msdn.microsoft.com/en-us/library/aa920537.aspx
更好的阅读: http://www.microsoft.com/globaldev/handson/dev/unicode-kbdsonwindows.pdf
答案 3 :(得分:0)
正是出于这个目的,WPF和SilverLight提供TextInput
事件。输入的字符将包含在TextCompositionEventArgs.Text
属性中。该事件已经考虑了用户区域设置和键盘布局:
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);
}
这实际上可能无法解决您的问题,因为您特别询问了转换功能。我不知道WPF / Silverlight中有这样一个函数(有KeyConverter
类,但它的目的是另一个;你可以使用它来将数字键和数字键上的数字键映射到同一个键)。但是,你必须从某个地方获取密钥代码,如果这是键盘,那么这个事件应该是完美的。
在Windows窗体应用程序中(虽然这里似乎不相关),获取实际字符的相应事件将是Control.KeyPress
。
答案 4 :(得分:-1)
在每个角色的数字后面找到数学并使用它......