Skip to content

Instantly share code, notes, and snippets.

@insideone
Created May 15, 2016 13:52
Show Gist options
  • Save insideone/327266278c952f34d699d292b6a74da2 to your computer and use it in GitHub Desktop.
Save insideone/327266278c952f34d699d292b6a74da2 to your computer and use it in GitHub Desktop.
C#: Горячие клавиши
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