【问题标题】:forward winapi events to another window将 winapi 事件转发到另一个窗口
【发布时间】:2012-07-29 19:47:49
【问题描述】:

我现在拥有的:我在 C# 中的应用程序是半透明的,并且不会捕获 winapi 事件 - 每次点击、拖动等都会被底层窗口捕获,这是一个单独的应用程序(如 webbrower)。我用它来覆盖浏览器显示的信息。这是我的代码:

int exstyle = GetWindowLong(this.Handle, GWL_EXSTYLE);
exstyle |= WS_EX_TRANSPARENT;
SetWindowLong(this.Handle, GWL_EXSTYLE, exstyle);

IntPtr hwndf = this.Handle;
IntPtr hwndParent = GetDesktopWindow();
SetParent(hwndf, hwndParent);

但是现在,我想将所有事件发送到我的应用程序窗口(顶部是半透明的)和网络浏览器(在我的应用程序下)。因此,例如,如果我单击,则单击在两个窗口中都有效,就好像它们在顶部一样。我想这样做的唯一方法是捕获所有事件,然后将它们转发到较低的窗口,但是有什么办法吗? 我使用 winforms 作为窗口库。


我现在所做的并不那么重要,因为我想正常消费事件,然后将它们转发到底层窗口。所以这与我现在使用 WS_EX_TRANSPARENT 所做的完全不同。这样做的目的是同时在两个窗口中拖动内容。如果有更好的方法,我会很高兴听到它。


至少我需要将拖动事件传输到两个窗口,并将所有其他事件传输到底层窗口(不在我的控制之下)。所以,也许将我的窗口作为 WS_EX_TRANSPARENT (使事件传递到底层窗口)并简单地安装全局挂钩来接收拖动事件会更容易?你怎么看?

顺便说一句,我没有使用 Winapi 的经验,所以解决方案可能很明显。

【问题讨论】:

  • 我不明白你怎么没有收到事件......你是在创建一个实际的窗口(你应该)?还是直接在屏幕上绘图(你不应该!)?
  • @tenfour 通过设置WS_EX_TRANSPARENT 样式。
  • @tenfour 是的,我使用 .net winform 创建的窗口,绘图由 winform 处理,所以它是创建窗口。我只设置了一个样式 WS_EX_TRANSPARENT 并将窗口父级设置为桌面,这使得事件传递到底层窗口,如下所示:codeproject.com/Articles/12877/Transparent-Click-Through-Forms 是的,它确实使消息不会进入窗口,只要窗口直接是桌面的子级。
  • @tenfour 如果我删除 WS_EX_TRANSPARENT,顶部的窗口将捕获所有事件。那么我应该如何将它们转发到底层窗口?

标签: c# windows winforms winapi


【解决方案1】:

您可以在底层表单处理完事件后尝试转发事件。类似的东西

 protected override void OnDragOver(DragEventArgs drgevent)
 {
     base.OnDragOver(drgevent);
     MyControl.ForwardDragEvent(drgevent);
 }

在 MyControl 中:

public void ForwardDragEvent(DragEventArgs drgevent)
{
     base.OnDragOver(drgevent);
     //Or call your own method to handle the event
}

我已经使用它来转发滚动事件,但是在我的情况下,只有一个控件处理了该事件..

【讨论】:

    【解决方案2】:

    您可以通过在表单上重载 WndProc 或调用 user32!GetMessage 来捕获发送您自己的表单的 Windows 事件

    您可以通过user32!PostMessage 或user32!SendMessage api (read PostMessage function on msdn) 向其他Windows 窗体发送消息。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-04
      相关资源
      最近更新 更多