团结一致,让窗口始终位于顶部

时间:2019-11-19 15:49:33

标签: windows transparent minimize user32 click-through

对于我正在尝试的项目,我有一个Unity独立构建,该构建使用着色器使不可见,该着色器使用user32.dll滤除UI按钮以外的所有内容。然后,我们可以单击并悬停在Windows上的应用程序以及应用程序内部的按钮上。

因此,请想象一下:应用程序变成透明的,您只看到该应用程序中的几个按钮(1个按钮返回到不透明的屏幕快照按钮等),其余的则看到了常规窗口以及上面的所有内容。您的屏幕。您可以在窗口和统一UI上单击。

我遇到的问题是,每当我在Windows(例如另一个程序)中单击某个东西时,统一应用程序会将其最小化。理想情况下,无论用户在其下方单击/执行什么操作,我都希望始终显示Unity按钮。

在Google上进行一些搜索可以给我带来很多结果。当Unity失去焦点时(通过Unity的OnApplicationFocus事件)等等,设置窗口样式(设置为最高)会强制最大化窗口样式。 可悲的是没有任何工作。我主要尝试使用Unity的OnApplicationFocus来检测应用何时失去焦点,以及何时失去焦点,我尝试触发如上所述在Google上发现的众多功能之一。但是似乎没有任何作用。也不只是在更新中将它称为Everyframe。我们确实将窗口设置为最高,但是一旦我单击下面的Spotify,该窗口便无法正常工作。将视图透明/恢复正常时,我们将在以下2个值之间切换。

                SetWindowLong(_hwnd, GWL_STYLE, WS_POPUP | WS_VISIBLE);
                SetWindowLong (_hwnd, GWL_EXSTYLE, WS_EX_LAYERED | WS_EX_TRANSPARENT | WS_EX_TOPMOST);
                SetWindowPos(_hwnd, HWND_TOPMOST, 0, 0, 0, 0, TOPMOST_FLAGS);
                DwmExtendFrameIntoClientArea(_hwnd, ref _margins);

                SetWindowLong(_hwnd, GWL_STYLE, WS_POPUP | WS_VISIBLE);
                SetWindowLong (_hwnd, GWL_EXSTYLE, WS_EX_TRANSPARENT | WS_EX_TOPMOST);
                SetWindowPos(_hwnd, HWND_TOPMOST, 0, 0, 0, 0, TOPMOST_FLAGS);
                DwmExtendFrameIntoClientArea(_hwnd, ref _margins);

非常感谢您的帮助。如果需要提供更多信息,请告诉我。

0 个答案:

没有答案