Estaba probando el código de ejemplo de seguimiento y, de alguna manera, cada vez que intenté ejecutarlo, aparecerá un error a continuación. Sin embargo, el proceso calc.exe se ejecutó con éxito, entonces, ¿cómo es posible que el identificador sea nulo o cero? Espero que entiendas lo que intento transmitir. ¡Gracias! El ejemplo de código es de http://www.mathpirate.net/log/tag/system-windows-automation/Automatización de la interfaz de usuario de Windows
Una excepción no controlada del tipo 'System.ArgumentException' produjo en UIAutomationClient.dll Información adicional: hwnd no puede ser IntPtr.Zero o nulo.
//Launches the Windows Calculator and gets the Main Window's Handle.
Process calculatorProcess = Process.Start("calc.exe");
calculatorProcess.WaitForInputIdle();
IntPtr calculatorWindowHandle = calculatorProcess.MainWindowHandle;
//Here I use a window handle to get an AutomationElement for a specific window.
AutomationElement calculatorElement = AutomationElement.FromHandle(calculatorWindowHandle);
if(calculatorElement == null)
{
throw new Exception("Uh-oh, couldn't find the calculator...");
}
//Walks some of the more interesting properties on the AutomationElement.
Console.WriteLine("--------Element");
Console.WriteLine("AutomationId: {0}", calculatorElement.Current.AutomationId);
Console.WriteLine("Name: {0}", calculatorElement.Current.Name);
Console.WriteLine("ClassName: {0}", calculatorElement.Current.ClassName);
Console.WriteLine("ControlType: {0}", calculatorElement.Current.ControlType.ProgrammaticName);
Console.WriteLine("IsEnabled: {0}", calculatorElement.Current.IsEnabled);
Console.WriteLine("IsOffscreen: {0}", calculatorElement.Current.IsOffscreen);
Console.WriteLine("ProcessId: {0}", calculatorElement.Current.ProcessId);
//Commented out because it requires another library reference. However, it's useful to see that this exists.
//Console.WriteLine("BoundingRectangle: {0}", calculatorElement.Current.BoundingRectangle);
Console.WriteLine("Supported Patterns:");
foreach (AutomationPattern supportedPattern in calculatorElement.GetSupportedPatterns())
{
Console.WriteLine("\t{0}", supportedPattern.ProgrammaticName);
}
Si usa White, tenga en cuenta que tiene algunos problemas; Los encontré bastante significativos en mi proyecto actual. Puede ver la lista de problemas de White en: http://white.codeplex.com/workitem/list/basic –
Por cierto, ¿es esta una idea recomendada para usar la Automatización de UI con fines de monitoreo? Tengo una aplicación de terceros en la que los valores que quiero monitorear y en función de los valores, me gustaría realizar algunas acciones, es decir, acciones de IU, hacer clic en un botón, cambiar los campos de texto, etc. En cuanto a los valores de monitoreo, ¿Tengo que controlar individualmente cada control? Gracias! – user303907