ViSiToR
Silver Member | Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору vicbox777 22:19 27-04-2009 Цитата: Имеется программа для закачки файлов USDownloder | Я давно тоже возился с ней, получить данные вминяемыми методам так и не удалось. Пришлось прибегать к извращениям - немного инфы (и то не надёжно) можно получать используя OCR (через COM-объект «MODI.Document», требует Office 2003): Код: #include <Array.au3> #include <ScreenCapture.au3> ;Константы для _OCRGet() Global Const $miLANG_ENGLISH = 9 Global Const $miLANG_RUSSIAN = 25 ;Задаём заголовок окна для USD и путь к временному файлу для захваченного изображения $USD_Title = "[REGEXPTITLE:Universal Share Downloader.*;CLASS:TForm1]" $sCapture_File = @TempDir & "\USD_OCR_Tmp.jpg" ;Если не найдено окно USD, выходим из скрипта, дальше продолжать нет смысла If Not WinExists($USD_Title) Then MsgBox(16, "Ошибка!", "Не найден USDownloader." & @LF & @LF & "OK ---> EXIT") Exit EndIf ;Обработчик COM-ошибок $oOCR_Error = ObjEvent("AutoIt.Error", "OCRErrFunc") ;Показываем/Активируем окно USD WinSetState($USD_Title, "", @SW_SHOW) WinActivate($USD_Title) ;Получаем уникальный идентификатор для элемента TPanel3 $TPanel_hWnd = ControlGetHandle($USD_Title, "", "[CLASSNN:TPanel3]") ;Получаем скрин элемента TPanel3 во временный файл _ScreenCapture_CaptureWnd($sCapture_File, $TPanel_hWnd) ;Получаем текст из скрина используя спец. функцию $aOCR_Array = _OCR_GetArray($sCapture_File, $miLANG_ENGLISH) ;Удаляем наш временный файл FileDelete($sCapture_File) ;Если получили массив с текстом, показываем его и отображаем нужные нам данные If IsArray($aOCR_Array) Then _ArrayDisplay($aOCR_Array) ;Элементы массива могут меняться в зависимости от содеражания текста в TPanel $sFileName = $aOCR_Array[4] $iFileSize = $aOCR_Array[6] If Not StringIsDigit(StringLeft($iFileSize, 2)) Then For $i = 1 To $aOCR_Array[0] If StringIsDigit(StringLeft($aOCR_Array[$i], 2)) Then $iFileSize = $aOCR_Array[$i] ExitLoop EndIf Next EndIf MsgBox(64, "Информация", "Имя файла: " & $sFileName & @LF & @LF & "Размер файла: " & $iFileSize & " MB") EndIf ;Функция для получения текста из файла-изображения используя COM-объект MODI.Document (OCR - Оптическое распознавание символов) ;!!! Требуется *корректно* установлены Office 2003 !!! Func _OCR_GetArray($sImageFile, $mi_Lang) Local $avRet_Array[1000], $oWord Local $miDoc = ObjCreate("MODI.Document") $miDoc.Create($sImageFile) If @error Then Return SetError(1) $miDoc.Ocr($mi_Lang, True, False) If @error Then Return SetError(2) For $oWord In $miDoc.Images(0).Layout.Words $avRet_Array[0] += 1 $avRet_Array[$avRet_Array[0]] = $oWord.Text Next ReDim $avRet_Array[$avRet_Array[0]+1] Return $avRet_Array EndFunc ;------------------------------ This is a COM Error handler -------------------------------- Func OCRErrFunc() Local $HexNumber = Hex($oOCR_Error.Number, 8) Msgbox(16, "COM Error Handler", "We intercepted a COM Error !" & @CRLF & @CRLF & _ "err.description is: " & @TAB & $oOCR_Error.Description & @CRLF & _ "err.windescription:" & @TAB & $oOCR_Error.WinDescription & @CRLF & _ "err.number is: " & @TAB & $HexNumber & @CRLF & _ "err.lastdllerror is: " & @TAB & $oOCR_Error.LastDllError & @CRLF & _ "err.scriptline is: " & @TAB & $oOCR_Error.ScriptLine & @CRLF & _ "err.source is: " & @TAB & $oOCR_Error.Source & @CRLF & _ "err.helpfile is: " & @TAB & $oOCR_Error.HelpFile & @CRLF & _ "err.helpcontext is: " & @TAB & $oOCR_Error.HelpContext) SetError(1) ; to check for after this function returns Endfunc |
---------- ViSiToR a.k.a CreatoR CreatoR это не ник, CreatoR это стиль жизни! |
|