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

tro*_*nda 20 windows winapi

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

dum*_*mmy 23

FlashWindowEx是要走的路.有关MSDN文档,请参见此处

[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; 
Run Code Online (Sandbox Code Playgroud)

调用函数:

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);
Run Code Online (Sandbox Code Playgroud)

这是从Pinvoke.net无耻地插入的

  • 对于WPF应用程序,将fInfo.hwnd设置为`new System.Windows.Interop.WindowInteropHelper(this).Handle` (5认同)
  • @oscilatingcretin你可能已经想通了这一点,但我会在这里反正添加它,如果任何人有这个问题.您可以添加:公共常量UInt32的FLASHW_TIMERNOFG = 12; fInfo.dwFlags = FLASHW_ALL | FLASHW_TIMERNOFG; 这将使窗口停止闪烁时,聚焦窗口. (2认同)

nat*_*iel 5

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);
Run Code Online (Sandbox Code Playgroud)

被专家交流成员gtokas窃取。

FlashWindowEx