private static void Start() { if (started) { return; } mouseWatcher = eventHookFactory.GetMouseWatcher(); mouseWatcher.Start(); mouseWatcher.OnMouseInput += (s, e) => { if (SendInterval > 0) { if (DateTime.Now < _nextSendTime) { return; } _nextSendTime = DateTime.Now + TimeSpan.FromMilliseconds(SendInterval); } //cef收到鼠标事件后会自动active,看有办法规避不 //点击等事件只在桌面触发,否则可能导致窗口胡乱激活 if (!WallpaperHelper.IsDesktop() && e.Message != MouseMessages.WM_MOUSEMOVE) { return; } //MouseMessages[] supportMessage = new MouseMessages[] { MouseMessages.WM_MOUSEMOVE, MouseMessages.WM_LBUTTONDOWN, MouseMessages.WM_LBUTTONUP }; //MouseMessages[] supportMessage = new MouseMessages[] { MouseMessages.WM_MOUSEMOVE }; //if (!supportMessage.Contains(e.Message)) // return; int x = e.Point.x; int y = e.Point.y; var currentDisplay = Screen.FromPoint(new System.Drawing.Point(x, y)); if (x < 0) { x = SystemInformation.VirtualScreen.Width + x - Screen.PrimaryScreen.Bounds.Width; } else { x -= Math.Abs(currentDisplay.Bounds.X); } if (y < 0) { y = SystemInformation.VirtualScreen.Height + y - Screen.PrimaryScreen.Bounds.Height; } else { y -= Math.Abs(currentDisplay.Bounds.Y); } // 根据官网文档中定义,lParam低16位存储鼠标的x坐标,高16位存储y坐标 int lParam = y; lParam <<= 16; lParam |= x; // 发送消息给目标窗口 IntPtr wParam = (IntPtr)0x0020; foreach (var window in _targetWindows) { if (window.Screen != currentDisplay.DeviceName) { continue; } User32Wrapper.PostMessageW(window.Handle, (uint)e.Message, wParam, (IntPtr)lParam); } //System.Diagnostics.Debug.WriteLine("Mouse event {0} --000-- {1},{2}", e.Message.ToString(), e.Point.x, e.Point.y); //System.Diagnostics.Debug.WriteLine("Mouse event {0} {1},{2}", e.Message.ToString(), x, y); }; started = true; }