internal static extern bool PlaySound([In]string soundName, IntPtr hmod, SafeNativeMethods.PlaySoundFlags soundFlags);
internal static bool GetGUIThreadInfo(int idThread, ref SafeNativeMethods.GUITHREADINFO guiThreadInfo) { guiThreadInfo.cbSize = Marshal.SizeOf(guiThreadInfo); bool result = SafeNativeMethods.GetGUIThreadInfo(0, ref guiThreadInfo); int lastWin32Error = Marshal.GetLastWin32Error(); if (!result) { // If the focused thread is on another [secure] desktop, GetGUIThreadInfo // will fail with ERROR_ACCESS_DENIED - don't throw an exception for that case, // instead treat as a failure. Callers will treat this as though no window has // focus. if (lastWin32Error == 5 /*ERROR_ACCESS_DENIED*/) return false; ThrowWin32ExceptionsIfError(lastWin32Error); } return result; }