Shortcuts, когда приложение в c# теряет фокус

(Оно разработано в c#, визуальный studio)

Привет то, за чем оно последует, является следующим у меня есть панель в windowsForms и с любым shortcut давайте говорить (CTR+A), распределенный элемент menuStrip, команда выполняет следующее:

private void ocultarToolStripMenuItem_Click(object sender, EventArgs e)
        {

            if (this.WindowState==FormWindowState.Minimized)
            {
                this.WindowState = FormWindowState.Maximized;
            }
            else
            {
                this.WindowState = FormWindowState.Minimized;  

            }
        }

Это, что он делает кратко, состоит в том, что он приуменьшает панель.

То, что я хочу сделать, состоит в том, чтобы в undir та же команда повернулась, чтобы максимизировать, но это не делает, потому что фокус приложения или он не в той же самой (или будьте браузер, windows, другим app, и т.д.).

Я предполагаю, что он был бы должен регистрировать shortcut в windows, у которого была связь с действием, которое я хочу реализовать, но правда у меня даже не есть самая минимальная идея как делать это ò, если существовал какой-то другой метод.

4
задан 02.11.2019, 22:36
1 ответ

Если эти на Windows платформе ты можешь использовать ее funciГіn API Windows RegisterHotKey

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace WindowsFormsApplication2
{
    public partial class Form1 : Form
    {

        //Declaramos nuestras API y Constantes Necesarias
        [System.Runtime.InteropServices.DllImport("user32.dll")]
        private static extern bool RegisterHotKey(IntPtr hWnd, int id, int fsModifiers, int vk);
        [System.Runtime.InteropServices.DllImport("user32.dll")]
        private static extern bool UnregisterHotKey(IntPtr hWnd, int id);
        private const int WM_HOTKEY = 0x0312;

        enum KeyModifier
        {
            None = 0,
            Alt = 1,
            Control = 2,
            Shift = 4,
            WinKey = 8
        }

        //Sobrescribimos nuestro procedimiento WndProc para darle unan nueva 
        funcionalidad y poder detectar el evento del teclado registrado.
        protected override void WndProc(ref Message m)
        {
            base.WndProc(ref m);
            if (m.Msg == WM_HOTKEY) //Detectamos el evento
            {
                Visible =true; //Mostrar Formulario
            }
        }


        public Form1()
        {
            InitializeComponent();
            int id = 0;   //dejar por defecto 
             //Registramos El evento asociado al iniciar el formulario
            RegisterHotKey(this.Handle, id, (int)KeyModifier.Control, Keys.A.GetHashCode());       // Registar Ctrl + A 

        }

        private void ExampleForm_FormClosing(object sender, FormClosingEventArgs e)
        {
            UnregisterHotKey(this.Handle, 0);       // Anular Registro
        }

        private void Form1_Load(object sender, EventArgs e)
        {

        }

        private void button1_Click(object sender, EventArgs e)
        {
            Visible = false;
        }
    }
}

2
ответ дан 01.12.2019, 15:17
  • 1
    ¿ Привет ты мог бы объяснять то, что он делает?, я хотел бы знать, должно размещаться ли это в приложении для того, чтобы он работал каждый раз или registron, который делается единственный раз, который делают методы, которые приносят эти переменные, и т.д., спасибо. – Cubito Senpai 07.11.2019, 00:31
  • 2
    Ahí добавьте комментарии больше. – Dany 07.11.2019, 11:49