解决方案 »

  1.   

    另,不会有Shift+b这种热键,Shift+b应该是B
    有ctrl+a,alt+a,ctrl+shift,alt+shift,ctrl+alt+shif,ctrl+shift+a,alt+shift+a
    这些都是按键后不会真正键入字母的,才能定义成快捷键
    否则执行ctrl+c(复制)的时候,你如果换成shift+c,那么选中的所有文字就都被替换成C了,那怎么可以
      

  2.   

    AutoHotkey就可以实现这样的热键,只是不知道c#如何实现。
      

  3.   

    要是非要实现,就调用键盘API,判断键盘哪些键被按下了,然后去你定义好的数组里匹配看是否有组合内的所有键都被按下,然后就执行特定的函数呗
      

  4.   

    就是不知道调用哪个API啊,API的不熟的说
      

  5.   

    winform中在
    Form1_KeyDown中就可以处理private void Form_KeyDown(object sender,KeyEventArgs e)
    {
       if(e.KeyCode == Keys.F12 && e.Control)  //按下Ctrl + F12
        {
          // do sth
        }     
    }
      

  6.   

    这样窗体必须获得焦点才行,如果焦点切换到别的窗体中,或者窗体最小化了,热键就不响应了
    那是自然,如果要系统级的,那还得winapi
      

  7.   

    搜了一下,只找到RegisterHotKey。这个只能定义Ctrl+a这样常规的热键
      

  8.   

    这种组合热键需要自己处理,发现按键符合组合热键表里的第一个,记住中间状态,再次按下的如果符合第二个就触发。
    像AutoHotkey是采用了hook + 自己的处理实现的,它的代码见 https://github.com/AutoHotkey/AutoHotkey/blob/master/Source/hook.cpp
      

  9.   


    不太明白“记住中间状态”的意思。
    到启发了一个思路:a+b热键;当检测到按了b键时,检测a键是否也同时按下了。如a键也是按下状态即执行代码,不是则忽略。
    这个想法是否可行?
      

  10.   

    貌似没有任何一个软件提供过这样设置快捷键的,况且连注册热键的API都不支持这种形式
      

  11.   

    这东西就别参考API热键如何设置了
    直接按照做对打游戏的思路,对键盘进行轮询,检测同一时间到底有哪几个键被按下.