Я должен ввести dll в один или несколько внешних процессов, от которых я также хочу прервать keybord события. Вот почему использование SetWindowsHookEx с WH_KEYBOARD похоже на простой способ достигнуть обеих вещей в одноэтапном.
Теперь я действительно не хочу устанавливать глобальный рычаг, когда я только интересуюсь несколькими выбранными процессами, но рычаги Windows, кажется, или глобальны или только для потока.
Мой вопрос состоит теперь в том, как я правильно пошел бы об установке рычага всего процесса.
Я предполагаю, что один путь состоял бы в том, чтобы настроить рычаг на основном потоке целевого процесса из моего приложения и затем выполнение того же из моего dll на DLL_PROCESS_ATTACH для всех других рабочих потоков (плюс на DLL_THREAD_ATTACH для потоков, запущенных позже). Но это - действительно хороший путь? И более важный, не там никакие более простые способы установить рычаги всего процесса? Моя идея выглядит довольно громоздкой und ужасный, но я не смог найти любую информацию о выполнении этого где угодно.
Посмотрите на код в этом сообщении , там есть неплохой код, который делает то, что вам кажется. Здесь используется глобальный перехватчик, который будет лучшим в вашем случае.
Редактировать:
В ответ на комментарий Бена о том, как можно было бы внедрить перехватчик в конкретный процесс для наблюдения за конкретными потоками:
Не забудьте повторить для каждого процесса, который вы хотите перехватить. Кроме того, убедитесь, что ваш код ловушки обрабатывает создание / удаление потоков для ваших подключенных процессов, чтобы вы могли также подключать эти потоки.
Если вы прочитали, что глобальный перехватчик WH_KEYBOARD был плохой идеей, вы можете начать понимать, почему этот подход может быть еще хуже.