我正在开发一个控制机器的应用程序。
当我从机器收到错误时,用户应该能够直接注意到它,一种方法是在任务栏上闪烁托盘。 当机器清除错误时,托盘应停止闪烁。

使用FlashWindowEx函数有一点烦恼,当我清除窗口的闪烁时,它(在我的情况下是winXP)保持橙色(不闪烁)。
状态样本


    [Flags]
        public enum FlashMode {
            /// 
            /// Stop flashing. The system restores the window to its original state.
            /// 
            FLASHW_STOP = 0,
            /// 
            /// Flash the window caption.
            /// 
            FLASHW_CAPTION = 1,
            /// 
            /// Flash the taskbar button.
            /// 
            FLASHW_TRAY = 2,
            /// 
            /// Flash both the window caption and taskbar button.
            /// This is equivalent to setting the FLASHW_CAPTION | FLASHW_TRAY flags.
            /// 
            FLASHW_ALL = 3,
            /// 
            /// Flash continuously, until the FLASHW_STOP flag is set.
            /// 
            FLASHW_TIMER = 4,
            /// 
            /// Flash continuously until the window comes to the foreground.
            /// 
            FLASHW_TIMERNOFG = 12
        }

        public static bool FlashWindowEx(IntPtr hWnd, FlashMode fm) {
            FLASHWINFO fInfo = new FLASHWINFO();

            fInfo.cbSize = Convert.ToUInt32(Marshal.SizeOf(fInfo));
            fInfo.hwnd = hWnd;
            fInfo.dwFlags = (UInt32)fm;
            fInfo.uCount = UInt32.MaxValue;
            fInfo.dwTimeout = 0;

            return FlashWindowEx(ref fInfo);
        }

        [StructLayout(LayoutKind.Sequential)]
        public struct FLASHWINFO {
            public UInt32 cbSize;
            public IntPtr hwnd;
            public UInt32 dwFlags;
            public UInt32 uCount;
            public UInt32 dwTimeout;
        }

在我的情况下,我使用FLASHW_TRAY开始闪烁,使用FLASHW_STOP来停止闪烁。

我做错了什么或者这是WinXP的已知错误并且有解决方法吗?

===============>>#1 票数:4 已采纳

当窗口完成闪烁时,行为是相同的,只要它应该是:任务栏按钮保持颜色。 我不认为这是一个错误。 如果您考虑一下,当您使用FLASHW_STOP时,闪烁确实会停止,但闪烁的目的是引起用户的注意。 该按钮保持着色,因为用户仍然可能没有向下看并发现哪个窗口试图引起她的注意。 保持按钮颜色可以保持信息的可用性。

===============>>#2 票数:3

这是一个错误:

fInfo.uCount = UInt32.MaxValue;

使用FLASHW_STOP参数调用时,应将fInfo.uCount设置为零。 否则,当您尝试在任务栏按钮处于活动状态时调用停止时,它将保持活动状态。

您可以在此处查看有关未定义行为的说明: http//msdn.microsoft.com/en-us/library/windows/desktop/ms679348(v = vs.85).aspx

我知道这是一个老帖子,但它可以帮助其他人快速解决这个问题。

===============>>#3 票数:0

只需将uCount设置为0即可停止闪烁。

===============>>#4 票数:0

对于迟到的回复感到抱歉,我不在办公室。

如果这是预期的功能,我认为它不是那么有用,至少应该有一个重置。

我现在只使用FLASHW_ALL | FLASHW_TIMERNOFG修复它 FLASHW_ALL | FLASHW_TIMERNOFG组合。

顺便说一句,不能评价你的答案,还不够。

  ask by Stormenet translate from so

未解决问题?本站智能推荐:

3回复

在任务栏中获取所有窗口

香港专业教育学院已经搜索了几个小时,但找不到任何方法来获取任务栏中的所有窗口。 我需要最小化/最大化所有窗口,但是使用enumthreadwindows时,所有系统进程线程窗口都被最大化/还原,并且由于1000个试图最大化/恢复窗口的原因,我的电脑崩溃了。 有人可以帮忙吗?
2回复

如何使用视觉样式绘制任务栏按钮?

我已经创建了DeskBand工具栏,并希望在工具栏上显示具有视觉风格的按钮作为任务栏按钮。 在.NET中,您可以使用VisualStyleRenderer渲染任务栏背景,但是可以渲染按钮。 是否可以使用Win32 API使用视觉样式来绘制按钮,而不是通过绘制路径或图像来模拟按钮的外观
5回复

停止进程从C#显示一个窗口

我正在尝试自动化在启动时创建GUI窗口但没有用户交互的应用程序,但我无法弄清楚如何隐藏实际窗口。 我尝试过使用ProcessStartInfo: 但窗口仍然显示出来。 我也试过旋转等待窗口存在,然后隐藏它: 遗憾的是,这使得窗口闪烁大约1/16秒左右,如果可能的话,我
1回复

SendMessage到Windows资源管理器地址栏

如何在C#中将SendMessage发送到Windows资源管理器地址栏?
2回复

隐藏其他应用程序的任务栏按钮

我希望能够从任务栏隐藏另一个应用程序的窗口,而不隐藏窗口本身。 具体来说,我想在Alt + Tab列表中运行几种可见的不同Web浏览器,但它们不占用任务栏上的空间。 (如果有人好奇,为什么:我编写了一个仪表板应用程序,该应用程序使用Vista的DwmRegisterThumbnail A
3回复

C#从任务栏隐藏应用程序

我一直在努力从应用程序中隐藏任务栏中的另一个应用程序。 我一直在使用SetWindowLong函数来设置/删除扩展样式上的WS_EX_APPWINDOW。 我已尝试单独设置和删除属性以及获取当前WindowLong,并删除/添加到该属性,如下所示: 并尝试删除它: 在没
2回复

如何在Win7中创建自定义任务栏缩略图?

如何在C#中使用DwmSetIconicThumbnail设置应用程序任务栏缩略图?
1回复

执行一组Windows API调用以读取任务栏图标工具提示时的内存泄漏

我正在使用以下代码示例来扫描任务栏中的任务栏图标,然后提取其工具提示并将其作为字符串列表返回。 特别是,我正在使用此代码来监视正在其工具提示文本中显示其状态(将文本文件转换为MP3)的程序。 然后,我从下面的代码调用ScanToolbarButtons()函数以检索更新的转换进度百分比
1回复

C#上的SetFilePointer突然停止工作

背景: 在我的项目中,我需要按扇区扫描我的硬盘。 我正在使用Kernel32.dll的Pinvoke。 HDD的大小为160GB(将近312,000,000 LBA)。 循环扫描每个迭代8000个扇区。 问题: 不知何故,在成功扫描40000个扇区后,循环堆积而没有移动,我什
3回复

通过引用传递到非托管C DLL函数后,struct保持不变

我正在用C#为不受管理的C DLL编写包装。 在DLL中,我有以下方法可返回指针struct(帖子末尾附近的结构代码): 我正在使用的外部方法是: ZBarcode_Encode_and_Buffer渲染图像并将位图保存在我的结构中称为bitmap的变量中。 ZBarcode