我想实现按键交替:按a输出b,按b输出c,可是下面这个,按a输出c了,怎么解决?
private void HookOnGlobalKeyDown(object sender, HookEx.KeyExEventArgs e)
    {
        
        //更改键盘布局
        switch (e.KeyData)
        {            case Keys.A:
                e.Handled = true;
                SendKeyCommand(btnB);
                break;            case Keys.B:
               // if (combinationVKButtonsMap.ContainsKey(VK_SPACE))
                if ((e.Flags & 0x00000001) == 1)//这句什么意思?
                    e.Handled = true;
                    SendKeyCommand(btnC);
                }
                break;
                    }
        SetButtonStatus(e, true);
    }怎么才能判断是模拟的按键还是实际的按键?
听说模拟的按键和实际的按键的 scanCode 是不同的,可在c#中怎么用scanCode呢?
最后一个问题:如何在上面的case Keys.B中判断SendKeyCommand();的执行次数?

解决方案 »

  1.   

    break;打错位置 改为
    private void HookOnGlobalKeyDown(object sender, HookEx.KeyExEventArgs e) 
        { 
            
            //更改键盘布局 
            switch (e.KeyData) 
            {             case Keys.A: 
                    e.Handled = true; 
                    SendKeyCommand(btnB); 
                    break;             case Keys.B: 
                  if (combinationVKButtonsMap.ContainsKey(VK_SPACE)) //判断是否组合键
                 if ((e.Flags & 0x00000001) == 1)//进行运算 去掉ctrl  假设是ctrl+B 运算之后是 B
                        e.Handled = true; 
                        SendKeyCommand(btnC); 
                     break; 
                    } 
                    
                        } 
            SetButtonStatus(e, true); 
        } 
      

  2.   

    用户按A,输出B
    此时Hook会捕捉到B,然后输出C所以你看到的是A->C