20

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

4

5 回答 5

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; 

调用函数:

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无耻地插入的

于 2008-09-16T15:10:14.670 回答
4
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

于 2008-09-16T14:53:41.543 回答
3

来自 Raymond Chen 的博客文章:

如何手动闪烁我的窗口标题和任务栏按钮?

如何手动闪烁我的窗口标题和任务栏按钮?评论者 Jonathan Scheepers 想知道这些程序会无限期地闪烁其任务栏按钮,从而覆盖由 SysteParametersInfo(SPI_SETFOREGROUNDFLASHCOUNT) 设置的默认闪烁计数。

FlashWindowEx 函数及其更简单的前身 FlashWindow 让程序可以手动闪烁其窗口标题和任务栏按钮。如果程序在没有获取前景的权限时调用 SetForegroundWindow,窗口管理器会自动闪烁标题(并且资源管理器通过闪烁任务栏按钮跟随标题),并且 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 完全按照你想要的方式打开和关闭你的标题和任务栏按钮。(谁知道呢,也许你想用摩尔斯电码发送消息。)

由 oldnewthing 于 2008 年 5 月 12 日星期一上午 7:00 发布 归档于:代码

于 2008-09-16T14:59:56.457 回答
2

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

于 2008-09-16T14:53:09.313 回答
0

我相信你正在寻找SetForegroundWindow.

于 2008-09-16T14:53:43.960 回答