Чтобы подключить как 32-разрядные, так и 64-разрядные процессы, необходимо убедиться, что:
- У вас есть 32-битная DLL для подключения 32-битных процессов и 64-битная DLL для подключения 64-битных процессов
- SetWindowsHookEx () вызывается из 32-битного кода для перехвата 32-битных процессов и из 64-битного кода для перехвата 64-битных процессов.
Последнее в основном означает, что вам необходимо создать как 32-битный, так и 64-битный исполняемый файл, который вызывает SetWindowsHookEx (), предоставляя 32-битную и 64-битную DLL соответственно в качестве параметра hMod.
Если ваше приложение 32-битное, вам нужно будет запустить 64-битный процесс, который будет вызывать SetWindowsHookEx () и, вероятно, больше ничего не делать, пока вы не отсоединитесь. Обратите внимание, что Windows автоматически отменяет перехват, когда / если этот процесс завершается / завершается, поэтому он должен оставаться активным все время, пока вам нужны перехватчики, возможно, в течение всего времени жизни вашего приложения - в этом случае вы можете сделать свой 64-битный процесс WaitForSingleObject () до тех пор, пока ваш основной процесс приложения не завершится / не завершится, не отсоединится и не выйдет после завершения WaitForSingleObject ().