按下“Shift”后是否可以获得角色,而无需按下shift?

时间:2010-01-05 22:03:55

标签: .net silverlight encoding character culture

如果按下“Shift”,是否可以获得角色,也就是说,如果我按“1”我得到“1”字符,但如果我按住“Shift”则变为“!” - 当然没有引号。我如何以编程方式执行此类操作?

有一种方法可以添加到ASCII代码中。但是,此选项不适用,因为它不适用于所有语言环境。

是否有一个可以在.NET中运行的选项,可能在Silverlight中,我可以传入一个像“9”这样的字符并获得结果“(”?

在这种情况下,以编程方式按“Shift”将不起作用,也不会因平台限制而使用任何基于SendKeys的解决方案。

这适用于虚拟键盘,例如Silverlight中的屏幕键盘。

5 个答案:

答案 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)

在每个角色的数字后面找到数学并使用它......