Sha256: bb8b131d78544ec1f3ee3d419dd4ff2c5cc4be3b69e3902a4c1314616d7201a0

Contents?: true

Size: 1.95 KB

Versions: 3

Compression:

Stored size: 1.95 KB

Contents

#include "StdAfx.h"
#include "AutomationFinder.h"

AutomationFinder::AutomationFinder(AutomationElement^ automationElement)
{
	_automationElement = automationElement;
}

AutomationElementCollection^ AutomationFinder::Find(...array<Condition^>^ conditions)
{
	return _automationElement->FindAll(System::Windows::Automation::TreeScope::Subtree, SomethingOrEverything(conditions));
}

AutomationElement^ AutomationFinder::FindFirst(...array<Condition^>^ conditions)
{
	return _automationElement->FindFirst(System::Windows::Automation::TreeScope::Subtree, SomethingOrEverything(conditions));
}

AutomationElement^ AutomationFinder::Find(const FindInformation& findInformation)
{
  switch(findInformation.how) {
    case FindMethod::Id:
		{
      auto searchCondition = gcnew PropertyCondition(AutomationElement::AutomationIdProperty, gcnew String(findInformation.data.stringData));
      return FindAt(findInformation.index, searchCondition);
		}
    case FindMethod::Value:
		{
      auto searchCondition = gcnew PropertyCondition(AutomationElement::NameProperty, gcnew String(findInformation.data.stringData));
      return FindAt(findInformation.index, searchCondition);
		}
    case FindMethod::Focus:
      return AutomationElement::FocusedElement;
    case FindMethod::ScreenPoint:
			return AutomationElement::FromPoint(Point(findInformation.data.pointData[0], findInformation.data.pointData[1]));
    case FindMethod::Handle:
      return AutomationElement::FromHandle(IntPtr(findInformation.data.intData));
	}

  return nullptr;
}

AutomationElement^ AutomationFinder::FindAt(const int whichItem, ...array<Condition^>^ conditions)
{
	return Find(conditions)[whichItem];
}

Condition^ AutomationFinder::SomethingOrEverything(...array<Condition^>^ conditions)
{
	if( conditions->Length == 0 ) {
		return Condition::TrueCondition;
	} else if( conditions->Length == 1 ) {
		return conditions[0];
	}

	return gcnew AndCondition(conditions);
}

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
rautomation-0.9.2 ext/UiaDll/UiaDll/AutomationFinder.cpp
rautomation-0.9.1 ext/UiaDll/UiaDll/AutomationFinder.cpp
rautomation-0.9.0 ext/UiaDll/UiaDll/AutomationFinder.cpp