Я пытаюсь использовать 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;
Может быть, кто-нибудь знает или есть лучший путь? Спасибо!