如何将虚拟键码转换为字符码?

Posted

技术标签:

【中文标题】如何将虚拟键码转换为字符码?【英文标题】:How to convert virtual key code to character code? 【发布时间】:2010-02-22 06:09:56 【问题描述】:

onkeydown() 处理程序中,我将219 作为“[”的键码;但是,“[”的实际字符值是91。有没有办法映射这两个?

【问题讨论】:

【参考方案1】:

如果您使用的是 Windows,则应查看 ToUnicodeEx 函数。

【讨论】:

【参考方案2】:

第 1 步:打开 VC++ 6.0 第 2 步:文件 --> 新建 --> 项目 --> Win32 应用程序 提供您的项目名称 第 3 步:文件 --> 新建 --> 文件 --> C++ 源文件 提供您的文件名 第 4 步:在您的 CPP 文件中

/* Mfc program to handle virtual key codes. */
#include<afxwin.h>
class myframe : public CFrameWnd

public: 
    myframe()
    
        Create(0,"Menu Program");
    
    void OnKeyDown(UINT n)
    
        switch(n)
        
        case VK_LEFT:
            MessageBox("Left Arrow","Hellow");
            break;
        case VK_RIGHT:
            MessageBox("Right Arrow","Hellow");
            break;
        case VK_UP:
            MessageBox("Up Arrow","Hellow");
            break;
        case VK_DOWN:
            MessageBox("Down Arrow","Hellow");
            break;
        case VK_NUMPAD0:
            MessageBox("Number ZERO","Hellow");
            break;
        case VK_NUMPAD9:
            MessageBox("Number NINE","Hellow");
            break;
        case VK_SPACE:
            MessageBox("Space Bar","Hellow");
            break;
        case VK_BACK:
            MessageBox("BACK KEY","Hellow");
            break;
        case VK_SHIFT:
            MessageBox("SHIFT KEY","Hellow");
            break;
        
           
    DECLARE_MESSAGE_MAP()
;
BEGIN_MESSAGE_MAP(myframe,CFrameWnd)
ON_WM_KEYDOWN()
END_MESSAGE_MAP()
class myapp : public CWinApp

public:
    int InitInstance()
    
        m_pMainWnd=new myframe();
        m_pMainWnd->ShowWindow(3);      
        return 1;
    
;
myapp app;

步骤 5:项目 --> 设置 --> 选择 MFC 作为共享 DLL 第 6 步:构建 --> 编译 第 7 步:构建 --> 构建 第 8 步:构建 --> 执行

【讨论】:

【参考方案3】:

MapVirtualKey() 也很有用。

【讨论】:

【参考方案4】:

您可以尝试使用 Windows.h 库中内置的 MapVirtualKey(UINT uCode,UINT uMapType) 函数。

一个例子是:

// Converts 0x1B (escape key) to the unshifted character value 27
MapVirtualKey( 0x1B, MAPVK_VK_TO_CHAR); 

if (GetAsyncKeyState(VK_SHIFT) & (1 << 16)) 
    std::cout << MapVirtualKey(VK_SHIFT,MAPVK_VK_TO_CHAR);

您可以在MapVirtualKeyA function (winuser.h)阅读更多内容

【讨论】:

以上是关于如何将虚拟键码转换为字符码?的主要内容,如果未能解决你的问题,请参考以下文章

将虚拟键码转换为 unicode 字符串

无法从虚拟键码转换为 unicode

键盘扫描码 ASCII码的区别?

keydown 事件的键码

在哪里可以找到 Mac 虚拟键码列表?

SDL 物理键码和 SDL 虚拟键码有啥区别?