One way is to put the processor to sleep. I use ESp32's so that will be the example I use.
The ESP32 can be put into a deep sleep mode where the current drawn by the main CPU gets down to 25uA. By using the ULP, that the 2nd processor of the ESP32, I can set up a program to 'watch' for a button press, record the button press, wake the main dual core CPU and pass the button press to the CPU.
Thanks a lot guys, this was exactly what I was looking for. I'll mark the 2nd one as solution, because it's targeting the Arduino and provides a tutorial. But your answer was also helpful, @Idahowalker
The processor on an UNO draws about 45 milliamps (0.045 amps). Multiply by Volts (5) to get Watts: 0.225. That's about two kilowatt-hours a year. Unless you are running off a battery, the power use is negligible.