public void SwitchWindow() { if (MemoryApi.GetForegroundWindow() == MainWindowHandle) { return; } IntPtr foregroundWindowHandle = MemoryApi.GetForegroundWindow(); uint currentThreadId = MemoryApi.GetCurrentThreadId(); uint temp; uint foregroundThreadId = MemoryApi.GetWindowThreadProcessId(foregroundWindowHandle, out temp); MemoryApi.AttachThreadInput(currentThreadId, foregroundThreadId, true); MemoryApi.SetForegroundWindow(MainWindowHandle); MemoryApi.AttachThreadInput(currentThreadId, foregroundThreadId, false); while (MemoryApi.GetForegroundWindow() != MainWindowHandle) { } }