¿Cómo puedo obtener una funcionalidad similar a Spy ++ en mi aplicación C #?

Estoy interesado en trabajar en un plugin paraKeepass, el administrador de contraseñas de código abierto. Ahora mismo,Keepass actualmente detecta qué contraseña copiar / pegar para usted se basa en el título de la ventana. Esto evita que Keepass detecte la contraseña actual que necesita para las aplicaciones que no actualizan activamente el título de su ventana según el sitio actual (por ejemplo, Chrome).

¿Cómo puedo recorrer otros elementos de la ventana de procesos (botones, etiquetas, cuadro de texto) similar a cómo funciona Spy ++? Cuando ejecute Spy ++, puede desplazarse sobre las ventanas de otros programas y obtener todo tipo de información sobre varias propiedades relacionadas con varios controles (etiquetas, cuadros de texto, etc.). Idealmente, me gustaría que mi complemento Keepass mejore la detección de la ventana actual recorriendo los elementos de la ventana activa en un esfuerzo por encontrar una cuenta que coincida para copiar / pegar la contraseña.

¿Cómo puedo recorrer los elementos de la ventana de otros procesos y poder recuperar los valores de las etiquetas y los cuadros de texto usando C #?