ViSiToR
Silver Member | Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Цитата: кстати через OCR можно и на AutoIt попробовать | На моё же удивление, у меня получилось! Внимание: для того чтобы работал OCR (Optical Character Recognation), Требуется *корректно* установлены 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 = _OCRGet($sCapture_File, $miLANG_ENGLISH) ;Удаляем наш временный файл FileDelete($sCapture_File) ;Если получили массив с текстом, показываем его и отображаем нужные нам данные If IsArray($aOCR_Array) Then _ArrayDisplay($aOCR_Array) ;Элементы массива могут меняться в зависимости от содеражания текста в TPanel $sFileName = $aOCR_Array[10] $iFileSize = $aOCR_Array[12] MsgBox(64, "Информация", "Имя файла: " & $sFileName & @LF & @LF & "Размер файла: " & $iFileSize & " MB") EndIf ;Функция для получения текста из файла-изображения используя COM-объект MODI.Document (OCR - Оптическое распознавание символов) ;!!! Требуется *корректно* установлены Office 2003 !!! Func _OCRGet($sImageFile, $mi_Lang) Local $avRet_Array[1], $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 ReDim $avRet_Array[$avRet_Array[0]+1] $avRet_Array[$avRet_Array[0]] = $oWord.Text Next Return $avRet_Array EndFunc ;------------------------------ This is a COM Error handler -------------------------------- Func OCRErrFunc() $HexNumber=hex($oOCR_Error.number,8) Msgbox(0,"COM Error Test","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 это стиль жизни! |
|