This is the code form the menu system that starts the XNA game.
var process = Process.Start(info);
var currentProcess = Process.GetCurrentProcess();
while (!process.HasExited)
{
Thread.Sleep(50);
if (GetForegroundWindow() == currentProcess.MainWindowHandle)
{
Activate(process.MainWindowHandle);
}
}
This is the code that sets the XNA game as the foreground window.
/// <summary>
/// Sets the window to be foreground
/// </summary>
[DllImport("User32")]
private static extern int SetForegroundWindow(IntPtr hwnd);
/// <summary>
/// Activate or minimize a window
/// </summary>
[DllImportAttribute("User32.DLL")]
private static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);
private const int SW_SHOW = 5;
private const int SW_MINIMIZE = 6;
private const int SW_RESTORE = 9;
/// <summary>
/// The GetForegroundWindow function returns a handle to the foreground window.
/// </summary>
[DllImport("user32.dll")]
private static extern IntPtr GetForegroundWindow();
private static void Activate(IntPtr windowHandle)
{
ShowWindow(windowHandle, SW_RESTORE);
SetForegroundWindow(windowHandle);
}
//设置幕大小,其中ChatForm为聊天WinForm窗体。
ChatForm form = new ChatForm();
int screenWidth = GraphicsAdapter.DefaultAdapter.CurrentDisplayMode.Width;// System.Windows.Forms.SystemInformation.WorkingArea.Width;
int screenHeight = System.Windows.Forms.SystemInformation.WorkingArea.Height;
form.Size = new System.Drawing.Size((int)(screenWidth * 0.2f * 1000) / 1000, (int)(screenHeight));
form.FormLocation = new System.Drawing.Point((int)(screenWidth * 0.8f * 1000) / 1000, 0);
form.Show();
IntPtr ip = Window.Handle;
System.Windows.Forms.Form gameForm = System.Windows.Forms.Control.FromHandle(ip) as System.Windows.Forms.Form;
if (gameForm != null)
{
gameForm.Location = new System.Drawing.Point(0, 0);
gameForm.Size = new System.Drawing.Size((int)(screenWidth * 0.8f * 1000) / 1000, (int)(screenHeight));
}
===========================================================================================
int screenWidth = GraphicsAdapter.DefaultAdapter.CurrentDisplayMode.Width;
int screenHeight = GraphicsAdapter.DefaultAdapter.CurrentDisplayMode.Height;
graphics.PreferredBackBufferWidth = (int)(screenWidth * 0.8f);
graphics.PreferredBackBufferHeight = screenHeight;
this.Window.AllowUserResizing = true;
this.Window.ClientSizeChanged += new EventHandler<EventArgs>(Window_ClientSizeChanged);
//获取除任务栏之外的显示屏高度
System.Windows.Forms.SystemInformation.WorkingArea.Height;
////////////////////////////////////////////////////////////////////////////////////////////////////////////////
string currentScreenSize_OutTaskBar=SystemInformation.WorkingArea.Width.ToString() + "," +SystemInformation.WorkingArea.Height.ToString();
MessageBox.Show("当前的屏幕除任务栏外的工作域大小为:"+currentScreenSize_OutTaskBar);
////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////
string currentScreenSize=System.Windows.Forms.Screen.PrimaryScreen.Bounds.Width.ToString() + "," + System.Windows.Forms.Screen.PrimaryScreen.Bounds.Height.ToString();
MessageBox.Show("当前的屏幕包括任务栏的工作域大小为:"+currentScreenSize);
////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Size OutTaskBarSize = new Size(SystemInformation.WorkingArea.Width, SystemInformation.WorkingArea.Height);
Size ScreenSize = new Size(System.Windows.Forms.Screen.PrimaryScreen.Bounds.Width, System.Windows.Forms.Screen.PrimaryScreen.Bounds.Height);
Size TaskBarSize;
TaskBarSize = new Size(
(ScreenSize.Width - (ScreenSize.Width - OutTaskBarSize.Width)),
(ScreenSize.Height - OutTaskBarSize.Height)
);
MessageBox.Show("任务栏大小:" + TaskBarSize.Width + "," + TaskBarSize.Height);
////////////////////////////////////////////////////////////////////////////////////////////////////////////////
var process = Process.Start(info);
var currentProcess = Process.GetCurrentProcess();
while (!process.HasExited)
{
Thread.Sleep(50);
if (GetForegroundWindow() == currentProcess.MainWindowHandle)
{
Activate(process.MainWindowHandle);
}
}
This is the code that sets the XNA game as the foreground window.
/// <summary>
/// Sets the window to be foreground
/// </summary>
[DllImport("User32")]
private static extern int SetForegroundWindow(IntPtr hwnd);
/// <summary>
/// Activate or minimize a window
/// </summary>
[DllImportAttribute("User32.DLL")]
private static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);
private const int SW_SHOW = 5;
private const int SW_MINIMIZE = 6;
private const int SW_RESTORE = 9;
/// <summary>
/// The GetForegroundWindow function returns a handle to the foreground window.
/// </summary>
[DllImport("user32.dll")]
private static extern IntPtr GetForegroundWindow();
private static void Activate(IntPtr windowHandle)
{
ShowWindow(windowHandle, SW_RESTORE);
SetForegroundWindow(windowHandle);
}
//设置幕大小,其中ChatForm为聊天WinForm窗体。
ChatForm form = new ChatForm();
int screenWidth = GraphicsAdapter.DefaultAdapter.CurrentDisplayMode.Width;// System.Windows.Forms.SystemInformation.WorkingArea.Width;
int screenHeight = System.Windows.Forms.SystemInformation.WorkingArea.Height;
form.Size = new System.Drawing.Size((int)(screenWidth * 0.2f * 1000) / 1000, (int)(screenHeight));
form.FormLocation = new System.Drawing.Point((int)(screenWidth * 0.8f * 1000) / 1000, 0);
form.Show();
IntPtr ip = Window.Handle;
System.Windows.Forms.Form gameForm = System.Windows.Forms.Control.FromHandle(ip) as System.Windows.Forms.Form;
if (gameForm != null)
{
gameForm.Location = new System.Drawing.Point(0, 0);
gameForm.Size = new System.Drawing.Size((int)(screenWidth * 0.8f * 1000) / 1000, (int)(screenHeight));
}
===========================================================================================
int screenWidth = GraphicsAdapter.DefaultAdapter.CurrentDisplayMode.Width;
int screenHeight = GraphicsAdapter.DefaultAdapter.CurrentDisplayMode.Height;
graphics.PreferredBackBufferWidth = (int)(screenWidth * 0.8f);
graphics.PreferredBackBufferHeight = screenHeight;
this.Window.AllowUserResizing = true;
this.Window.ClientSizeChanged += new EventHandler<EventArgs>(Window_ClientSizeChanged);
//获取除任务栏之外的显示屏高度
System.Windows.Forms.SystemInformation.WorkingArea.Height;
////////////////////////////////////////////////////////////////////////////////////////////////////////////////
string currentScreenSize_OutTaskBar=SystemInformation.WorkingArea.Width.ToString() + "," +SystemInformation.WorkingArea.Height.ToString();
MessageBox.Show("当前的屏幕除任务栏外的工作域大小为:"+currentScreenSize_OutTaskBar);
////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////
string currentScreenSize=System.Windows.Forms.Screen.PrimaryScreen.Bounds.Width.ToString() + "," + System.Windows.Forms.Screen.PrimaryScreen.Bounds.Height.ToString();
MessageBox.Show("当前的屏幕包括任务栏的工作域大小为:"+currentScreenSize);
////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Size OutTaskBarSize = new Size(SystemInformation.WorkingArea.Width, SystemInformation.WorkingArea.Height);
Size ScreenSize = new Size(System.Windows.Forms.Screen.PrimaryScreen.Bounds.Width, System.Windows.Forms.Screen.PrimaryScreen.Bounds.Height);
Size TaskBarSize;
TaskBarSize = new Size(
(ScreenSize.Width - (ScreenSize.Width - OutTaskBarSize.Width)),
(ScreenSize.Height - OutTaskBarSize.Height)
);
MessageBox.Show("任务栏大小:" + TaskBarSize.Width + "," + TaskBarSize.Height);
////////////////////////////////////////////////////////////////////////////////////////////////////////////////