Beispiel #1
0
        /// <summary>
        /// 获取键盘组合后的结果
        /// </summary>
        /// <returns></returns>
        public IList <HookKeyEventArgs> GetKeyCombineResult()
        {
            var resultList = new List <HookKeyEventArgs>();

            if (KeyHisDataList.Count == 0)
            {
                return(resultList);
            }
            var firstHookFile = KeyHisDataList.First();//第一行记录
            var firstData     = CustomEventLogger.GetHookKeyEventArgses(firstHookFile.FileName);

            //第一行,直接加入集合
            foreach (var hookKeyEventArgse in firstData)
            {
                resultList.Add(hookKeyEventArgse);
            }
            foreach (var hookFile in KeyHisDataList)
            {
                var tmpData = CustomEventLogger.GetHookKeyEventArgses(hookFile.FileName); //当前行历史记录
                if (hookFile != firstHookFile)
                {                                                                         //重新根据diffTime组合
                    var tmp_Previous = tmpData.First();
                    foreach (var hookKeyEventArgs in tmpData)
                    {
                        var copyEvent    = HookKeyEventArgs.Copy(hookKeyEventArgs);                //拷贝新对象,用于新集合
                        var diffTimeSpan = copyEvent.EventTimeStamp - tmp_Previous.EventTimeStamp; //得出每次记录的间隔
                        if (tmp_Previous == tmpData.First())
                        {
                            diffTimeSpan = TimeSpan.FromMilliseconds(hookFile.OpDiffTime);             //新行的首次记录附加到前一个结果后面
                        }
                        copyEvent.EventTimeStamp = resultList.Last().EventTimeStamp.Add(diffTimeSpan); //重新设定新的时间戳
                        //--加入集合--
                        resultList.Add(copyEvent);
                        //-设置值-
                        tmp_Previous = hookKeyEventArgs;
                    }
                }
            }
            return(resultList);
        }
Beispiel #2
0
 /// <summary>
 /// 记录键盘
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="e"></param>
 private void keyboardHook_KeyLog(object sender, HookKeyEventArgs e)
 {
     KeyHisDataList.Add(e);
     CustomEventLogger.LogKeyEvent(e);
 }
Beispiel #3
0
        /// <summary>
        /// キーボードフックのプロシージャ
        /// </summary>
        /// <param name="Code"></param>
        /// <param name="W"></param>
        /// <param name="L"></param>
        /// <returns></returns>
        public int KeyboardHookProc(int Code, IntPtr W, IntPtr L)
        {
            if (Code < 0)
            {
                //Codeが0より小さい場合、次のフックを呼び出す
                return(CallNextHookEx(HookId, Code, W, L));
            }

            //キー入力を取得
            KeyEvents procEvent = (KeyEvents)W;
            var       kbStruct  = Marshal.PtrToStructure <KBDLLHookStruct>(L);

            //入力文字の取得
            var inputCode = (KeyboardUtilConstants.VirtualKeyCode)kbStruct.vkCode;

            HookKeyEventArgs e = new HookKeyEventArgs(procEvent, kbStruct, inputCode);

            if (inputCode == KeyboardUtilConstants.VirtualKeyCode.CapsLock ||
                inputCode == KeyboardUtilConstants.VirtualKeyCode.HiraganaKatakana)
            {
                //CapsLock・ひらがなかたかなは処理しない
            }
            else
            {
                switch (procEvent)
                {
                case KeyEvents.KeyDown:
                    if (inputCode == KeyboardUtilConstants.VirtualKeyCode.Shift ||
                        inputCode == KeyboardUtilConstants.VirtualKeyCode.LeftShift ||
                        inputCode == KeyboardUtilConstants.VirtualKeyCode.RightShift
                        )
                    {
                        //シフトキーダウンイベントを発生
                        KeyHookShiftKeyDown(this, e);
                    }
                    else
                    {
                        //一般キーダウンイベントを発生
                        KeyHookKeyDown(this, e);
                    }
                    break;

                case KeyEvents.SKeyDown:
                    //Altキーダウンイベント発生
                    KeyHookAltKeyDown(this, e);
                    break;

                case KeyEvents.KeyUp:
                    if (inputCode == KeyboardUtilConstants.VirtualKeyCode.Shift ||
                        inputCode == KeyboardUtilConstants.VirtualKeyCode.LeftShift ||
                        inputCode == KeyboardUtilConstants.VirtualKeyCode.RightShift
                        )
                    {
                        //シフトキーダウンイベントを発生
                        KeyHookShiftKeyUp(this, e);
                    }
                    else
                    {
                        //一般キーアップイベントを発生
                        KeyHookKeyUp(this, e);
                    }
                    break;

                case KeyEvents.SKeyUp:
                    KeyHookAltKeyUp(this, e);
                    break;
                }
            }



            //フック処理の終了
            return(CallNextHookEx(HookId, Code, W, L));
        }