5

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

我不是 Windows 专家,我不确定如何最好地完成此任务。

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

看起来 mouse_event 会很好,除了因为我的应用程序漂浮在其他所有东西上,我猜我生成的事件永远不会到达下面的其他应用程序。

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

对解决此问题的最佳方法有任何想法吗?

4

3 回答 3

3

在查看了系统挂钩和其他低级解决方案后,我发现了一个更简单的方法。

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

其次,下面的代码会让鼠标事件“落入”你的表单。

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

        return createParams;
    }
}

最后,将 TopMost 设置为 true。

您的表单现在将在视觉上漂浮在所有内容之上,但会放弃对所有其他应用程序的关注。

于 2008-10-06T10:18:12.180 回答
2

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

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

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

还应该有足够的示例如何在 C# 中执行此操作,我发现的第一件事是这个链接(可能不是最好的文章,但应该给你一个想法)。

于 2008-10-06T08:44:31.170 回答
1

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

于 2011-08-17T15:08:45.437 回答