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