5

マシンを制御するアプリケーションを開発しています。
マシンからエラーを受け取った場合、ユーザーは直接それに気付くことができるはずです.1つの方法は、タスクバーのトレイをフラッシュすることです. マシンがエラーをクリアすると、トレイの点滅が停止します。

FlashWindowEx 関数を使用すると、少し厄介な点が 1 つあります。ウィンドウの点滅をクリアすると、(私の場合は 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 の既知のバグで、修正はありますか?

4

5 に答える 5

4

想定されている限り、ウィンドウの点滅が終了しても動作は同じです。タスクバーのボタンは色付きのままです。これはバグではないと思います。考えてみれば、FLASHW_STOPを使うと、実際には点滅が止まりますが、点滅のポイントはユーザーの注意を引くことです。ユーザーがまだ見下ろしていない可能性があり、どのウィンドウが注意を引こうとしているのかを発見したため、ボタンは色付きのままです。ボタンの色を維持すると、その情報を利用できるようになります。

于 2008-08-22T19:33:47.320 に答える
4

ここにエラーがあります:

fInfo.uCount = UInt32.MaxValue;

FLASHW_STOP パラメータで呼び出す場合は、fInfo.uCount をゼロに設定する必要があります。そうしないと、タスクバー ボタンがアクティブなときに stop を呼び出そうとすると、アクティブなままになります。

ここで未定義の動作に関するメモを確認できます: http://msdn.microsoft.com/en-us/library/windows/desktop/ms679348(v=vs.85).aspx

それが古い投稿であることは知っていますが、他の人がこの問題をすばやく解決するのに役立ちます.

于 2014-03-05T14:37:30.217 に答える
0

返信が遅くなってすみません、私は不在でした。

それが期待される機能である場合、それはそれほど有用ではないと思いますが、少なくともリセットする必要があります。

FLASHW_ALL | FLASHW_TIMERNOFG組み合わせだけで直しました。

ところで、あなたの答えを評価することはできません、まだ十分な担当者ではありません。

于 2008-09-01T08:25:52.727 に答える
0

点滅を停止するには、uCount を 0 に設定するだけです。

于 2016-04-20T09:51:52.807 に答える