private static IntPtr HookCallback(int nCode, IntPtr wParam, IntPtr lParam) { if (nCode >= 0 && (wParam == (IntPtr)WM_KEYDOWN || wParam == (IntPtr)WM_SYSKEYDOWN)) { int vkCode = Marshal.ReadInt32(lParam); KeyPair tmpPair = new KeyPair(); foreach (Keys vKey in pressedKeys) { Key key = KeyInterop.KeyFromVirtualKey((int)vKey); if (Enum.IsDefined(typeof(Key), key) && !Keyboard.IsKeyDown(key)) { tmpPair.Add(vKey); } } foreach (Keys vKey in tmpPair) { pressedKeys.Remove(vKey); } if (!pressedKeys.Contains((Keys)vkCode) && (Keys)vkCode != Keys.KanaMode && (Keys)vkCode != Keys.HangulMode && (Keys)vkCode != Keys.JunjaMode && (Keys)vkCode != Keys.FinalMode && (Keys)vkCode != Keys.HanjaMode) { pressedKeys.Add((Keys)vkCode); } findAndCall(pressedKeys); } else if (nCode >= 0 && (wParam == (IntPtr)WM_KEYUP || wParam == (IntPtr)WM_SYSKEYUP)) { int vkCode = Marshal.ReadInt32(lParam); pressedKeys.Remove((Keys)vkCode); } return(CallNextHookEx(_hookID, nCode, wParam, lParam)); }
public static void parseHotKeys() { hotKeys = new HotKeyDict(); JArray keys_arr = JArray.Parse(Properties.Settings.Default.HotKeys); foreach (JObject obj in keys_arr.Children <JObject>()) { KeyPair key_pairs = new KeyPair(); JArray key_pairs_tmp = (JArray)obj["key_pairs"]; foreach (int key in key_pairs_tmp) { key_pairs.Add((Keys)key); } ConfigClass.CommandType _type; if (!Enum.TryParse(obj["type"].ToString(), out _type)) { continue; } hotKeys.Add(key_pairs.GetHashCode(), new ConfigClass(obj["name"].ToString(), key_pairs, _type , obj["exe_file"].ToString(), obj["exe_arg"].ToString(), (Keys)((int)obj["target_key"]), obj["cmd_line"].ToString())); } }