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 to activate and show)?