我正在寻找一种在不使用Form.TransparencyKey
的情况下通过winform传递鼠标事件的方法。
如果没有简单的方法,有没有办法使用Win32 API将鼠标事件发送到给定的窗口句柄?
修改 通过winform我不是指父窗口,我的意思是其他应用程序驻留在我的后面。
答案 0 :(得分:2)
这听起来有点矫枉过正,因为我看到了SLaks的答案。
你需要
Handle
属性SendMessage
Win32API SendMessage
的其中一个参数是WM_LBUTTONDOWN 这是SendMessage
[DllImport("user32")] static extern IntPtr SendMessage(IntPtr hWnd, UInt32 Msg, IntPtr wParam, IntPtr lParam);
这是使用的常量:
public const int WM_LBUTTONDOWN = 0x201; public const int WM_LBUTTONUP = 0x202;
典型调用:
SendMessage(someWindow.Handle, WM_LBUTTONDOWN, IntPtr.Zero, IntPtr.Zero); SendMessage(someWindow.Handle, WM_LBUTTONUP, IntPtr.Zero, IntPtr.Zero);
调用是如何将鼠标左键单击发送到指定窗口的示例。
我使用pinvoke.net来获取正确的API。
希望这有帮助, 最好的祝福, 汤姆。
答案 1 :(得分:1)
答案实际上比我想象的要容易得多。 这个答案让我得到了我需要的地方: Transparent Window (or Draw to screen) No Mouse Capture 如果你想要一些工作代码,还可以找到看起来像c ++实现的东西: Transparent Window (or Draw to screen) No Mouse Capture