2008-08-22 13 views
5

私はマシンを制御するアプリケーションを開発しています。
マシンからエラーが発生した場合、ユーザーはそれに直接気付くことができますが、タスクバーのトレイを点滅させるという方法があります。マシンがエラーをクリアすると、トレイが点滅を停止するはずです。FlashWindowEx FLASHW_STOPはまだタスクバーの色を維持します

FlashWindowEx関数を使用すると少し煩わしさがあります。ウィンドウの点滅をクリアすると、(私の場合winXPでは)オレンジ(点滅しない)のままです。私の場合は
Sample of status


    [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_STOP開始するFLASHW_TRAYを使用しています。

私は何か間違ったことをしていますか、これはWinXPの既知のバグですか?修正がありますか?

答えて

4

動作は、ウィンドウの点滅が完了するまで同じですが、タスクバーのボタンは色付きのままです。私はこれがバグだとは思わない。それについて考えると、FLASHW_STOPを使用すると、点滅は実際に停止しますが、点滅のポイントはユーザーの注意を引くことです。ユーザーがまだ見落とされていない可能性があり、が見つかりましたので、ボタンは色付きのままです。ウィンドウが注目されていました。ボタンの色を維持すると、その情報が利用可能になります。

0

遅い回答に申し訳ありませんが、私は退職しました。

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

FLASHW_ALL | FLASHW_TIMERNOFGの組み合わせを使用して今すぐ修正しました。

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

3

は誤りです:

fInfo.uCount = UInt32.MaxValue;

FLASHW_STOPパラメータを指定して呼び出すときにあなたがゼロにfInfo.uCountを設定する必要があります。 タスクバーボタンがアクティブなときに停止を呼び出そうとすると、アクティブなままになります。

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

を、私はそれが古いポストを知っているが、それは速く、この問題を解決するために、他の人々を助けることができます。

0

点滅を停止するには、uCountを0に設定します。

+0

答えにいくつかの説明を追加してください。 – Sandeep

関連する問題