コード例 #1
0
        int RememberKeyboard(int code, IntPtr wParam, IntPtr lParam)
        {
            if (code >= 0)
            {
                HookRelated.KeyboardHookStruct keyboardHookStruct =
                    (HookRelated.KeyboardHookStruct)Marshal.PtrToStructure(lParam, typeof(HookRelated.KeyboardHookStruct));
                Keys key = (Keys)keyboardHookStruct.vkCode;
                Structure.Keyboard keyboardData = new Structure.Keyboard();
                byte[]             ch           = new byte[256];
                int a = Marshal.ReadInt32(lParam);
                Marshal.Copy(lParam, ch, 0, 255);
                switch ((int)wParam)
                {
                case (int)HookRelated.KeyboardConduct.WM_SYSKEYDOWN:
                    //只有Alt在此
                    if (key == Keys.LMenu || key == Keys.RMenu)
                    {
                        m_IsDownAlt = true;
                    }
                    keyboardData = new Structure.Keyboard(key, m_IsDownCtrl, m_IsDownAlt, m_IsDownShift, m_IsDownCapsLock);
                    break;

                case (int)HookRelated.KeyboardConduct.WM_SYSKEYUP:
                    //Alt+?按下,当?释放触发
                    break;

                case (int)HookRelated.KeyboardConduct.WM_KEYDOWN:
                    if (key == Keys.LControlKey || key == Keys.RControlKey)
                    {
                        m_IsDownCtrl = true;
                    }
                    m_IsDownCapsLock = HookRelated.GetKeyState((int)HookRelated.KeyboardASCII.CapeLock) == 1 ? true : false;
                    m_IsDownShift    = HookRelated.GetKeyState((int)HookRelated.KeyboardASCII.Shift) == 1 ? true : false;
                    byte[] keyState = new byte[256];
                    int    n        = HookRelated.GetKeyboardState(keyState);
                    byte[] inBuffer = new byte[2];
                    if (HookRelated.ToAscii(keyboardHookStruct.vkCode, keyboardHookStruct.scanCode, keyState, inBuffer, keyboardHookStruct.flags) == 1)
                    {
                        //KeyPressEventArgs e = new KeyPressEventArgs((char)inBuffer[0]);
                        keyboardData = new Structure.Keyboard(key, m_IsDownCtrl, m_IsDownAlt, m_IsDownShift, m_IsDownCapsLock);
                    }
                    //else
                    //{
                    //    if(m_IsDownCapsLock)
                    //        keyboardData = new Structure.Keyboard(Keys.CapsLock, m_IsDownCtrl, m_IsDownAlt, m_IsDownShift, m_IsDownCapsLock);
                    //    else if(m_IsDownCtrl)
                    //        keyboardData = new Structure.Keyboard(Keys.Control, m_IsDownCtrl, m_IsDownAlt, m_IsDownShift, m_IsDownCapsLock);
                    //    else if (m_IsDownShift)
                    //        keyboardData = new Structure.Keyboard(Keys.Shift, m_IsDownCtrl, m_IsDownAlt, m_IsDownShift, m_IsDownCapsLock);
                    //}
                    break;

                case (int)HookRelated.KeyboardConduct.WM_KEYUP:
                    if (key == Keys.LControlKey || key == Keys.RControlKey)
                    {
                        m_IsDownCtrl = false;
                    }
                    if (key == Keys.LMenu || key == Keys.RMenu)
                    {
                        m_IsDownAlt = false;
                    }
                    break;
                }
                KeyboardIputEvent(keyboardData);
            }
            return(HookRelated.CallNextHookEx(m_Code, code, wParam, lParam));
        }