2010-05-16 44 views
2

几乎在所有的即时通讯窗口最小化为任务栏的通讯工具中,当您有新消息时,IM任务栏项目会更改颜色或变得更亮。我一直在寻找任何帮助,如何使用.NET Winforms或WPF执行此操作如何突出显示任务栏项目

任何代码示例?

============================================== =======================

编辑:我用我的WPF窗口的FlashWindow。

编号:http://www.aeoth.net/blog/2007/04/27/flashing-the-window-in-wpf-c-2/

回答

7

你要使用FlashWindowEx功能。基本上,获取窗口的句柄,用句柄创建一个FLASHWINFO结构,以及如何让窗口闪烁(不断地,直到它被打开等),并将其传递到FlashWindowEx中。

编辑:这是关于如何在C#中执行的example

+0

在C#中的另一个例子在这里:http://jarloo.com/code/wpf/flashing-a-wpf-window/ – manuc66 2011-08-11 11:28:01

+0

上面的链接现在已经过时了,新的链接= http://www.jarloo.com/flashing-a-wpf-window/ – RenniePet 2011-10-11 02:40:09

0

我仍然困惑如何使它突出显示任务栏项目,而不是闪光。这里是最终为我工作的代码(我觉得将设置计数设置为1非常愚蠢,希望这会节省别人的时间)。

Public Structure FLASHWINFO 
    Public cbSize As UInt32 
    Public hwnd As IntPtr 
    Public dwFlags As UInt32 
    Public uCount As UInt32 
    Public dwTimeout As UInt32 
End Structure 

Private Declare Function FlashWindowEx Lib "user32.dll" (ByRef pfwi As FLASHWINFO) As Boolean 

Private Const FLASHW_STOP As UInt32 = 0 
Private Const FLASHW_CAPTION As UInt32 = 1 
Private Const FLASHW_TRAY As UInt32 = 2 
Private Const FLASHW_ALL As UInt32 = 3 
Private Const FLASHW_TIMER As UInt32 = 4 
Private Const FLASHW_TIMERNOFG As UInt32 = 12 

Public Shared Sub Flash(ByRef thisForm As Form) 
    Dim flash As New FLASHWINFO With { 
    .cbSize = System.Runtime.InteropServices.Marshal.SizeOf(flash), 
    .hwnd = thisForm.Handle, 
    .dwFlags = FLASHW_TRAY Or FLASHW_TIMERNOFG, 
    .uCount = 1} 
    'Leaving out .dwCount seems to work just fine for me, the uCount above keeps it from flashing 

    FlashWindowEx(flash) 
End Sub 
+0

这不起作用。将uCount设置为1只闪烁一次。仍然搜索只是使任务栏按钮橙色,我不希望任何闪烁或闪烁。 – Edwin 2017-03-04 10:00:25

+0

@Edwin我想知道它是否具体操作系统?我想我当时可能使用Windows 7(或者甚至是Windows XP)。 – 2017-03-04 15:59:40

+1

我发现dwTimeout是闪光之间的时间,而不是闪光的速度。将其设置为1(毫秒),将uCount设置为UInt32.Max现在可以执行此任务,任务栏按钮为橙色并保持橙色。也许它与操作系统有关。 – Edwin 2017-03-04 16:16:34