private static extern bool GetWindowInfo(IntPtr hwnd, ref WINDOWINFO pwi);
public static GameInfo[] GetRunningGames() { List<GameInfo> list = new List<GameInfo>(); foreach (Process process in Process.GetProcesses()) { IntPtr mainWindowHandle = process.MainWindowHandle; if (!mainWindowHandle.Equals(IntPtr.Zero) && (IsWindowVisible(mainWindowHandle) && !IsIconic(mainWindowHandle))) { WINDOWINFO structure = new WINDOWINFO(); structure.cbSize = (uint) Marshal.SizeOf(structure); GetWindowInfo(mainWindowHandle, ref structure); GPG.Multiplayer.Client.RECT rcClient = structure.rcClient; if (((rcClient.Right - rcClient.Left) >= GetSystemMetrics(SystemMetrics.SM_CXSCREEN)) && ((rcClient.Bottom - rcClient.Top) >= GetSystemMetrics(SystemMetrics.SM_CYSCREEN))) { GameInfo item = new GameInfo(process); GPG.Logging.EventLog.WriteLine("Game {0} is running.", new object[] { item }); list.Add(item); } } } return list.ToArray(); }