WPF 错误的 KeyDown ASCII 代码

2024-01-30

我需要根据以下内容获取键盘按键的数值ASCII 表 http://www.asciitable.com/由于 WPF 没有内置解决方案,我尝试了几种技巧:

1.这仅给出大写值。

        char res ;
        Char.TryParse(e.Key.ToString(),out res);
        Debug.WriteLine((int)res);

2尽管在很多地方都将其列为可能的解决方案,但它给出了一个完全错误的数字。

        Debug.WriteLine(Convert.ToInt16(e.Key).ToString());
      

那么如何从 WPF 的输入中获取大写和小写字母 ASCII 代码呢?

Update

在这里得到几个答案后,我想强调我的问题。我绝对必须从输入中获取小写和大写的 ASCII 代码。没有硬编码的字符比较或类似的东西。我正在寻找更通用的方法。


查看 KeyEventUtility.GetCharFromKey( e.Key )

更新:抱歉,这是我的一些库代码

    public static class KeyEventUtility
{
    // ReSharper disable InconsistentNaming
    public enum MapType : uint
    {
        MAPVK_VK_TO_VSC = 0x0,
        MAPVK_VSC_TO_VK = 0x1,
        MAPVK_VK_TO_CHAR = 0x2,
        MAPVK_VSC_TO_VK_EX = 0x3,
    }
    // ReSharper restore InconsistentNaming

    [DllImport( "user32.dll" )]
    public static extern int ToUnicode(
        uint wVirtKey,
        uint wScanCode,
        byte[] lpKeyState,
        [Out, MarshalAs( UnmanagedType.LPWStr, SizeParamIndex = 4 )] 
       StringBuilder pwszBuff,
    int cchBuff,
    uint wFlags );

[DllImport( "user32.dll" )]
public static extern bool GetKeyboardState( byte[] lpKeyState );

[DllImport( "user32.dll" )]
public static extern uint MapVirtualKey( uint uCode, MapType uMapType );

public static char GetCharFromKey( Key key )
    {
        char ch = ' ';

        int virtualKey = KeyInterop.VirtualKeyFromKey( key );
        var keyboardState = new byte[256];
        GetKeyboardState( keyboardState );

        uint scanCode = MapVirtualKey( (uint)virtualKey, MapType.MAPVK_VK_TO_VSC );
        var stringBuilder = new StringBuilder( 2 );

        int result = ToUnicode( (uint)virtualKey, scanCode, keyboardState, stringBuilder, stringBuilder.Capacity, 0 );
        switch ( result )
        {
        case -1:
            break;
        case 0:
            break;
        case 1:
            {
                ch = stringBuilder[0];
                break;
            }
        default:
            {
                ch = stringBuilder[0];
                break;
            }
        }
        return ch;
    }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

WPF 错误的 KeyDown ASCII 代码 的相关文章

随机推荐

  • XAML 中的动画按钮背景颜色

    我是 WPF 和 XAML 的新手 所以我有ResourceDictionary 目前一键
  • Android 许可证检查直接进入 applicationError(...)

    我刚刚在我的应用程序中实现了 android 服务器检查 我使用 StrictPolicy 方法是因为我可能对盗版版本的下载量是市场版本的 5 倍感到有点苦恼 无论如何 我基本上将该方法逐字编码到我的源代码中 但是 当我将开发人员控制台上的
  • jtable 到图像的转换未正确发生

    我正在尝试从表格创建缓冲图像 当我将表格添加到应用程序框架并设置大小时 我可以正确查看它 但是当我将其转换为图像时 我只能看到表格的第一行其余的在表格之外并且没有标题 生成表的代码是 table new JTable String tabl
  • FTP 在上传时检查文件是否存在以及是否在 C# 中重命名

    我有一个关于使用 C 上传到 FTP 的问题 我想要做的是 如果文件存在 那么我想在文件名后添加 Copy 或 1 这样它就不会替换该文件 有任何想法吗 var request FtpWebRequest WebRequest Create
  • 单击一次应用程序如何确定其应用程序身份?

    我有一个单击一次的应用程序 它已正确签名 正确配置并自行安装 没有任何问题 它设置为脱机运行 但从特定 URL 安装 如果我下载并运行 setup exe 它会安装更新 所以 它基本上一切正常 除了我无法打印版本号 或从代码中触发更新 如果
  • Runnable 上的 NetworkOnMainThreadException

    我正在制作 Android 4 4 项目 我有NetworkOnMainThreadException 下面是我的过程 Service sticky gt Handler per 5 minutes gt Runnable gt HttpP
  • SWIFT - 是否可以从 AVAudioEngine 或 AudioPlayerNode 保存音频?如果是,怎么办?

    我一直在查看 Swift 文档保存 AVAudioEngine 的音频输出但我找不到任何有用的提示 有什么建议吗 Solution感谢马特的回答 我找到了解决方法 下面是如何在通过 AVAudioEngine 传递音频后保存音频的示例代码
  • SXXP0003:XML 解析器报告错误:序言中不允许内容

    我的 XML 文件是
  • screenX/Y、clientX/Y 和 pageX/Y 之间有什么区别?

    有什么区别screenX Y clientX Y and pageX Y 同样 对于 iPad Safari 计算是否与桌面上类似 或者由于视口而存在一些差异 如果您能给我举一个例子 那就太好了 这是一张解释两者区别的图片pageY and
  • 有没有使用数字作为生成随机字符串的算法?

    我想生成一个任意固定长度的随机字符串 N 我的选择 使用相同的数字作为该算法的提要 它应该生成相同的字符串 通过对数字 如数字 1 进行较小的更改 它应该生成一个完全不同的字符串 很难与前一个种子联系起来 如果多个数字可能产生相同的字符串
  • Keras GRU NN 拟合时出现 KeyError:“不在索引中”

    我目前在尝试将 GRU 模型与训练数据相匹配时遇到问题 快速浏览 StackOverflow 后 我发现这篇文章与我的问题非常相似 使用 Keras io 进行最简单的 Lstm 训练 https stackoverflow com que
  • Facebook 图形 API + Facebook 页面

    使用 Facebook 的 Graph API 给定用户名 xyz 假设他们已经验证了我的网站 我如何获取用户管理的所有 Facebook 页面的列表 The accounts财产在user对象说 当前用户拥有的 Facebook 页面 如
  • WebView 无法在 Android 模拟器中工作

    我创建了一个带有简单 Web 视图的 Android 项目 我正在尝试打开谷歌 但模拟器屏幕显示 Google 不可用 我已在清单文件中添加了互联网权限 即使我也可以从模拟器浏览器访问谷歌 仅在应用程序中 我无法访问 日志中也没有打印任何内
  • 有没有办法从 UIView 捕获 WillRotateToInterfaceOrientation 事件?

    每个 UIViewController 都有一个名为 willRotateToInterface 的方法 是否也可以在 UIView 中执行此操作 这符合模型视图控制器的想法吗 我能想到的唯一方法是将事件从 UIViewController
  • 触发事件时“法师注册表项已存在”

    我目前正在尝试连接 sales order save after 事件 但在触发该事件时不断收到以下错误 Mage registry key singleton Modulename Orderobserver already exists
  • smarty tpl 中的 jquery

    smarty tpl 中的 jquery 尝试使用 jquery 插入类属性 以便我可以使用阴影对每个其他列表项行进行 CSS 样式 下面的代码似乎应该可以工作 但是 alt 类没有插入到 li 标记中 页面加载良好 没有任何问题 有人看到
  • 快速 C 随机布尔生成器

    我对在 C 中生成快速随机布尔值 或等效的 Bernoulli 0 5 随机变量 感兴趣 当然 如果有一个具有良好统计行为的快速随机生成器 那么 对随机 Bernoulli 0 5 进行采样 的问题很容易已解决 样本x统一在 0 1 并返回
  • 使用 Javascript 打印到默认打印机,无需打开 html 中的打印机确认对话框

    在 html 文件中 单击按钮打印特定 div 无需打开打印机确认弹出对话框 会自动打印该内容 这实际上不可能以所有人都支持的方式进行modern浏览器 这是有充分理由的 您不希望随机网站在没有您干预的情况下开始打印内容
  • 我可以使用 JSON 数据在 Django 中添加新对象吗?

    我有一组已知的 JSON 数据 这些数据是从 Excel 文件中提取的 我想将其添加到我的 Django 应用程序中 格式如下 Record 12345 Event Initial task completed TeamID 12345 I
  • WPF 错误的 KeyDown ASCII 代码

    我需要根据以下内容获取键盘按键的数值ASCII 表 http www asciitable com 由于 WPF 没有内置解决方案 我尝试了几种技巧 1 这仅给出大写值 char res Char TryParse e Key ToStri