/// <summary>
        /// Callback функция для хука -- прослушивание событий мыши. 
        /// </summary> 
        private int MouseCallbackFunctionListener(int code, IntPtr wParam, IntPtr lparam)
        {
            MSLLHOOKSTRUCT mouseInfo = (MSLLHOOKSTRUCT)Marshal.PtrToStructure(lparam, typeof(MSLLHOOKSTRUCT));
            // Инициализируем новый итем
            ActionLogger.UserAction uaMouse = new ActionLogger.UserAction();
            System.Windows.Forms.Message msg = new System.Windows.Forms.Message();
            msg.Msg = wParam.ToInt32();

            if (msg.Msg == WM_LBUTTONDOWN || msg.Msg == WM_LBUTTONUP)
            {
                //Записываем координаты мыши в DWORD
                uint MousePt = unchecked( (uint)((uint)mouseInfo.pt.Y << 16) | (uint)mouseInfo.pt.X);
                System.Drawing.Point pt = new System.Drawing.Point(mouseInfo.pt.X, mouseInfo.pt.Y);

                //Рекурсивно находим самое нижнее из всех дочерних окон, в котором находится наша точка
                IntPtr OldWnd = weFinder.ParentHandle;
                IntPtr OldCWnd = IntPtr.Zero;
                IntPtr hwnd = weFinder.FindWindowAtPos(pt);
                while (hwnd != IntPtr.Zero)
                {
                    OldCWnd = hwnd;
                    weFinder.ParentHandle = hwnd;
                    hwnd = weFinder.FindWindowAtPos(pt);

                }
                weFinder.ParentHandle = OldWnd;
                hwnd = OldCWnd;
                if (hwnd != IntPtr.Zero)
                {
                    //Получаем текст окна
                    int len = SendMessage(hwnd, WM_GETTEXTLENGTH, 0, new StringBuilder()).ToInt32()+1;
                    StringBuilder strWindowText = new StringBuilder(len);
                    SendMessage(hwnd, WM_GETTEXT, len , strWindowText);

                    uaMouse.BriefInfo = strWindowText.ToString() + ":";

                    // Получаем класс окна
                    StringBuilder strWindowClass = new StringBuilder(128);
                    WindowsEnumerator.GetClassName(hwnd,strWindowClass,128);

                    uaMouse.BriefInfo  += strWindowClass.ToString();

                    //Формирует ординарное сообщение Windows для помещения в хранилище
                    IntPtr PtrToPt = new IntPtr(MousePt);
                    msg.LParam = PtrToPt;
                    msg.WParam = new IntPtr(1);

                    uaMouse.KeyCode = (mouseInfo.mouseData >> 16);
                    uaMouse.EventCode = msg;
                    uaMouse.ThreadId = this.ThreadId;
                    //Записываем новый итем в модель.
                    ActionHost.AddItem(uaMouse);
                }

            }
            // Передаем управление следующему хуку, если такой есть в системе.
            return CallNextHookEx(IntPtr.Zero, code, wParam, lparam);
        }
        /// <summary>
        ///  Каллбэк функция для клавиатурных событий. Пока отключена
        /// </summary>
        /// <param name="code">Флаг передачи управления следующему хуку</param>
        /// <param name="wParam"> Содержит доп. информацию о сообщении </param>
        /// <param name="lparam"> Содержит информацию о нажатых клавишах</param>
        /// <returns></returns>
        private int KBCallbackFunction(int code, IntPtr wParam, IntPtr lparam)
        {
            /*MSG msgstruct = (MSG) Marshal.PtrToStructure(wParam, typeof(MSG));
            System.Windows.Forms.Message Message_ = new System.Windows.Forms.Message();
            Message_.HWnd = msgstruct.hwnd;
            Message_.LParam = msgstruct.lParam;*/
            /*Message_.WParam = msgstruct.wParam;*/

            ActionLogger.UserAction uaKbd = new ActionLogger.UserAction();

            KBDLLHOOKSTRUCT kbinfo = (KBDLLHOOKSTRUCT) Marshal.PtrToStructure(lparam,typeof(KBDLLHOOKSTRUCT));
            uaKbd.ThreadId = this.ThreadId;
            System.Windows.Forms.Message msg = new System.Windows.Forms.Message();
            msg.Msg =  wParam.ToInt32();
            msg.HWnd = IntPtr.Zero;
            msg.WParam = wParam;
            msg.LParam = lparam;

            uaKbd.EventCode = msg;
            uaKbd.ControlHandle = IntPtr.Zero;
            uaKbd.KeyCode= (int)kbinfo.vkCode;
            ActionHost.AddItem(uaKbd);

               /* BinaryFormatter bfSerializer = new BinaryFormatter();
            NamedPipeServerStream pipeStream = new NamedPipeServerStream("hookpipe");
            bfSerializer.Serialize(pipeStream,uaKbd);
            pipeStream.Close();*/

               return CallNextHookEx(IntPtr.Zero, code, wParam, lparam);
        }