当新消息到达时,如何使任务栏像Messenger一样使我的应用程序闪烁?

时间:2008-09-16 14:50:05

标签: windows winapi

是否有.NET中的API调用或本机DLL,当我与之聊天的人发出响应时,我可以使用它来创建与Windows Live Messenger类似的行为?

5 个答案:

答案 0 :(得分:23)

FlashWindowEx是要走的路。见here for MSDN documentation

[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool FlashWindowEx(ref FLASHWINFO pwfi);

[StructLayout(LayoutKind.Sequential)]
public struct FLASHWINFO
{
    public UInt32 cbSize;
    public IntPtr hwnd;
    public UInt32 dwFlags;
    public UInt32 uCount;
    public UInt32 dwTimeout;
}

public const UInt32 FLASHW_ALL = 3; 

调用函数:

FLASHWINFO fInfo = new FLASHWINFO();

fInfo.cbSize = Convert.ToUInt32(Marshal.SizeOf(fInfo));
fInfo.hwnd = hWnd;
fInfo.dwFlags = FLASHW_ALL;
fInfo.uCount = UInt32.MaxValue;
fInfo.dwTimeout = 0;

FlashWindowEx(ref fInfo);

这是从Pinvoke.net

无耻地插入的

答案 1 :(得分:4)

HWND hHandle = FindWindow(NULL,"YourApplicationName");
FLASHWINFO pf;
pf.cbSize = sizeof(FLASHWINFO);
pf.hwnd = hHandle;
pf.dwFlags = FLASHW_TIMER|FLASHW_TRAY; // (or FLASHW_ALL to flash and if it is not minimized)
pf.uCount = 8;
pf.dwTimeout = 75;

FlashWindowEx(&pf);

专家 - 交换成员gtokas被盗。

FlashWindowEx

答案 2 :(得分:3)

来自Raymond Chen博客文章:

  

<强> How do I flash my window caption and taskbar button manually?

     

如何刷新窗口标题和   手动任务栏按钮?评论者   Jonathan Scheepers对这些事情感到奇怪   闪现任务栏的程序   按钮无限期地覆盖了   默认闪光计数设置   SysteParametersInfo(SPI_SETFOREGROUNDFLASHCOUNT)。

     

FlashWindowEx函数及其   更简单的前驱FlashWindow让一个   程序闪烁其窗口标题和   手动任务栏按钮。窗户   经理闪烁标题   自动(和资源管理器跟随   闪烁任务栏的标题   按钮)如果程序调用   SetForegroundWindow,当它没有   有权获取前景,   它是自动闪烁的   SPI_SETFOREGROUNDFLASHCOUNT   设置控件。

     

为了便于说明,我会   演示闪烁标题   手动。一般来说这是   不推荐,但既然你问过,   我会告诉你如何。然后答应   你不会这样做。

     

从临时程序开始   做出这个简单的改变:

void
OnSize(HWND hwnd, UINT state, int cx, int cy)
{
  if (state == SIZE_MINIMIZED) {
    FLASHWINFO fwi = { sizeof(fwi), hwnd,
                       FLASHW_TIMERNOFG | FLASHW_ALL };
    FlashWindowEx(&fwi);
  }
}
     

然后编译并运行该程序   最小化它。当你这样做时,它的任务栏   按钮无限闪烁直到你   点击它。该计划回应   通过呼叫最小化   FlashWindowEx函数要求   一切皆有可能(目前是   标题和任务栏按钮)   闪过,直到窗户来到   前景。

     

FLASHWINFO的其他成员   结构让你自定义   进一步闪烁的行为,如   控制闪光频率和   闪烁的次数。如果你   真的想控制,你可以   使用FLASHW_ALL和FLASHW_STOP来转   你的标题和任务栏按钮和   完全按照你想要的方式。 (谁   知道,也许你想发一个   莫尔斯电码中的消息。)

     

2008年5月12日星期一上午7:00发布   由oldnewthing提起下:代码

答案 3 :(得分:2)

FlashWindowEx Win32 API是用于执行此操作的调用。其文档位于: http://msdn.microsoft.com/en-us/library/ms679347(VS.85).aspx

答案 4 :(得分:0)

我相信你正在寻找SetForegroundWindow