2012-04-11 10 views

Respuesta

9

tratan con:

AutomationElement child = walker.GetFirstChild(el); 
System.Windows.Point p = child.GetClickablePoint(); 
Mouse.Move((int)p.X, (int)p.Y); 
Mouse.Click(MouseButton.Left); 

Enlaces:
AutomationElement.GetClickablePoint Method
Simulate mouse Enter/Move/Leave on WPF control without real mouse usage

Editar para hacer comentarios

Ver los siguientes enlaces:

Mouse.cs
NativeMethods.cs
Introduction to TestApi – Part 1: Input Injection APIs

+0

¿Qué debo hacer para obtener acceso a la clase Mouse? – Stacker

+0

http://longan.googlecode.com/svn-history/r87/trunk/Dtf/Dtf/Core/Mouse.cs –

+0

Voy a intentar esto, aunque creo que el simple hecho de hacer clic en xey hará que el problema del mouse no se da cuenta de lo que está haciendo clic para que el elemento no esté en la parte superior de la ventana y que el clic no esté en ninguna parte – Stacker

14

En lugar de enviar los eventos del ratón, puede Invoke a través de la InvokePattern así:

public void InvokeAutomationElement(AutomationElement automationElement) 
{ 
    var invokePattern = automationElement.GetCurrentPattern(InvokePattern.Pattern) as InvokePattern; 
    invokePattern.Invoke(); 
} 
+3

No todas las ventanas admiten el patrón Invoke – Max

+0

Esto es cierto, pero supongo que si puede hacer clic en él puede hacerlo con automatización (y sin hacer clic con el mouse). Si no es compatible con el patrón Invoke, probablemente sea compatible con 'SelectionItemPattern', por lo que puede' Seleccionar'. – Levi

+0

He visto ventanas que solo son compatibles con WindowPattern y TransformPattern. De la pregunta no puedo decir por qué se realiza el clic. Puede ser que Stacker quiera enfocar la ventana (solo una suposición). Por lo tanto, es posible que no haya actividad inmediata que vaya a "invocarse". – Max

2

si el control tiene un "ClickablePoint" que puede utilizar el código

  System.Windows.Point p = theButton.GetClickablePoint(); 
      AutoItX3Lib.AutoItX3Class au3; 
      au3 = new AutoItX3Lib.AutoItX3Class(); 
      au3.AutoItSetOption("MouseCoordMode", 0); 
      au3.MouseClick("LEFT", (int)p.X, (int)p.Y, 1, -1); 

donde AutoItX3Lib es la API de C# para AutoIt

Cuestiones relacionadas