MouseHookThread.cs 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  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.MyThread
  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. m_GlobalHook = Hook.GlobalEvents();
  24. dispatcher.BeginInvoke((Action)(() =>
  25. {
  26. m_GlobalHook.MouseUpExt += M_GlobalHook_MouseUpExt;
  27. }));
  28. }
  29. public static void Dispose()
  30. {
  31. m_GlobalHook.MouseUpExt -= M_GlobalHook_MouseUpExt;
  32. m_GlobalHook.Dispose();
  33. dispatcher.InvokeShutdown();
  34. }
  35. /// <summary>
  36. /// 鼠标中键呼出
  37. /// </summary>
  38. /// <param name="sender"></param>
  39. /// <param name="e"></param>
  40. private static void M_GlobalHook_MouseUpExt(object sender, System.Windows.Forms.MouseEventArgs e)
  41. {
  42. if (appConfig.MouseMiddleShow && e.Button == System.Windows.Forms.MouseButtons.Middle)
  43. {
  44. if (MotionControl.hotkeyFinished)
  45. {
  46. App.Current.Dispatcher.BeginInvoke(System.Windows.Threading.DispatcherPriority.Render, new Action(() =>
  47. {
  48. if (MainWindow.mainWindow.Visibility == Visibility.Collapsed || MainWindow.mainWindow.Opacity == 0)
  49. {
  50. MainWindow.ShowApp();
  51. }
  52. else
  53. {
  54. MainWindow.HideApp();
  55. }
  56. }));
  57. }
  58. }
  59. }
  60. }
  61. }