通过Windows窗体发送用户输入

时间:2010-01-22 00:24:31

标签: c# windows winforms forms mouseevent

我正在寻找一种在不使用Form.TransparencyKey的情况下通过winform传递鼠标事件的方法。 如果没有简单的方法,有没有办法使用Win32 API将鼠标事件发送到给定的窗口句柄?

修改 通过winform我不是指父窗口,我的意思是其他应用程序驻留在我的后面。

2 个答案:

答案 0 :(得分:2)

这听起来有点矫枉过正,因为我看到了SLaks的答案。

你需要

  1. 使用Handle属性
  2. 的窗口句柄
  3. SendMessage Win32API
  4. 上使用pinvoke
  5. SendMessage的其中一个参数是WM_LBUTTONDOWN
  6. 这是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