首页 / 知识

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

2023-04-15 23:35:00

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

How to make the taskbar blink my application like Messenger does when a new message arrive?

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


FlashWindowEx是必经之路。 请参阅此处以获取MSDN文档

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[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;

调用函数:

1
2
3
4
5
6
7
8
9
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
2
3
4
5
6
7
8
9
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。


从Raymond Chen博客条目中:

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

How do I flash my window caption and
taskbar button manually? Commenter
Jonathan Scheepers wonders about those
programs that flash their taskbar
button indefinitely, overriding the
default flash count set by
SysteParametersInfo(SPI_SETFOREGROUNDFLASHCOUNT).

The FlashWindowEx function and its
simpler precursor FlashWindow let a
program flash its window caption and
taskbar button manually. The window
manager flashes the caption
automatically (and Explorer follows
the caption by flashing the taskbar
button) if a program calls
SetForegroundWindow when it doesn't
have permission to take foreground,
and it is that automatic flashing that
the SPI_SETFOREGROUNDFLASHCOUNT
setting controls.

For illustration purposes, I'll
demonstrate flashing the caption
manually. This is generally speaking
not recommended, but since you asked,
I'll show you how. And then promise
you won't do it.

Start with the scratch program and
make this simple change:

1
2
3
4
5
6
7
8
9
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);
  }
}

Compile and run this program, then
minimize it. When you do, its taskbar
button flashes indefinitely until you
click on it. The program responds to
being minimzed by calling the
FlashWindowEx function asking for
everything possible (currently the
caption and taskbar button) to be
flashed until the window comes to the
foreground.

Other members of the FLASHWINFO
structure let you customize the
flashing behavior further, such as
controlling the flash frequency and
the number of flashes. and if you
really want to take control, you can
use FLASHW_ALL and FLASHW_STOP to turn
your caption and taskbar button on and
off exactly the way you want it. (Who
knows, maybe you want to send a
message in Morse code.)

Published Monday, May 12, 2008 7:00 AM
by oldnewthing Filed under: Code


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


我相信您正在寻找SetForegroundWindow


应用程序闪烁任务栏调用

最新内容

相关内容

猜你喜欢