当响应来自与我聊天的人时,我是否可以使用 .NET 中的 API 调用或本机 DLL 创建与 Windows Live Messenger 类似的行为?
5 回答
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);
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 那里偷来的。
来自 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 发布 归档于:代码
FlashWindowEx Win32 API 是用于执行此操作的调用。它的文档位于:http: //msdn.microsoft.com/en-us/library/ms679347 (VS.85).aspx
我相信你正在寻找SetForegroundWindow
.