代码之家  ›  专栏  ›  技术社区  ›  tronda Bahribayli

如何让任务栏像Messenger在收到新消息时一样闪烁我的应用程序?

  •  20
  • tronda Bahribayli  · 技术社区  · 17 年前

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

    5 回复  |  直到 16 年前
        1
  •  23
  •   dummy    17 年前

    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

        2
  •  4
  •   Tim Cooper    14 年前
    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 .

        3
  •  3
  •   Ian Boyd    17 年前

    来自Raymond Chen的博客文章:

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

    如何闪烁窗口标题和 手动任务栏按钮?评论家 乔纳森·谢佩斯对这些感到好奇 闪烁任务栏的程序 按钮无限期覆盖 默认闪光次数由设置 系统参数信息(SPI_SETFOREGROUNDFLASHOUNT)。

    FlashWindowEx函数及其 更简单的前体FlashWindow让 程序闪烁其窗口标题和 手动任务栏按钮。窗口 经理闪烁标题 自动(Explorer紧随其后 通过闪烁任务栏来显示标题 按钮),如果程序调用 当SetForegroundWindow不存在时 有权占据前台, 正是这种自动闪烁 SPI_SETFOREGROUNDFLASHOUNT 设置控件。

    为了便于说明,我将 演示闪烁字幕 手动。一般来说,这是 不推荐,但既然你问过, 我来教你怎么做。然后答应 你不会这么做的。

    从划痕程序开始 进行以下简单更改:

    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提起下:代码

        4
  •  2
  •   Abe Heidebrecht    17 年前

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

        5
  •  0
  •   Tim Cooper    14 年前

    我相信你在找 SetForegroundWindow .