如何将鼠标事件传递给我在C#/ Vista中的应用程序?

我在C#中编写了一个非常专业的应用程序,它作为整个桌面上的一个大多数透明窗口浮动。 我希望能够创建鼠标事件并将其传递给我后面的应用程序,并使它们看起来“正常”运行,以响应这些事件。 如果窗口管理器可以响应,也是更可取的。

我不是Windows大师,也不确定如何最好地实现这一目标。

从此页面: http : //bytes.com/forum/thread270002.html

似乎mouse_event会很好,除了因为我的应用程序漂浮在其他所有内容上,我猜我生成的事件永远不会进入下面的其他应用程序。

似乎替代方案是SendMessage,但这需要大量手动操作窗口,并且生成的鼠标事件不是“真实的”。

有关最佳方法的任何想法吗?

听起来你想做一些过滤用户输入的事情。

也许你只需要一个键盘/鼠标钩。

您可能想看看Windows API调用SetWindowsHookEx。

应该有足够的样本如何在C#中做到这一点,我发现的第一件事是这个链接 (也许不是最好的文章,但应该给你的想法)。

在查看System钩子和其他低级解决方案后,我发现了一种更简单的方法。

首先,将窗体的TransparencyKey和BackColor设置为相同。 这对我没有任何视觉差异,因为我的表格已经在视觉上透明,但这将有助于让鼠标事件通过。

其次,以下代码将让鼠标事件“落入”您的表单。

protected override CreateParams CreateParams { get { CreateParams createParams = base.CreateParams; createParams.ExStyle |= 0x00000020; // WS_EX_TRANSPARENT return createParams; } } 

最后,将TopMost设置为true。

您的表单现在可以在视觉上浮动,但会放弃所有其他应用程序的焦点。

如果禁用该控件并返回,则可以将MouseDown事件传递给父级。