Перейти к содержанию

Делаем горячие клавиши(hook)c#


Рекомендуемые сообщения

Всем привет сегодня расскажу как делать хуки на C#.

Комментировал код  из-за всех сил вроде понятно всё получилось.

На что следующую статью написать уже не знаю.  8-)

 

using System;using System.Windows.Forms;//Подключим пространство имён.using System.Runtime.InteropServices;namespace WindowsFormsApplication2{    public partial class Form1 : Form    {        //Тут объявим WinApi        [DllImport("user32.dll")]        private static extern bool RegisterHotKey(IntPtr hWnd, int id, uint fsModifiers, uint vk);        [DllImport("user32.dll")]        private static extern bool UnregisterHotKey(IntPtr hWnd, int id);        public Form1()        {            InitializeComponent();            //В инициализации компонентов объявим наши горячие клавиши и их айдишники.            //Где 0, 0 это то есть ID=0            //Где 2,0 это то есть ID= 2            RegisterHotKey(this.Handle, 0, 0, (int)Keys.D1);            //Если надо две горячих клавиши можно сделать так и ID Клавиши будет конечно равен 1 тут легко догадаться.            RegisterHotKey(this.Handle, 1, (int)ModiferKeys.Control, (int)Keys.D2);            RegisterHotKey(this.Handle, 2, 0, (int)Keys.D3);        }        //Теперь сделаем обработку наших нажатых клавиш        protected override void WndProc(ref Message m)        {            if (m.Msg == 0x0312)            {                //if (m.WParam.ToInt32() == 0) это значит что функция обрабатывается при нажатие клавиши 1 и id который равен 0                if (m.WParam.ToInt32() == 0)                    MessageBox.Show("Click 1");        //if (m.WParam.ToInt32() == 1) это значит что функция обрабатывается при нажатие клавишей ctrl + 2 иid который равен 1                    if (m.WParam.ToInt32() == 1)                    MessageBox.Show("Click 2");                if (m.WParam.ToInt32() == 2)         //if (m.WParam.ToInt32() == 2) это значит что функция обрабатывается при нажатие клавиши 3 2 id который равен 2                    MessageBox.Show("Click 3");            }            base.WndProc(ref m);        }        private void Form1_FormClosing(object sender, FormClosingEventArgs e)        {            //Здесь мы пишем снятие регистрации клавиш, вдруг они заняты другой программой.            UnregisterHotKey(this.Handle, 0);            UnregisterHotKey(this.Handle, 1);            UnregisterHotKey(this.Handle, 2);        }        //[Flags] public enum ModiferKeys : uint нужен только когда вы используете две и более горячих клавиш.        //Для хоткеея равным  нажатием одной клавиши это можно не прописывать.        [Flags]        public enum ModiferKeys : uint        {            Alt = 1,            Control = 2,            Shift = 4,            Win = 8        }    }}
Изменено пользователем ivan96222
  • Плюс 1
Ссылка на комментарий
Поделиться на другие сайты

 


protected override void WndProc(ref Message m)
        {
            const int WM_NCLBUTTONDOWN = 0x00A1; //Из прошлой статьи я показывал как делать форму прозрачной при перемешение
            const int WM_MOUSEMOW = 0x00A0; // Тут объединённый код, так как второй раз WndProc использовать нельзя,
            if (m.Msg == WM_NCLBUTTONDOWN) //Но можно объединить.
            {
                this.Opacity = 0.5;
            }
            if (m.Msg == WM_MOUSEMOW)
            {
                this.Opacity = 1.0;
            }
            if (m.Msg == 0x0312)
            {
                if (m.WParam.ToInt32() == 0)
                    if (timer2.Enabled)
                        timer2.Stop();
                    else
                        timer2.Start();
            }


            base.WndProc(ref m);
        }
Изменено пользователем ivan96222
Ссылка на комментарий
Поделиться на другие сайты

×
×
  • Создать...

Важная информация

Находясь на нашем сайте, Вы автоматически соглашаетесь соблюдать наши Условия использования.