private void InputObserveThread() { var keyboardHook = new KeyboardHook(); var mouseHook = new MouseHook(); keyboardHook.KeyboardHooked += OnKeyboardHookEvent; mouseHook.MouseButton += OnMouseButtonEvent; IntPtr msgPtr = IntPtr.Zero; while (WinApi.GetMessage(msgPtr, IntPtr.Zero, 0, 0)) { WinApi.TranslateMessage(msgPtr); WinApi.DispatchMessage(msgPtr); } keyboardHook.KeyboardHooked -= OnKeyboardHookEvent; mouseHook.MouseButton -= OnMouseButtonEvent; keyboardHook.Dispose(); mouseHook.RemoveHook(); }
private void InputObserveThread() { _threadId.Value = WinApi.GetCurrentThreadId(); //var keyboardHook = new KeyboardHook(); var mouseHook = new MouseHook(); //keyboardHook.KeyboardHooked += OnKeyboardHookEvent; mouseHook.MouseButton += OnMouseButtonEvent; try { IntPtr msgPtr = IntPtr.Zero; WinApi.PeekMessage(msgPtr, IntPtr.Zero, 0, 0, WinApi.PM_NOREMOVE); while (!_shouldStop.Value) { int res = WinApi.GetMessage(msgPtr, IntPtr.Zero, 0, 0); //NOTE: res == 0, -1は普通起きない if (_shouldStop.Value || res == 0 || res == -1) { break; } LogOutput.Instance.Write("recv input message"); WinApi.TranslateMessage(msgPtr); WinApi.DispatchMessage(msgPtr); } } catch (Exception ex) { LogOutput.Instance.Write(ex); } //keyboardHook.KeyboardHooked -= OnKeyboardHookEvent; mouseHook.MouseButton -= OnMouseButtonEvent; //keyboardHook.Dispose(); mouseHook.RemoveHook(); }