我正在C#中编写一个非常专业的应用程序,它作为整个桌面上的一个大多数透明窗口浮动。我希望能够创建鼠标事件并将其传递给我后面的应用程序,并使它们看起来“正常”运行,以响应这些事件。如果窗口管理器可以响应,也会更好。
我不是Windows大师,也不确定如何最好地实现这一点。
从此页面: http://bytes.com/forum/thread270002.html
似乎mouse_event会很好,但是因为我的应用程序浮动在其他所有内容上,所以我猜测我生成的事件永远不会进入下面的其他应用程序。
似乎替代方案是SendMessage,但这需要大量手动操作窗口,并且生成的鼠标事件不是“真实的”。
有关最佳方法的任何想法吗?
答案 0 :(得分:2)
听起来你想做一些过滤用户输入的事情。
也许你只需要一个键盘/鼠标钩。
您可能想看看Windows API调用SetWindowsHookEx。
应该有足够的样本如何在C#中做到这一点,我发现的第一件事是this link(也许不是最好的文章,但应该给你这个想法)。
答案 1 :(得分:2)
在查看系统挂钩和其他低级解决方案后,我发现了一种更简单的方法。
首先,将表单的TransparencyKey和BackColor设置为相同。这对我没有任何视觉差异,因为我的表格已经在视觉上透明,但这将有助于让鼠标事件通过。
其次,以下代码将使鼠标事件“落入”您的表单。
protected override CreateParams CreateParams
{
get
{
CreateParams createParams = base.CreateParams;
createParams.ExStyle |= 0x00000020; // WS_EX_TRANSPARENT
return createParams;
}
}
最后,将TopMost设置为true。
现在,您的表单将在视觉上漂浮在所有内容之上,但会将焦点放在所有其他应用上。
答案 2 :(得分:1)
如果禁用控件并返回,则可以将MouseDown事件传递给父级。