Пример #1
0
        /// <summary>
        /// 마우스 프로시저 처리하기
        /// </summary>
        /// <param name="code">코드</param>
        /// <param name="wordParameter">WORD 매개 변수</param>
        /// <param name="longParameter">LONG 매개 변수</param>
        /// <returns>처리 결과</returns>
        private static IntPtr MouseProc(int code, IntPtr wordParameter, IntPtr longParameter)
        {
            if (code >= 0)
            {
                _mouseHookStructure = (MOUSEHOOKSTRUCT)Marshal.PtrToStructure
                                      (
                    longParameter,
                    typeof(MOUSEHOOKSTRUCT)
                                      );

                MouseMessage mouseMessage = (MouseMessage)wordParameter;

                if (UseGlobal)
                {
                    if (mouseMessage == MouseMessage.WM_LBUTTONDOWN || mouseMessage == MouseMessage.WM_LBUTTONUP)
                    {
                        MouseClick?.Invoke(_mouseHookStructure.Location, mouseMessage);

                        if (mouseMessage == MouseMessage.WM_LBUTTONDOWN && IsHookingArea())
                        {
                            return((IntPtr)1);
                        }
                    }
                }
            }

            return(WIN32Helper.CallNextHookEx(_mouseHookHandle, code, wordParameter, longParameter));
        }
Пример #2
0
        /// <summary>
        /// 키보드 프로시저 처리하기
        /// </summary>
        /// <param name="code">코드</param>
        /// <param name="wordParameter">WORD 매개 변수</param>
        /// <param name="longParameter">LONG 매개 변수</param>
        /// <returns>처리 결과</returns>
        private static IntPtr KeyboardProc(int code, IntPtr wordParameter, IntPtr longParameter)
        {
            if (code == WIN32Helper.HC_ACTION)
            {
                uint wordParameterValue = (uint)wordParameter;
                long longParamererValue = (long)longParameter;

                if (wordParameterValue == 256)
                {
                    KEYBOARDHOOKSTRUCT keyboardHookStructure = (KEYBOARDHOOKSTRUCT)Marshal.PtrToStructure
                                                               (
                        longParameter,
                        typeof(KEYBOARDHOOKSTRUCT)
                                                               );

                    KeyClick?.Invoke(keyboardHookStructure.VirtualKeyCode);
                }

                if ((wordParameterValue == 229 && longParamererValue == -2147483647) || (wordParameterValue == 229 && longParamererValue == -2147483648))
                {
                    if (IsHookingArea())
                    {
                        return((IntPtr)1);
                    }
                }
            }

            return(WIN32Helper.CallNextHookEx(_keyboardHookHandle, code, wordParameter, longParameter));
        }
Пример #3
0
        //////////////////////////////////////////////////////////////////////////////////////////////////// Method
        ////////////////////////////////////////////////////////////////////////////////////////// Static
        //////////////////////////////////////////////////////////////////////////////// Public

        #region 시작하기 - Start()

        /// <summary>
        /// 시작하기
        /// </summary>
        public static void Start()
        {
            if (!IsRun)
            {
                uint threadID = WIN32Helper.GetCurrentThreadId();

                using (Process process = Process.GetCurrentProcess())
                {
                    using (ProcessModule processModule = process.MainModule)
                    {
                        _handle = process.MainWindowHandle;

                        _moduleHandle = WIN32Helper.GetModuleHandle(processModule.ModuleName);

                        _keyboardHookHandle = WIN32Helper.SetWindowsHookEx
                                              (
                            (int)HookType.WH_KEYBOARD_LL,
                            _keyboardProc,
                            _moduleHandle,
                            0
                                              );

                        _mouseHookHandle = WIN32Helper.SetWindowsHookEx
                                           (
                            (int)HookType.WH_MOUSE_LL,
                            _mouseProc,
                            _moduleHandle,
                            0
                                           );

                        IsRun = true;
                    }
                }
            }
        }
Пример #4
0
        /// <summary>
        /// 중단하기
        /// </summary>
        public static void Stop()
        {
            if (IsRun)
            {
                WIN32Helper.UnhookWindowsHookEx(_keyboardHookHandle);
                WIN32Helper.UnhookWindowsHookEx(_mouseHookHandle);

                IsRun = false;
            }
        }