Microsoft UIAutomation в Rust - PullRequest
       6

Microsoft UIAutomation в Rust

0 голосов
/ 08 марта 2020

Я пытаюсь использовать MS UIAutomation в моем проекте Rust windows. Я узнал только https://lib.rs/install/uiautomationcore-sys

Но нет документации о том, как его использовать.

Моя цель - получить позиции кнопок панели задач на панели задач Windows. Что-то вроде в проекте PowerToys :

  winrt::com_ptr<IUIAutomationElementArray> elements;
  winrt::com_ptr<IUIAutomationElement> child;
  ...
  if (VARIANT var_rect; child->GetCurrentPropertyValue(UIA_BoundingRectanglePropertyId, &var_rect) >= 0) {
  if (var_rect.vt == (VT_R8 | VT_ARRAY)) {
    LONG pos;
    double value;
    pos = 0; SafeArrayGetElement(var_rect.parray, &pos, &value);
    button.x = (long)value;
    pos = 1; SafeArrayGetElement(var_rect.parray, &pos, &value);
    button.y = (long)value;
    pos = 2; SafeArrayGetElement(var_rect.parray, &pos, &value);
    button.width = (long)value;
    pos = 3; SafeArrayGetElement(var_rect.parray, &pos, &value);
    button.height = (long)value;
  }

Или в проекте FastWindowSwitcher:

  VARIANT propertyValue = { 0 };
  HRESULT hr = p_element.GetCurrentPropertyValue(UIA_BoundingRectanglePropertyId, &propertyValue);
  ...
  double* data = nullptr;
  hr = SafeArrayAccessData(propertyValue.parray, (void**)&data);
  ...
  QRect rectangle(data[0], data[1], data[2], data[3]);
  ...
  return rectangle;

Может быть, кто-нибудь знает или есть лучший путь? Спасибо!

...