- Joined
- Apr 9, 2008
- Messages
- 1,416
- Reaction score
- 169
I was looking around the net trying to find a simple keyboard hook. I came across this page:
used it and it was good but I had to keep adding in new ids for each hotkey. I felt it could be improved and heres my improvements:
to use add as many hotkeys as you want with:
to register the keys add into your form load function:
to unregister the keys add this into your formClosing function:
and final to get the hotkeys to actually do something add this function:
just thought I would share how I got my answer
You must be registered to see links
used it and it was good but I had to keep adding in new ids for each hotkey. I felt it could be improved and heres my improvements:
Code:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;
namespace Test
{
enum Constants
{
NOMOD = 0x00,
ALT = 0x01,
CTRL = 0x02,
SHIFT = 0x04,
WIN = 0x08,
WM_HOTKEY = 0x312
}
class HotKeys
{
[DllImport("user32.dll")]
private static extern bool RegisterHotKey(IntPtr hWnd, int id, int fsModifiers, int vk);
[DllImport("user32.dll")]
private static extern bool UnregisterHotKey(IntPtr hWnd, int id);
private Dictionary<int, int> _dic = new Dictionary<int, int>();
public void addHotKey(Constants mod, Keys key)
{
_dic.Add((int)key, (int)mod);
}
public void registerKeys(Form form)
{
foreach (KeyValuePair<int, int> pair in _dic)
RegisterHotKey(form.Handle, pair.Key, pair.Value, pair.Key);
}
public void disposeKeys(Form form)
{
foreach (KeyValuePair<int, int> pair in _dic)
UnregisterHotKey(form.Handle, pair.Key);
}
}
}
to use add as many hotkeys as you want with:
Code:
HotKeys _key = new HotKeys();
_key.addHotKey(Constants.NOMOD, Keys.F1);
_key.addHotKey(Constants.NOMOD, Keys.F2);
_key.addHotKey(Constants.NOMOD, Keys.F3);
to register the keys add into your form load function:
Code:
_key.registerKeys(this);
to unregister the keys add this into your formClosing function:
Code:
_key.disposeKeys(this);
and final to get the hotkeys to actually do something add this function:
Code:
protected override void WndProc(ref Message m)
{
if (m.Msg == (int)Constants.WM_HOTKEY)
{
switch (m.WParam.ToInt32())
{
case (int)Keys.F1:
Console.WriteLine("Pressed F1");
break;
case (int)Keys.F2:
Console.WriteLine("Pressed F2");
break;
case (int)Keys.F3:
Console.WriteLine("Pressed F3");
break;
}
}
base.WndProc(ref m);
}
just thought I would share how I got my answer
Last edited: