我现在拥有的:我在 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 的经验,所以解决方案可能很明显。