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

Windows 当新消息到达时,如何使任务栏像Messenger一样闪烁我的应用程序?,windows,winapi,Windows,Winapi,当与我聊天的人发出响应时,.NET或本机DLL中是否有API调用可用于创建与Windows Live Messenger类似的行为?此调用使用FlashWindowEx Win32 API。有关文件载于: 从专家交换会员gtokas那里偷来的 .我相信您正在寻找。来自陈雷蒙的博客: 如何刷新窗口标题和 手动任务栏按钮?评论员 乔纳森·谢佩斯对这些感到好奇 刷新任务栏的程序 按钮,覆盖 默认闪存计数由设置 系统参数信息(SPI_SETFOREGROUNDFLASHCOUNT) FlashWin

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

此调用使用FlashWindowEx Win32 API。有关文件载于:

从专家交换会员gtokas那里偷来的


.

我相信您正在寻找。

来自陈雷蒙的博客:

如何刷新窗口标题和 手动任务栏按钮?评论员 乔纳森·谢佩斯对这些感到好奇 刷新任务栏的程序 按钮,覆盖 默认闪存计数由设置 系统参数信息(SPI_SETFOREGROUNDFLASHCOUNT)

FlashWindowEx函数及其应用 更简单的窗口让 程序刷新其窗口标题和 手动打开任务栏按钮。窗户 经理闪烁标题 自动(和浏览器跟随) 通过闪烁任务栏显示标题 按钮),如果程序调用 SetForeGroundIndow当它没有 有拍摄前景的许可, 这是自动闪烁 SPI_SETFOREGROUNDFLASHCOUNT 设置控件

为了便于说明,我将 演示如何闪烁标题 手动。一般来说, 不推荐,但既然你问了, 我来教你怎么做。然后承诺 你不会这么做的

从scratch程序开始,然后 进行以下简单更改:

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根据:代码提交


FlashWindowEx是一个不错的选择。看

调用函数:

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);

这是无耻地从

插入的,仅在WinXP、Win2KPro和Vista上可用,但在所有Windows操作系统上都可用,但行为会随时间而变化。对于WPF应用程序,请将fInfo.hwnd设置为
new System.Windows.Interop.WindowInteropHelper(This)。句柄
我正在控制台应用程序上使用它。它开始闪烁,但如何让它在从任务栏单击应用程序后停止(即,当窗口有焦点时)?@oscilatingcretin您可以将uCount设置为您希望它闪烁的次数,这不会停止闪烁,但至少最终会停止。您还可以研究使用更简单的FlashWindow,只需将其闪烁一次:@dummy,您知道为cmd.exe执行类似操作的方法吗?我希望在长时间运行的cmd脚本完成后,cmd.exe任务栏按钮闪烁。@oscilatingcretin您可能已经解决了这个问题,但如果其他人有问题,我将在此处添加它。您可以添加:public const UInt32 FLASHW_TIMERNOFG=12;fInfo.dwFlags=FLASHW_ALL | FLASHW_TIMERNOFG;这将使车窗在聚焦时停止闪烁。
[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);