Я хотел бы знать, каков наилучший способ с точки зрения эффективности (использование процессора / памяти) временно приостановить / обойти низкоуровневый захват мыши / клавиатуры.
Текущее решение, которое я нашел, состоит в том, чтобы установить глобальную переменную «doHook» в примере, протестировать ее в обработчике ловушки и, если она не установлена, просто дать ему пройти с CallNextHookEx следующим образом:
if ((nCode < 0) || (!doHook))
{
return CallNextHookEx(NULL, nCode, wParam, lParam);
}
Это хорошее решение? лучший способ?
Спасибо
У вас есть 2 варианта:
UnhookWindowsHookEx
.Низкий уровень клавиатура а также мышь Хуки несколько дорогостоящи, так как они вводят дополнительные переключатели контекста для обработки входных событий:
Хук […] не вводится в другой процесс. Вместо этого контекст переключается обратно на процесс, который установил хук, и он вызывается в своем первоначальном контексте. Затем контекст переключается обратно на приложение, которое сгенерировало событие.
По сути, ваш хук бездействия все еще использует тысячи тактов для переключения контекста, для всех входных событий. Чтобы свести к минимуму общее воздействие, вам следует рассмотреть возможность полного удаления крючка и его повторной установки при необходимости.
Других решений пока нет …