使用GetKeyNameText 可以把虚拟键码或者扫描码转成文字,例如 Ctrl键 可以被转换为“Ctrl",但是我现在需要把他从"Ctrl"重新转回虚拟键码,或者扫描码。
    本来想使用VkKeyScan来实现的,但是发现它的输入参数是Byte型的,也就是说数字键和字母都没问题,但是遇到了Ctrl之类的键的话,输入必须为string型,或者Char[],才能满足,所以VkKeyScan,不可行。
    那么我应该使用哪个API呢?

解决方案 »

  1.   

            是不是必须要建立enum或者一个类来实现字符串值和虚拟键码的转换呢?
      

  2.   

        自己顶下自己,没有解决方案的话,就只好自建一个Map来实现这个转换了,快来个牛人指点下我啊
      

  3.   

    对ASCII字符,Ctrl + ‘A’ = 原ASCII字符(‘A’=0x41)减0x40(=1)。
      

  4.   

        A的虚拟键码是0x41,没错。只要有ASCII码的字符,它们的ASCII码值就是它们的虚拟键码,而且本来就有API可以用来转换。
        函数功能:该函数将一个字符翻译成相应的虚拟键码和对于当前键盘的转换状态。该函数己被VkKeyScanEx函数所替代。仍然可以使用VkKeyscan函数,但是不必再定义键盘布局。    函数原型:SHORT VkKeyScan(TCHARch);    参数:    ch:定义被翻译成虚拟键码的字符。    返回值:若函数调用成功,则返回值的低位字节中包含了虚拟键码,高位字节中包含了上挡状态。
        VkKeyScanEx功能差不多,就是多个参数。    问题在于Ctrl键,Alt键,BackSpace键之类的虚拟键码如何计算?
      

  5.   

        啊, 没找到满意的答案,看样子只能先用笨办法了:
        使用一个xml文档来记录键名和虚拟键码之间的关系,然后在使用的时候,用这个xml来填充一个sortedlist(或者map)然后再从这个map中取得虚拟键码。