У тебя чтение через OpenProcess и ReadProcessMemory? При желании их же может перехватить игра и использовать для определения.
Твоя программа при запуске создает второй поток, создает объект событие (с автосбросом), устанавливает SetWindowsHookExW на игру с флагом WH_KEYBOARD_LL (чтобы не было нужды в инжекте DLL).
Либо вместо SetWindowsHookExW, для большей гарантии от бана, использует Raw Input и флаг RIDEV_INPUTSINK.
Главный поток использует GetMessage, а не PeekMessage. Главный поток только активирует/деактивирует чит.
При нажатии клавиши сброса бомбы, твоя программа проверяет что бомбы еще есть, и если есть, устанавливает событие в signaled. Поток пробуждается от сна (этот сон не тратит процессорное время), и начинает в цикле считывать значение. Если бомбы закончились, поток сам прерывает цикл считывание и возвращается на объект событие. Если бомбы еще есть но была нажата клавиша S, то поток также сам прерывает цикл и возвращается на объект событие. Определять была ли нажата клавиша S можно через тот же зарегистрированный Raw Input или через GetAsyncKeyState.
Такие мысли, чтобы уменьшить нагрузку на CPU.