Created
May 15, 2016 13:52
-
-
Save insideone/327266278c952f34d699d292b6a74da2 to your computer and use it in GitHub Desktop.
C#: Горячие клавиши
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public partial class ShotForm : 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); | |
/* | |
А теперь некоторые необязательные константы в виде #define - style. Те что MOD_ - описывают константы модификаторов, | |
т.е. хоткей будет состоять из нажатия модификаторов + клавиша. Ну в WM_HOTKEY событие которое отправляет Windows | |
когда пользователь нажмет соответствущую комбинацию | |
*/ | |
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; | |
/* | |
В конструкторе достаточно будет зарегистрировать необходимые хот-кеи. В данном случае 42 - номер хоткея, | |
0 - модификатор (нету модификатора), можно сюда вставлять всякие MOD_, (int)Keys.PrintScreen - означает что | |
хоткей сработает при нажатии, ну вы поняли чего | |
*/ | |
public ShotForm() | |
{ | |
InitializeComponent(); | |
RegisterHotKey(this.Handle, 42, 0, (int)Keys.PrintScreen); | |
} | |
/* | |
Приличные программисты освобождают выделенные ресурсы и разрегистрируют хоткеи когда они уже не нужны. | |
*/ | |
private new void Close() | |
{ | |
UnregisterHotKey(this.Handle, 42); | |
} | |
/* | |
А теперь собственно обработка хоткеев - если пришло сообщение WM_HOTKEY - проверяем какой у него номер | |
и обрабатываем как надо. Т.к. в примере я регистрировал 42 хоткей, его я и обрабатываю. | |
Показываю форму - а дальше там делается скриншот и все такое. Напишите там что вам нужно | |
*/ | |
protected override void WndProc(ref Message m) | |
{ | |
base.WndProc(ref m); | |
if (m.Msg == WM_HOTKEY) | |
{ | |
switch (m.WParam.ToInt32()) | |
{ | |
case 42: | |
Show(); | |
break; | |
} | |
} | |
} | |
// ... | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment