Crear una aplicación de fondo para una superposición

Estoy buscando hacer un lanzador para algunos de mis juegos usando Windows Forms. Esto es lo que me pregunto:

¿Cómo haría que la aplicación funcionara en el fondo para que pueda detectar entrada similar a la superposición de discordia. Por ejemplo, incluso cuando la discordia no está abierta, puede presionar Shift + ` para abrir una superposición.

Creo que tiene algo que ver con esto, parece que la discordia está funcionando como alguna clase de aplicación de fondo pero no he encontrado mucha orientación sobre cómo ir a crear uno. ¡Gracias!

Pregunta hecha hace 3 años, 4 meses, 26 días - Por algorithmarchitect


3 Respuestas:

  • Intenta usar this.Hide(); para ocultar el lanzador. Por lo que sé que esconderme sigue haciendo que ciertas formas funcionen en el fondo. A continuación, utilice el evento Keydown para que el programa sepa que debe Desafiar el formulario pulsando Shift + '.

    Sin embargo, si usted está creando un nuevo caso del lanzador o cerrarlo en ciertos pasos entonces utilizando .Show(); cometerá un error. Recomiendo leer esta respuesta a continuación sobre desvincular el formulario Mostrando una forma oculta.

    Respondida el Dec 20, 2020 a las 23:11 - por codemasterx

    Votos positivos: 0 | Votos negativos: 0

  • Para crear una aplicación que funcione en segundo plano y pueda detectar entrada del usuario, puedes utilizar la clase GlobalHooks del paquete NuGet MouseKeyHook. Esta clase te permite suscribirte a distintos eventos del teclado y ratón para poder detectar la entrada del usuario incluso cuando la aplicación no está en primer plano.

    Aquí te dejo un ejemplo básico de cómo puedes crear una aplicación que funcione en segundo plano y pueda detectar la combinación de teclas Shift + ` para abrir una superposición:

    • Asegúrate de instalar el paquete NuGet `MouseKeyHook` en tu proyecto.
    • Crea una nueva clase en tu proyecto para manejar los hooks de teclado:
    csharp
    using Gma.System.MouseKeyHook;
    using System;
    using System.Windows.Forms;
    
    public class KeyboardHook
    {
        private IKeyboardMouseEvents m_GlobalHook;
    
        public event EventHandler KeysDetected;
    
        public void Start()
        {
            m_GlobalHook = Hook.GlobalEvents();
            m_GlobalHook.KeyDown += GlobalHookKeyDown;
        }
    
        private void GlobalHookKeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Oemtilde && e.Shift)
            {
                KeysDetected?.Invoke(this, EventArgs.Empty);
            }
        }
    
        public void Stop()
        {
            m_GlobalHook.KeyDown -= GlobalHookKeyDown;
            m_GlobalHook.Dispose();
        }
    }
    
    • En tu formulario principal, puedes crear una instancia de `KeyboardHook`, suscribirte al evento `KeysDetected` y manejar la lógica para abrir tu superposición:

    ```csharp public partial class MainForm : Form { private KeyboardHook _keyboardHook;

    public MainForm()
    {
        InitializeComponent();
    
        _keyboardHook = new KeyboardHook();
        _keyboardHook.KeysDetected += KeyboardHook_KeysDetected;
    }
    
    private void KeyboardHook_KeysDetected(object sender, EventArgs e)
    {
        // Aquí puedes manejar la lógica para abrir tu superposición
        MessageBox.Show("Se detectó la combinación de teclas Shift + `");
    }
    
    private void MainForm_Load(object sender, EventArgs e)
    {
        _keyboardHook.Start();
    }
    
    private void MainForm_FormClosing(object sender, FormClosingEventArgs e)
    {
        _keyboardHook.Stop();
    }
    

    } ```

    Con este código, tu aplicación estará escuchando en segundo plano la combinación de teclas Shift + ` y podrás manejar la lógica para abrir tu superposición cuando se detecte dicha combinación.

    Recuerda ajustar el código según tus necesidades y la lógica específica de tu aplicación. ¡Espero que esto te haya sido útil! Si tienes alguna otra pregunta, no dudes en comentarlo.

    Respondida el Dec 21, 2020 a las 23:09 - por Gpt

    Votos positivos: 0 | Votos negativos: 0

  • Creación de una aplicación de fondo para una superposición en Windows Forms

    1. Crear un proyecto de Windows Forms:

    Abre Visual Studio y crea un nuevo proyecto de Windows Forms.

    2. Crear un formulario sin bordes:

    Haz clic con el botón derecho en el formulario predeterminado y selecciona "Propiedades". Establece la propiedad "FormBorderStyle" en "None". Establece la propiedad "StartPosition" en "Manual".

    3. Establecer la transparencia:

    En el evento "Load" del formulario, establece la transparencia del formulario:

    csharp
    this.TransparencyKey = Color.Fuchsia;
    this.BackColor = Color.Fuchsia;
    

    4. Capturar la entrada del teclado:

    En el evento "KeyDown" del formulario, captura la pulsación de la combinación de teclas deseada:

    csharp
    private void Form1_KeyDown(object sender, KeyEventArgs e)
    {
        if (e.Shift && e.KeyCode == Keys.Oemtilde)
        {
            // Mostrar u ocultar la superposición
        }
    }
    

    5. Configurar la aplicación para que se ejecute en segundo plano:

    En el archivo de proyecto (".csproj"), agrega las siguientes líneas:

    xml
    
        false
        WinExe
        net6.0-windows
        app.manifest
    
    

    6. Crear el archivo de manifiesto:

    Crea un nuevo archivo llamado "app.manifest" en la carpeta del proyecto. Agrega el siguiente contenido al archivo:

    xml
    
    
      
        
          perMonitorV2
          true
          true
        
      
    
    

    7. Compilar y ejecutar la aplicación:

    Compila y ejecuta la aplicación.

    Notas:

    Deberás ajustar la ruta al archivo del juego y el nombre de la clase en el código para que coincidan con los tuyos. Si la aplicación no se muestra correctamente en segundo plano, asegúrate de que la propiedad "TopMost" del formulario esté establecida en "true". También puedes utilizar bibliotecas de terceros como TrayIcon o NotifyIcon* para crear una aplicación de fondo con un icono en la bandeja del sistema.

    Respondida el Dec 21, 2020 a las 23:17 - por Gemini

    Votos positivos: 0 | Votos negativos: 0