上QQ任务栏出现ffdshow audio decoder!怎么取消!
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了上QQ任务栏出现ffdshow audio decoder!怎么取消!相关的知识,希望对你有一定的参考价值。
有哪位高人指点!这个是病毒吗 我知道是解码器 但是为什么我上QQ就有
别人上QQ就没有 难道我的QQ中病毒了吗?求高人指点!
调用“Show()”时任务栏上显示错误的窗口
【中文标题】调用“Show()”时任务栏上显示错误的窗口【英文标题】:Wrong window shows up on taskbar when calling `Show()` 【发布时间】:2013-05-25 23:37:45 【问题描述】:这个问题让我很困惑,我开始相信这是核心 winapi 中的错误,或者可能是 WPF 中的错误。如果这里没有人知道问题的可能原因,我将在 Microsoft Connect 上提交错误报告。
问题在我调用Window.Show()
后就出现了,但根本原因可能在不同的地方,包括之前对user32.dll 的调用。一旦我在我的窗口上调用Show()
,我的窗口就会显示出来,但另一个窗口会在任务栏上弹出但不可见。此外,单击它不会使该窗口可见。
我试图显示的窗口设置了以下属性,这似乎是导致这种奇怪行为所必需的。更改其中任何一个“修复”此问题。
WindowStyle="None"
WindowState="Maximized"
ShowInTaskbar="False"
我正在创建一个虚拟桌面管理器 (VDM),因此我通过 user32.dll 隐藏/显示窗口。如果我在显示我想要的窗口之前没有隐藏任何窗口,问题也不会出现。 VDM 的完整代码is available on github。特定的 user32 调用发生在包装器 which can also be found on github 中。
// Hide windows.
var hideWindows = _windows
.Select( w => new RepositionWindowInfo( w.Info ) Visible = false );
WindowManager.RepositionWindows( hideWindows.ToList() );
RepositionWindows
方法在这里发帖有点长,不过你可以看到in its entirety on github。它使用BeginDeferWindowPos
、DeferWindowPos
和EndDeferWindowPos
。
最后,当我使用Visibility
属性而不是使用Show()
和Hide()
显示/隐藏我的窗口时,所描述的行为在某些情况下也不会发生(稍后会详细介绍)。但是,according to the documentation on msdn:
调用 Show 实现与设置 Visibility 相同的最终结果 Window 对象的属性为 Visible。然而,有一个 从时间上看两者的区别。来电秀是 仅在 Loaded 事件开启后返回的同步操作 子窗口已升起 [...]
这似乎与同步或异步执行的操作非常相关。在某些情况下,我会使用 user32 的ShowWindow
隐藏一个特定的窗口。如果在我显示我的窗口(使用快捷键)之后立即再次出现问题,无论我是使用Visibility
还是Show()
来显示窗口。但是,如果我使用ShowWindowAsync()
隐藏窗口,一切都很好。
最后...(很多如果...我知道,对不起)当我在显示我的窗口之前单击任何窗口(选择它)时,问题也不会发生。如果我不使用快捷键来显示窗口,我永远不会发现这一点。
这个问题的根本原因是什么?
【问题讨论】:
您写道:“这让我感到困惑,我开始相信这是核心 winapi 或 WPF 中的错误” 无需进一步阅读即可评论:您极不可能在核心 WINAPI 中发现真正的错误,其代码路径与窗口可见性一样常见......而且极不可能我的意思是基本上不可能。 @NikBougalis ...这就是我在这里发布它的原因。 ;p 【参考方案1】:我想我已经确定了导致此问题的核心问题。当窗口被隐藏时,另一个窗口被激活。但是,似乎只有任务栏上的窗口处于活动状态。当我隐藏所有窗口并随后调用 GetActiveWindow
时,它表示没有窗口处于活动状态(返回值为 null)。
当随后显示一个不应出现在任务栏上的窗口时(无论是使用Show()
还是Visibility
),隐藏的窗口就会显示在任务栏上。
解决此问题的解决方法是在延迟窗口定位操作后检查是否有任何窗口处于活动状态。如果没有,我现在将重点放在任务栏上。下次显示非任务栏窗口时,bug就不会出现了!
succeeded = User32.EndDeferWindowPos( windowsPositionInfo );
if ( succeeded && User32.GetActiveWindow() == IntPtr.Zero )
WindowInfo startBar = GetWindows()
.Where( w => w.GetClassName() == "Shell_TrayWnd" ).FirstOrDefault();
if ( startBar != null )
User32.SwitchToThisWindow( startBar.Handle, false );
【讨论】:
以上是关于上QQ任务栏出现ffdshow audio decoder!怎么取消!的主要内容,如果未能解决你的问题,请参考以下文章
ffdshow audio decoder是啥东西?怎么我一上Q就会出现,而且很卡?