MouseHookThread.cs 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. using GeekDesk.Control.UserControls.Config;
  2. using GeekDesk.ViewModel;
  3. using Gma.System.MouseKeyHook;
  4. using System;
  5. using System.Collections.Generic;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Threading;
  9. using System.Threading.Tasks;
  10. using System.Windows;
  11. using System.Windows.Threading;
  12. namespace GeekDesk.Thread
  13. {
  14. public class MouseHookThread
  15. {
  16. private static AppConfig appConfig = MainWindow.appData.AppConfig;
  17. private static IKeyboardMouseEvents m_GlobalHook = Hook.GlobalEvents();
  18. private static Dispatcher dispatcher;
  19. public static void MiddleHook()
  20. {
  21. //使用dispatcher来单独监听UI线程 防止程序卡顿
  22. dispatcher = DispatcherBuild.Build();
  23. dispatcher.Invoke((Action)(() =>
  24. {
  25. m_GlobalHook.MouseDownExt += M_GlobalHook_MouseDownExt;
  26. }));
  27. }
  28. public static void Dispose()
  29. {
  30. m_GlobalHook.MouseDownExt -= M_GlobalHook_MouseDownExt;
  31. m_GlobalHook.Dispose();
  32. dispatcher.InvokeShutdown();
  33. }
  34. /// <summary>
  35. /// 鼠标中键呼出
  36. /// </summary>
  37. /// <param name="sender"></param>
  38. /// <param name="e"></param>
  39. private static void M_GlobalHook_MouseDownExt(object sender, System.Windows.Forms.MouseEventArgs e)
  40. {
  41. if (appConfig.MouseMiddleShow && e.Button == System.Windows.Forms.MouseButtons.Middle)
  42. {
  43. if (MotionControl.hotkeyFinished)
  44. {
  45. MainWindow.mainWindow.Dispatcher.Invoke((Action)(() =>
  46. {
  47. if (MainWindow.mainWindow.Visibility == Visibility.Collapsed || MainWindow.mainWindow.Opacity == 0)
  48. {
  49. MainWindow.ShowApp();
  50. }
  51. else
  52. {
  53. MainWindow.HideApp();
  54. }
  55. }));
  56. }
  57. }
  58. }
  59. }
  60. }