本帖最后由 cqbigun 于 2011-02-27 02:30:10 编辑

解决方案 »

  1.   

    sendkeys
    SendKeys.Send("+a");
    SHIFT +  
    CTRL ^  
    ALT %   [DllImport("USER32 ", SetLastError = true)]
        static extern short GetKeyState(int nVirtKey);
        [DllImport("user32")]
        public static extern bool RegisterHotKey(IntPtr hWnd, int id, uint control, Keys vk);//注册热键
        [DllImport("user32")]
        public static extern bool UnregisterHotKey(IntPtr hWnd, int id);//解除热键   
        public const int WM_HOTKEY = 0x312;
        protected override void OnLoad(EventArgs e)
        {
            base.OnLoad(e);
            RegisterHotKey(this.Handle, 1, 4 | 2, Keys.A);
        }    protected override void WndProc(ref Message m)
        {
            if (m.Msg == WM_HOTKEY)
            {
                MessageBox.Show("ctrl+shift+a");
            }
            base.WndProc(ref m);
        }
      

  2.   

    谢谢楼上两位。难道user32.dll提供的热键注册api只能是辅助键加普通键的组合方式?
      

  3.   

    推荐使用Gma.UserActivityMonitor来处理键盘消息。封装的不错。HookManager.KeyUp -= HookManager_KeyUp;
            }        void HookManager_KeyDown(object sender, KeyEventArgs e)
            {
                ProcessMultiKey(e.KeyCode, true);
            }
            
            void HookManager_KeyUp(object sender, KeyEventArgs e)
            {
                ProcessMultiKey(e.KeyCode, false);
            }        private void ProcessMultiKey(Keys MultiKey, bool DownOrUp)
            {
                if (MultiKey == Keys.C)
                    isCDown = DownOrUp;
                else if (MultiKey == Keys.W)
                    isWDown = DownOrUp;
                else if (MultiKey == Keys.LControlKey || MultiKey == Keys.RControlKey)
                    isCtrlDown = DownOrUp;            if (isCDown && isCtrlDown)
                    CopyToClipBoard();
                else if (isWDown && isCtrlDown)
                    SwitchDisplayMode();
            }部分代码示例
      

  4.   


    谢谢推荐
    我去google一下,找到一篇tw的mvp的blog
    参考如下:http://www.dotblogs.com.tw/nobel12/archive/2010/03/26/14230.aspx
      

  5.   

    另外还有codeproject上的这一篇
    http://www.codeproject.com/KB/cs/globalhook.aspx?msg=3110732
    Processing Global Mouse and Keyboard Hooks in C#
      

  6.   

    Utilities这个类库,你google下这个类库。