WPF界面模糊闪屏花屏,竟是外星人惹的祸

WPF界面模糊闪屏花屏,竟是外星人惹的祸

运行一个WPF应用程序,发现渲染的结果很多错误和异常。

运行环境:

image-20220113114320049

DirectX工作正常

image-20220113114332239

一 问题现象复现

  • 不同的界面元素大小不一,参差不齐地随处摆放
  • 鼠标划过界面各部分时,划过的矩形区域会闪烁,闪成不同的模样
  • 虽然渲染杂乱无章,但功能依旧还在,你能在界面本来应该在的部位点击获得本该有的正常的界面功能

machine

二 解决办法

问题的原因是外星人电脑或者外星人耳机鼠标等外设在使用时,会安装一些相关NahimicOSD.dll动态链接库的软件导致其他WPF程序渲染异常。

NahimicOSD是一个用于在应用程序最终渲染结果上叠加另一个显示层的库,这个库会在应用程序运行时注入进程,并在目标进程调用 DirectX 渲染时将叠加层加入渲染。

OSD 全称为On-Screen Display,即屏幕叠加显示,再看上面的现象,是不是焕然大悟。

2.1 卸载外星人相关系列的软件

  • Alienware Command Center
  • Alienwarre Customer Connect
  • Alienware Digital Delivery
  • Alienware OnScreen Display
  • Alienware Update

image-20220113114347415

我宣布,全部卸载干净了可以解决这个问题,确实是有点坑!

2.2 NahimicOSD.dll

重命名计算机内的NahimicOSD.dll动态链接库的名称xxxxx.dll请检查一下出问题的电脑上是否有 NahimicOSD.dll 这个文件

另外,这个文件可能有 x86 和 x64 两个版本;可能都需要处理,适用于不同架构的进程。

如果这是一台戴尔电脑,那么它最有可能出现在下面这个路径下:

C:\ProgramData\A-Volute\DellInc.AlienwareSoundCenter\Modules\ScheduledModules\NahimicOSD.dll

如果这是其他品牌的电脑,那么他很有可能出现在下面这个路径下(因为插上了外星人耳机或其他外设,自动安装了驱动):

C:\ProgramData\AWHeadset\DellInc.AlienwareSoundCenter\Modules\ScheduledModules\NahimicOSD.dll

当然,也有其他反馈说在别的路径下的:

C:\ProgramData\A-Volute\A-Volute.28054DF1F58B4\Modules\ScheduledModules\NahimicOSD.dll
C:\ProgramData\A-Volute\A-Volute.Nahimic\Modules\Scheduled\NahimicOSD.dll
C:\ProgramData\A-Volute\Modules\ScheduledModules\NahimicOSD.dll

同时也存在非戴尔设备的情况:

C:\Program Files\Nahimic\Nahimic2\UserInterface\Nahimic2OSD.dll

NahimicOSD 是一个用于在应用程序最终渲染结果上叠加另一个显示层的库,这个库会在应用程序运行时注入进程,并在目标进程调用 DirectX 渲染时将叠加层加入渲染。

2.3 软渲染(无奈之举)

如果你的程序足够简单,那么采用软渲染来规避这个问题也未尝不可。方法是在你第一个窗口显示出来之前,调用一下下面这句话:

System.Windows.Media.RenderOptions.ProcessRenderMode = System.Windows.Interop.RenderMode.SoftwareOnly;

如果想避免影响范围太大,还可以判断一下是否存在这个文件:

bool hasInjected = Process.GetCurrentProcess().Modules.OfType<ProcessModule>().Any(x =>
{
    return x.FileName.Equals(@"C:\ProgramData\A-Volute\DellInc.AlienwareSoundCenter\Modules\ScheduledModules\NahimicOSD.dll", StringComparison.OrdinalIgnoreCase)
    || x.FileName.Equals(@"C:\ProgramData\AWHeadset\DellInc.AlienwareSoundCenter\Modules\ScheduledModules\NahimicOSD.dll", StringComparison.OrdinalIgnoreCase);
});
if (hasInjected)
{
    RenderOptions.ProcessRenderMode = RenderMode.SoftwareOnly;
}

2.4 加入黑名单(需要管理员权限)

  • Dell明明知道知道NahimicOSD那些东西会导致问题,还不修改,搞了个黑白名单,想你的程序能用你就自己改dat文件。

  • NahimicOSD 有一个黑名单文件 BlackApps.dat,在列表里的程序将不会注入破坏其渲染。

  • 路径在:

C:\ProgramData\A-Volute\DellInc.AlienwareSoundCenter\Modules\ScheduledModules\Configurator\BlackApps.dat

image-20220113115331727

本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。欢迎转载、使用、重新发布,但务必保留文章署名,不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。

参考链接、作者吕毅

如有任何疑问,请 与我联系 (468189405@qq.com)

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大为慎独

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值