FlashWindowEx FLASHW_STOP은 여전히 ​​작업 표시줄 색상을 유지합니다.

StackOverflow https://stackoverflow.com/questions/21987

  •  09-06-2019
  •  | 
  •  

문제

저는 기계를 제어하는 ​​애플리케이션을 개발 중입니다.
컴퓨터에서 오류가 발생하면 사용자가 이를 직접 확인할 수 있어야 하며, 한 가지 방법은 작업 표시줄의 트레이를 깜박이는 것입니다.기기에서 오류가 해결되면 트레이 깜박임이 중지됩니다.

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_TRAY를 사용하여 깜박임을 시작하고 FLASHW_STOP을 사용하여 깜박임을 중지합니다.

제가 뭔가 잘못하고 있는 건가요? 아니면 이것이 WinXP의 알려진 버그인가요? 이에 대한 수정 사항이 있나요?

도움이 되었습니까?

해결책

창이 깜박임을 마치면 다음과 같은 동작이 동일합니다.작업 표시줄 버튼은 색상으로 유지됩니다.나는 이것이 버그라고 생각하지 않습니다.생각해보면 FLASHW_STOP을 사용하면 깜박임이 실제로 멈추는데, 깜박임의 목적은 사용자의 주의를 끌기 위한 것입니다.사용자가 아직 내려다보고 발견하지 못했기 때문에 버튼이 계속 색상으로 유지됩니다. 어느 창문은 그녀의 관심을 끌려고 노력했습니다.버튼 색상을 유지하면 해당 정보를 계속 사용할 수 있습니다.

다른 팁

다음은 오류입니다.

fInfo.uCount = UInt32.MaxValue;

FLASHW_STOP 매개변수로 호출할 때는 fInfo.uCount를 0으로 설정해야 합니다.그렇지 않으면 작업 표시줄 버튼이 활성화된 상태에서 중지를 호출하려고 하면 해당 버튼이 활성 상태로 유지됩니다.

정의되지 않은 동작에 대한 참고 사항은 여기에서 확인할 수 있습니다.http://msdn.microsoft.com/en-us/library/windows/desktop/ms679348(v=vs.85).aspx

나는 그것이 오래된 게시물이라는 것을 알고 있지만 다른 사람들이 이 문제를 빨리 해결하는 데 도움이 될 수 있습니다.

제가 부재중이어서 답변이 늦어 죄송합니다.

그것이 예상되는 기능이라면 그다지 유용하지 않다고 생각합니다. 적어도 재설정이 있어야 합니다.

지금은 다음을 사용하여 문제를 해결했습니다. FLASHW_ALL | FLASHW_TIMERNOFG 콤비네이션.

그런데 답변이 아직 충분하지 않아 답변을 평가할 수 없습니다.

깜박임을 멈추려면 uCount를 0으로 설정하기만 하면 됩니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top