3

如果按下“Shift”是否可以获得字符,也就是说,如果我按下“1”我会得到“1”字符,但是如果我按住“Shift”它会变成“!” - 当然都没有引号。我如何以编程方式做这样的事情?

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

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

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

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

4

5 回答 5

2

难道你不能花几分钟制作你自己的映射表吗?

1->!
2->@
3->#
etc. etc. etc.
于 2010-01-05T22:16:41.993 回答
0

我想回答这个问题:你怎么知道使用的是什么键盘布局?即,在我的一个系统上,数字 2 带有@符号。另一方面,它有“-符号(双引号)。你说9有(-符号,但我的(-符号在0顶部,)-符号在减号顶部。

Windows 默认带有数百种键盘映射(即乌兹别克西里尔文、美国国际、美国默认、荷兰语、德语和德语 IBM 等)。AZERTY vs QWERTY等等。

真正的问题可能是:如何以编程方式读取 Windows 中的键盘映射。我不知道。虽然如果您了解如何与驱动程序文件交互是可能的,但您可能会更快地使用基于例如我上面第一个链接中的布局的映射。当您从注册表中读取键盘类型时,它将涵盖大多数情况。

或者,您可以考虑以编程方式设置 Shift 的粘滞键(设置粘滞键,发送 Shift 键消息,您就完成了)。

(请注意,ASCII 与键盘扫描代码无关。虽然它可能适用于某些系统,但它永远不会对所有人都可靠地工作。)

编辑:考虑尝试微软的键盘布局创建者。按照它的创建过程和一些逆向工程,不难找出键盘布局是如何编写的。然而,如果您只需要支持一种键盘布局,请在编辑器中使用该键盘布局,反转 Shift 操作,并在有人开始输入之前和之后简单地以编程方式设置新创建的键盘布局(并将其改回)。

于 2010-01-05T22:35:33.167 回答
0

很可能你必须做很多 API 卑躬屈膝。

您可以从这里开始:http: //msdn.microsoft.com/en-us/library/aa920537.aspx

更多好读物: http: //www.microsoft.com/globaldev/handson/dev/unicode-kbdsonwindows.pdf

于 2010-01-05T22:38:56.163 回答
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.

于 2010-01-05T22:39:25.230 回答
-1

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

于 2010-01-06T13:19:36.287 回答