1) Buy a wifi shield (e.g. sparkfun)
2a) run a webserver on the Arduino. Your application can browse the Arduino pages and these can trigger actions
2b) run a webclient that polls a PC-webserver that represents the state of the buttons
Not so different from webserver, just on a different port. This server waits for a command on the socket, e.g. http://blog.brachium-system.net/archives/105-Arduino-with-Ethernetshield-Get-temperature-via-telnet.html
shows some essentials
TCP uses handshakes to be sure packets arrive on the other end.
UDP just sends packets (datagrams), less reliable (depends on network conditions) but faster. You can implement acknowledges or any other handshake yourself if needed.
If you use a webbased approach you can control the device from any browser - phone PC pad etc