KWD il y a 3 mois
Parent
commit
2646480c4e
1 fichiers modifiés avec 45 ajouts et 1 suppressions
  1. 45 1
      TeamAAS-VM/ViewModels/MainWindowViewModel.cs

+ 45 - 1
TeamAAS-VM/ViewModels/MainWindowViewModel.cs

@@ -462,6 +462,7 @@ namespace TeamAAS_VP.ViewModels
             if (!_isTrackingUserInput)
             {
                 InputManager.Current.PostProcessInput += OnUserInput;
+                ComponentDispatcher.ThreadFilterMessage += OnThreadFilterMessage;
                 _isTrackingUserInput = true;
             }
 
@@ -487,10 +488,16 @@ namespace TeamAAS_VP.ViewModels
             if (_isTrackingUserInput)
             {
                 InputManager.Current.PostProcessInput -= OnUserInput;
+                ComponentDispatcher.ThreadFilterMessage -= OnThreadFilterMessage;
                 _isTrackingUserInput = false;
             }
         }
 
+        private void RecordPermissionActivity()
+        {
+            _lastPermissionActivityTime = DateTime.Now;
+        }
+
         /// <summary>
         /// 记录用户输入时间。
         /// 键盘、鼠标、滚轮、触摸和手写笔输入都会刷新空闲计时。
@@ -507,7 +514,44 @@ namespace TeamAAS_VP.ViewModels
                 input is TouchEventArgs ||
                 input is StylusEventArgs)
             {
-                _lastPermissionActivityTime = DateTime.Now;
+                RecordPermissionActivity();
+            }
+        }
+
+        private void OnThreadFilterMessage(ref MSG msg, ref bool handled)
+        {
+            if (IsUserInputMessage(msg.message))
+            {
+                RecordPermissionActivity();
+            }
+        }
+
+        private static bool IsUserInputMessage(int message)
+        {
+            switch (message)
+            {
+                case 0x0100: // WM_KEYDOWN
+                case 0x0101: // WM_KEYUP
+                case 0x0104: // WM_SYSKEYDOWN
+                case 0x0105: // WM_SYSKEYUP
+                case 0x0200: // WM_MOUSEMOVE
+                case 0x0201: // WM_LBUTTONDOWN
+                case 0x0202: // WM_LBUTTONUP
+                case 0x0203: // WM_LBUTTONDBLCLK
+                case 0x0204: // WM_RBUTTONDOWN
+                case 0x0205: // WM_RBUTTONUP
+                case 0x0206: // WM_RBUTTONDBLCLK
+                case 0x0207: // WM_MBUTTONDOWN
+                case 0x0208: // WM_MBUTTONUP
+                case 0x0209: // WM_MBUTTONDBLCLK
+                case 0x020A: // WM_MOUSEWHEEL
+                case 0x020B: // WM_XBUTTONDOWN
+                case 0x020C: // WM_XBUTTONUP
+                case 0x020D: // WM_XBUTTONDBLCLK
+                case 0x020E: // WM_MOUSEHWHEEL
+                    return true;
+                default:
+                    return false;
             }
         }