Hi, guys
I found UIA BoundingRectangle property value is not correct in latest win os.
I wrote a test app to print desktop's BoundingRectangle, result on OS 9860 is 1536x864, but actual resolution is 1920x1080.
Any idea?
Here is the code, pretty simple:
CoInitialize(NULL);
IUIAutomation2* _pUIAutomation = NULL;
CoCreateInstance(CLSID_CUIAutomation8, NULL, CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&_pUIAutomation));
IUIAutomationElement* rootElement = NULL;
_pUIAutomation->GetRootElement(&rootElement);
//use get_CurrentBoundingRectangle
RECT rectBoundingRectangle;
rootElement->get_CurrentBoundingRectangle(&rectBoundingRectangle);
printf("[get_CurrentBoundingRectangle] left: %d, top: %d, right: %d, bottom:%d\n",
rectBoundingRectangle.left, rectBoundingRectangle.top, rectBoundingRectangle.right, rectBoundingRectangle.bottom);
//use GetCurrentPropertyValue
VARIANT boundingRectangle;
RECT rectBoundingRectangle2;
VariantInit(&boundingRectangle);
rootElement->GetCurrentPropertyValue(UIA_BoundingRectanglePropertyId, &boundingRectangle);
_pUIAutomation->VariantToRect(boundingRectangle, &rectBoundingRectangle2);
printf("[GetCurrentPropertyValue] left: %d, top: %d, right: %d, bottom:%d\n",
rectBoundingRectangle.left, rectBoundingRectangle.top, rectBoundingRectangle.right, rectBoundingRectangle.bottom);
VariantClear(&boundingRectangle);Update:
I found Inspect.exe can get the correct BoundingRectangle, this is wired, because Inpect.exe is also using native UIA.
Here is the screenshot:
Update2:
When I uninstall the Intel Graphic driver and using MS Basic display driver, My test app can get the correct BoundingRectangle value. But I want it work with Intel Graphic driver. Since Inspect.exe can get the right value with Intel driver, I think there should be some way to walk around this issue.
Any suggestion is welcome, and anyone know where I can get the source code of Inpect.exe, so I can found out how Inpect.exe handle this issue.