¿manipulando la simple Calculadora de Windows usando la API de win32 en c #?

Bueno, he hecho todo lo posible para ver ejemplos de código y publicaciones en toda la web sobre cómo hacer esto, pero no he podido avanzar en algunos meses utilizando la API de Windows para interactuar con otro progtwig que ya está corriendo. No soy el mejor progtwigdor y algo de esto me supera.

Lo más que he podido hacer es encontrar el proceso de la Calculadora y su controlador, y usarlo con SetWindowText para cambiar el título. Lo que realmente me gustaría aprender es cómo hacer que mi progtwig use Windows user32 (creo que esta debe ser la biblioteca correcta) para ingresar algunos números presionando los botones de la tecla numérica en la calculadora del software para hacer un cálculo simple.

Realmente no tengo un uso para este progtwig, es solo una meta que estoy tratando de alcanzar para aprender a usar la API de Windows más allá de mi nivel de principiante, ESPECIFICAMENTE en C #. Si nadie tiene el código para esto, o incluso si lo tiene, agradecería más algunas sugerencias de libros o recursos en la web que debería leer para aprender cómo hacerlo.

Como dice que está usando C #, debería usar el espacio de nombres System.Windows.Automation , cuyo propósito en la vida es permitirle controlar otros progtwigs a través de la automatización.

No dio detalles sobre lo que quería, pero aquí hay un progtwig que empuja “7” en la calculadora.

 using System.Windows.Automation; class Program { public static void Main() { var calcWindow = AutomationElement.RootElement.FindFirst( TreeScope.Children, new PropertyCondition(AutomationElement.NameProperty, "Calculator")); if (calcWindow == null) return; var sevenButton = calcWindow.FindFirst(TreeScope.Descendants, new PropertyCondition(AutomationElement.NameProperty, "7")); var invokePattern = sevenButton.GetCurrentPattern(InvokePattern.Pattern) as InvokePattern; invokePattern.Invoke(); } } 

Estás entrando en el divertido mundo de invocar plataformas (P / Invoke). Su mejor amigo en este mundo es http://www.pinvoke.net , que contiene las firmas de c # (y vb.net) para una gran cantidad de funciones de winapi.

Por ejemplo, SendMessage :

 [DllImport("user32.dll", CharSet = CharSet.Auto)] static extern IntPtr SendMessage(IntPtr hWnd, UInt32 Msg, IntPtr wParam, IntPtr lParam); 

y esta lista de códigos de mensaje .

Notará que todos los métodos p / invoke usan el atributo DllImport , que se encuentra en el System.Runtime.InteropServices nombres System.Runtime.InteropServices .

También tienen un modificador extern en la firma del método. Esto significa que el código se encuentra fuera del conjunto actual.

Luego puede usar SendMessage para enviar mensajes al controlador de la calculadora.

Como Jonathan mencionó en su comentario, debe usar Spy ++ para detectar qué mensajes se envían y que resultan en las acciones que desea replicar.

Para una buena medida, aquí hay un artículo con más información introductoria sobre P / Invoke.