private static KeyboardFilter initFilter() { // инициализация рабочего экземпляра фильтра var _filter = new KeyboardFilter(); callback = new KeyActionCallback(keyDownCallback); _filter.KeyDownCallback += new KeyActionCallback(keyDownCallback); _filter.KeyUpCallback += new KeyActionCallback(keyUpCallback); return _filter; }
/// <summary> /// Удаление фильтра из системы /// </summary> /// <param name="filter">Фильтр который необходимо удалить</param> public void RemoveFilter(KeyboardFilter filter) { if (!filter.IsActive) throw new Exception("Фильтр не зарегистриован в системе"); if (!NativeFunctions.UnhookWindowsHookEx(filter.IdHook)) // нативное удаление хука из систему throw new Exception("Хук не был удален из системы. Возможно он не был подключен."); filter.IsActive = false; _activeFilters.Remove(filter); }
/// <summary> /// Добавляет фильтр в систему /// </summary> /// <param name="filter">Информация о фильтре, который необходимо подключить</param> public void ApplyFilter(KeyboardFilter filter) { using (Process curProcess = Process.GetCurrentProcess()) using (ProcessModule curModule = curProcess.MainModule) { filter.IdHook = NativeFunctions.SetWindowsHookEx(filter.IdTypeHook, filter.HookCallback, NativeFunctions.GetModuleHandle(curModule.ModuleName), 0); // нативное добавление хука в систему } filter.IsActive = true; // флаг активности хука _activeFilters.Add(filter); }