La forma mas sencilla es usando el atributo de clase [Serializable]
https://docs.microsoft.com/en-us/dotnet/api/system.serializableattribute?view=netframework-4.8
https://www.c-sharpcorner.com/article/serialization-and-deserialization-in-c-sharp/
https://docs.microsoft.com/en-us/dotnet/api/system.serializableattribute?view=netframework-4.8
https://www.c-sharpcorner.com/article/serialization-and-deserialization-in-c-sharp/

) que resida en flash usb y se autoejecute en la computadora al ser conectado y registre las teclas que pulse el usuario tenia una idea de como hacer esto pero no me funciono creo que fue por querer tratar el teclado como un fichero (como lo es en C) pero no me funciono . Mi intencion no es que me den el codigo fuente sino que me digan su enfoque o como lo diseñarian