ivan96222 Опубликовано 12 декабря, 2014 Поделиться Опубликовано 12 декабря, 2014 (изменено) Всем привет сегодня расскажу как делать хуки на C#.Комментировал код из-за всех сил вроде понятно всё получилось.На что следующую статью написать уже не знаю. 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 } }} Изменено 12 декабря, 2014 пользователем ivan96222 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
ivan96222 Опубликовано 13 декабря, 2014 Автор Поделиться Опубликовано 13 декабря, 2014 (изменено) 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); } Изменено 13 декабря, 2014 пользователем ivan96222 Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения