MouseHookThread.cs 2.0 KB

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