Здраствуйте у меня вопрос как можно привязать кнопку к комбинации клавиш. Например сохранить кнопка (ctrl+s)
API: user32.dll --> RegisterHotKey() ... Code: [DllImport("user32")] public static extern int RegisterHotKey(IntPtr hwnd, int id, int fsModifiers, int vk); [DllImport("user32.dll")] static extern bool UnregisterHotKey(IntPtr hWnd, int id); private const int MOD_ALT = 0x1; private const int MOD_CONTROL = 0x2; private const int MOD_SHIFT = 0x4; private const int MOD_WIN = 0x8; private const int WM_HOTKEY = 0x312; public frmMain() { // Например хоткей WIN+T RegisterHotKey( this.Handle, 42, MOD_WIN, (int)Keys.T ); } protected override void WndProc(ref Message m) { base.WndProc (ref m); if( m.Msg == WM_HOTKEY ) { if( !this.Visible ) this.Visible = true; this.Activate(); } } private void frmMain_Closing(object sender, System.ComponentModel.CancelEventArgs e) { UnregisterHotKey( this.Handle, 42 ); }
Code: private void Form1_KeyDown(object sender, KeyEventArgs e) { if (e.Alt && e.KeyCode == Keys.Enter) { MessageBox.Show("WoW"); } } так что-ли? тут один нюанс, код сработает при нажатии сочетания на активном окне...
Code: using System.Runtime.InteropServices; и собственно код , что выше ... После класса добавляешь библиотеки и констнаты Code: public partial class Form1 : Form { [DllImport("user32")] public static extern int RegisterHotKey(IntPtr hwnd, int id, int fsModifiers, int vk); [DllImport("user32.dll")] static extern bool UnregisterHotKey(IntPtr hWnd, int id); private const int MOD_ALT = 0x1; private const int MOD_CONTROL = 0x2; private const int MOD_SHIFT = 0x4; private const int MOD_WIN = 0x8; private const int WM_HOTKEY = 0x312; RegisterHotKey( this.Handle, > хэндл нашего окна 42, > магическое число , идентифекатор хоткея , запомни его ... MOD_WIN, > значит первой клавишей хоткея будет Win - клавиша , соответственно смотри констаты сверху (int)Keys.T > значит что второй клавишей будет клавиша "T" , можешь поменять на любую , например (int)Keys.R ) используем например: RegisterHotKey(this.Handle, 42, MOD_WIN, (int)Keys.A); RegisterHotKey(this.Handle, 43, MOD_SHIFT, (int)Keys.W); Code: protected override void WndProc(ref Message m) { if (m.Msg == WM_HOTKEY) { Здесь - код выполняемый для хоткея , поскольку хоткеев может быть несколько, находим нужный по идентификатору ... switch (m.WParam.ToInt32()) { case 42: Код для первого хоткея break; case 43: Код для другого хоткея с id 43 break; } } и незабуть при закрытии убрать все хоткеи: UnregisterHotKey(this.Handle, 42); UnregisterHotKey(this.Handle, 43);