BringWindowToTop, SetForegroundWindow, SwitchToThisWindow, SetWindowPos, ShowWindow all are described as showing and activating a window.
What are the real differences between them? When and why would BringWindowToTop be preferred to SetForegroundWindow, or SwitchToThisWindow or even SetWindowPos with the flags set to activate and show?