UWΡ Shadows 的 WinApi

逆向工程 登录
2021-06-14 04:24:21

我想问一下在 UWΡ 上的弹出窗口下使用哪些 WinApi 方法绘制阴影。 在此处输入图片说明

我知道的:

  1. 这个阴影在隐藏弹出窗口时消失(通过 SW_HIDE),但如果我们使用 SetWindowLong&GWL_EXSTYLE 和 SetLayeredWindowattributes 隐藏它,然后将 LWA_ALPHA 设置为 0,它就会消失。
  2. 除此之外,如果您完全了解 UWP 的工作原理,那么主窗体不是在主可执行文件的进程中创建的,而是在 ApplicationFrameHost.exe 中创建的。Flyouts(它们的窗口)是在主可执行文件中创建的,而不是在 ApplicationFrameHost.exe 中创建的。
  3. 可以关闭“在 Windows 中显示透明度”设置(设置 -> 轻松访问 -> 显示)。而且我知道这可以使用注册表项来执行,但它的系统范围设置,我不能确定任何其他应用程序而不是 UWΡ 不会忽略这个注册表项,只是绘制这个阴影 :(

ps 如何检查弹出窗口是否在窗口未聚焦时被隐藏?可以将 WS_EXSTYLE 和 WS_EX_NOACTIVATE 设置为主窗体(ApplicationFrameHost.exe -> ApplicationFrameWindow -> Windows.UI.CoreWindow)。然后,如果您会导致此弹出窗口出现,然后单击窗口外的某处,弹出窗口将不会关闭,因此您可以使用 WinSpy++ 或其他工具对其进行检查。

我试过的:

我在 UWΡ 上创建了一个测试表单,其中有两个具有所有相同属性的弹出窗口,唯一的区别是第一个有阴影,第二个没有。在此之后,我使用 NOACTIVATE 执行该技巧以检查两个弹出窗口的属性。我看不出有什么区别。不像类标志或窗口标志,它们都是一样的。

说到倒车,我试着用

  1. WinAPIOverride64
  2. API Monitor v2 (Alpha) 64 位
  3. 注入 DLL,它覆盖了 WinApi 中的一些选定函数(我知道 UWΡ 中的注入技术,注入确实有效,但我找不到确切的方法,它正在绘制此阴影)

至于文档,我只能看到可以使用 XAML 属性添加这种阴影,但这并没有说明使用了哪些 WinApi 方法。

我到底想做什么?我想在运行时通过 DLL 注入从任何窗口中删除此阴影。但是,由于我找不到正在使用的 API 方法,因此我无法覆盖它。

我已经在这个谜题上花了大约一个月的时间,但我无法解决它。也许有人可以帮助我 :)
谢谢!

0个回答
没有发现任何回复~