¿Podría alguien orientarme poniendome algún ejemplo de como se usaría?
Para hacer uso de las técnicas de IPC más recomendables, solo serían una opción válida si tú has desarrollado dicha aplicación, es decir, si tienes acceso al código fuente de la misma, pues deberias implementar el algoritmo de comunicación tanto en el proceso emisor, como el receptor (o cliente y servidor, quien lo prefiera llamar así). En tal caso, mi recomendación, y dado que no parece haber necesidad de establecer una conexión online, sería crear un bloque de memoría compartido (la ya mencionada técnica de 'Shared Memory' en Inglés) mediante la clase
System.IO.MemoryMappedFiles.MemoryMappedFile, de la cual tienes ejemplos oficiales disponibles en microsoft.docs, y otros muchos en la WWW en general.
De lo contrario, lo recomendable, y dado que el propósito sería evitar depender de que la ventana tenga activo el foco de entrada, sería utilizar la función nativa
SendMessage (o
PostMessage, según cómo lo quieras hacer) junto al mensaje de ventana
WM_SETTEXT, logicamente antes de poder enviar el mensaje primero debes identificar la ventana (el control) al que le quieres enviar el mensaje (el texto a insertar). De nuevo no hace falta mencionar que tienes ejemplos (miles de ellos) en la WWW. Y si necesita enviar cualquier otra cosa que no sea texto, es decir, si lo que quieres es simular una tecla o una combinación de teclas, entonces debes usar el mensaje de ventana
WM_KEYDOWN +
WM_KEYUP (quizás también
WM_SYSKEYDOWN +
WM_SYSKEYDOWN, dependiendo de las teclas específicas que necesites simular). Repito, esta metodología no requiere tener activo el foco de entrada de la ventana objetivo.
Como alternativa, y esto ya si que tendríapor requisito depender del foco de entrada de la ventana, usarías la API nativa de
RAW_INPUT, lo que viene a ser la función nativa
SendInput, vaya, lo cual es bastante tedioso de implementar en su totalidad, pero efectivo, y ya existen ejemplos que puedes utilizar, de hecho, si te quieres ahorrar tiempo en declarar decenas de P/Invokes, estructuras nativas y demás, entonces tienes a tu disposición librerías como
Windows Input Simulator:
La API de Microsoft UI Automation (en la librería de clases de WPF), cómo ya han mencionado también, sería otra opción, tiene sus ventajas (sobre todo el gran nivel de abstracción que le otorga un manejo facil e intuitivo) y también sus desventajas (es muy, muy lento en comparación, para iterar el árbol visual o visual tree de una aplicación), aparte, solo soporta aplicaciones que sean accesibles por el mismo, lo cual hoy por hoy por lo general la mayoría lo son, pero es importante mencionarlo ya que no es 100% compatible con todo tipo de ventanas, cómo si que lo es la API de Windows en su lugar.
En resumen, si no quieres depender del foco de entrada de la ventana objetivo, usa SendMessage/PostMessage junto a los mensajes de ventana ya mencionados, si no te importa depender del foco de entrada de la ventana, entonces usa SendInput (preferiblemente la implementación de SendInput de la librería ya mencionada).
Saludos.