我正在研究一個Windows 7 C++程序,它將捕獲屏幕上的文本。微軟的UIAutomation框架似乎是實現它的最好方式。除了一件事情 - 我使用框架的函數來獲取文本時,它似乎只返回了第一百萬個字符。這可能看起來很多,但嘗試列出硬盤驅動器上的每個文件,並且它很快就會達到數百萬字符的範圍。我嘗試了兩種不同的方式來獲取文本,並且兩種方式都返回相同的內容,並且都限制在第一百萬個字符。從UIAutomation呼叫返回的數據的最大長度
下面的代碼示例:
IUIAutomationElement *element = findElement();
VARIANT v;
VariantInit(&v);
element->GetCurrentPropertyValue(UIA_LegacyIAccessibleValuePropertyId, &v);
BSTR tempString = V_BSTR(&v);
一切都會按計劃當文本的數量少於一百萬個字符長,但在該限制任何被截斷。
我的假設,即有可能發生問題兩個地方。首先,VARIANT可能只能容納一百萬個字符,但這似乎是不正確的,這基於我所瞭解的微軟VARIANT的實現。第二個是GetCurrentPropertyValue()調用只返回多達一百萬個字符。這是相當糟糕的,因爲我沒有看到它的方式。
請注意,我也做這個使用IUIAutomationValuePattern和IUIAutomationTextRange,但它得到了相同的結果。
有什麼想法?