Noticias

¡RECUERDA QUE SI ERES UN NUEVO USUARIO, DEBES PRESENTARTE PARA PODER PUBLICAR MENSAJES! | TENEMOS CANAL OFICIAL DE TELEGRAM: t.me/unity3dspain

Minimizar / Maximizar ventana

Iniciado por alonso240, Septiembre 28, 2015, 07:57:13 PM

Tema anterior - Siguiente tema
Buenas.Me gustaría saber como crear un script en c# para minimizar y maximizar la ventana del juego (a fullscreen) en windows.Muchas gracias.Saludos.

// Switch to 640 x 480 fullscreen
Screen.SetResolution(640, 480, true);
Simple http://docs.unity3d.com/ScriptReference/Screen.SetResolution.html

Bye Bye



[quote author=Oak Human Flesh date=1443465849" data-ipsquote="" data-cite="Oak Human Flesh" class="ipsQuote">
// Switch to 640 x 480 fullscreenScreen.SetResolution(640, 480, true);
Simple http://docs.unity3d.com/ScriptReference/Screen.SetResolution.html[/quote]Buenas.Gracias por contestar.De esa forma no me minimiza, solo veo la barra de windows y poco mas. Saludos.

[quote author=alonso240" data-ipsquote-contapp="forums" data-ipsquote-contenttype="forums" data-ipsquote-contentclass="forums_Topic" data-ipsquote-contentid="27145" data-ipsquote-contentcommentid="114603">Buenas.Gracias por contestar.De esa forma no me minimiza, solo veo la barra de windows y poco mas. Saludos.[/quote]Entonces entendí mal :fisch:

Bye Bye



Creo que no existe funciones en Unity para minimizar y maximizar la ventana. Sin embargo puedes importar una librería nativa de windows con la interoperabilidad. Prueba lo siguiente:Crea un script C# con un nombre(por ejemplo el mismo que la clase "ManVentanas"), y reemplaza todo su código por el siguiente:
using UnityEngine;
using System.Collections;
using System.Runtime.InteropServices;

public enum ModoVentana {
Normal       = 1,
Minimizado    = 2,
Maximizado    = 3
}

public static class ManVentanas
{
    // Importa la funcion "Mostrar Ventana" de la dll "user32"
[DllImport("user32.dll")]
    private static extern bool ShowWindow(IntPtr hwnd, WindowShowStyle nCmdShow);

    // Importa la funcion "Buscar Ventana" de la dll "user32"
    [DllImport("user32.dll", SetLastError=true)]
    private static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
    

    // tituloVentana = titulo de la ventana del juego.
    public static void CambiarModo (ModoVentana modo, string tituloVentana)
    {
       IntPtr ventana = FindWindow (null, tituloVentana);
       ShowWindow (ventana, (int)modo);
    }

}
No lo he probado pero en su momento(hace un par de años o tres), probé a mostrar cuadros de mensajes nativos de Windows a través de Unity. Así que creo que podría funcionar. Como es una clase estática y para este caso es lo más adecuado, para llamar al método "CambiarModo", basta con hacerlo de estas formas posibles:Imaginemos que tu juego se llama "Metal Gear Solid", y que por lo general, el título de la ventana de tu juego será el mismo.Minimizar:
ManVentanas.CambiarModo(ModoVentana.Minimizado, "Metal Gear Solid");
Maximizar:
ManVentanas.CambiarModo(ModoVentana.Maximizado, "Metal Gear Solid");
Normal:
ManVentanas.CambiarModo(ModoVentana.Normal, "Metal Gear Solid");
 Recuerda comprobar cual es el título de la ventana de tu juego para que la función FindWindow la encuentre. Espero que funcione, sino, postea el error. 

Hola.Copio todo el código y tengo WindowShowStyle en error, ya que no lo reconoce.¿Que using debo poner?Gracias.


Vale, solucionado.Me decia que "WindowShowStyle" no lo reconocia, así que he cambiado la línea:
private static extern bool ShowWindow(IntPtr hwnd, WindowShowStyle nCmdShow);
por:
private static extern bool ShowWindow(IntPtr hwnd, int nCmdShow);
Y me funciona a la perfección.Para no tener que mirar el nombre de la aplicación he usado:
ManVentanas.CambiarModo(ModoVentana.Minimizado, Application.productName);
y funciona perfectamente. Muchísimas gracias, llevaba unos días buscando y no encontraba nada que funcionase.Saludos.

[quote author=alonso240" data-ipsquote-contapp="forums" data-ipsquote-contenttype="forums" data-ipsquote-contentclass="forums_Topic" data-ipsquote-contentid="27145" data-ipsquote-contentcommentid="114982">Vale, solucionado.Me decia que "WindowShowStyle" no lo reconocia, así que he cambiado la línea:
private static extern bool ShowWindow(IntPtr hwnd, WindowShowStyle nCmdShow);
por:
private static extern bool ShowWindow(IntPtr hwnd, int nCmdShow);
Y me funciona a la perfección.Para no tener que mirar el nombre de la aplicación he usado:
ManVentanas.CambiarModo(ModoVentana.Minimizado, Application.productName
								

Etiquetas: