Ru-Board.club
← Вернуться в раздел «Программы»

» AutoIT

Автор: U235
Дата сообщения: 04.02.2008 16:46
Раскладка клавиатуры - английская?
Автор: ViSiToR
Дата сообщения: 04.02.2008 21:51

Цитата:
Раскладка клавиатуры - английская?

Да, кстати, если русская раскладка по умолчанию, то естественно работать не будет... нужно тогда и для русской ставить хоткей:


Код: HotKeySet("^т", "MyFunc")
Автор: Kauffman
Дата сообщения: 05.02.2008 08:07
Жесть! Ступил! Попробовал "^т" и работает. Спасибо!
Автор: 1ac3124
Дата сообщения: 05.02.2008 11:06
Есть необходимость получать из USDownloader название файла и его размер прямо с формы, но AutoIt Windows Info не может определить имена компонентов, он видит только TPanel4....запихнув USDownloader.exe в Resourse Editor узнал что на TPanel4 мне нужен Label4 и Label6. Пытаюсь получить значение:
WinWaitActive("Universal Share Downloader v1.3.4.9")
$a = ControlGetText("Universal Share Downloader v1.3.4.9" , "", "Label4")
но переменная $a пустая в итоге.....что я не так делаю...может надо указать autoit? что Label4 находиться на TPanel4?????
Автор: Dm666
Дата сообщения: 05.02.2008 13:48
Добрый день!
Долго курил форум, узнал много нового... Но вопросы все равно остались. Вот главный:

Часто в процессе работы скрипта неплохо бы знать состояние сразу нескольких переменных на каждом этапе... Например, в VB, насколько я помню, можно было выполнять скрипт построчно и включить окошко с отображением значений нужных переменных. На редкость удобно было. Есть ли здесь что-то подобное?
Или втупую (как я и делаю )после каждой строки выводить MsgBox-ы? Нутром чую что можно проще и элегантнее, но не понимаю как...
Автор: ViSiToR
Дата сообщения: 05.02.2008 14:55
1ac3124

Цитата:
может надо указать autoit? что Label4 находиться на TPanel4?????

TPanel4 это класс элемента, нужно использовать как класс, но и это не работает - Однако идентификатор контрола удалось получить...


Код:
$Info_Data = ControlGetText("[REGEXPTITLE:Universal Share Downloader.*;CLASS:TForm1]", "", "[CLASSNN:TPanel4]")
$hWnd = ControlGetHandle("[REGEXPTITLE:Universal Share Downloader.*;CLASS:TForm1]", "", "[CLASSNN:TPanel4]")

ConsoleWrite($Info_Data & @LF & $hWnd)
Автор: Dm666
Дата сообщения: 05.02.2008 15:24
ViSiToR

Цитата:
Нашёл:

AutoEditDebugger
Graphical AutoIt Debugger
Yet Another ... Debugger
AutoMonIt - a way to monitor your own script


Вот спасибо тебе, добрый человек!
По ходу то что надо. Пошел разбираться...
Автор: XpycTMD
Дата сообщения: 06.02.2008 10:51
Добрый день!

Например есть окно Блокнота а рядом висит GUI сделаное в AutoIt.
Можно ли сделать так чтобы при сворачивание окна Блокнота GUI сделаное в AutoIt тоже сворачивалось?
Автор: Maza Faka
Дата сообщения: 06.02.2008 11:41
XpycTMD
Так?

Код: #include <GuiConstants.au3>

Run("notepad.exe")

WinWait("[Class:Notepad]")

$hWnd = WinGetHandle("[Class:Notepad]")

$hGui = GuiCreate("Test GUI", 300, 200, -1, -1, -1, -1, $hWnd)

GUISetState()

While 1
$msg = GUIGetMsg()
Switch $msg
Case -3
Exit
EndSwitch
WEnd
Автор: XpycTMD
Дата сообщения: 06.02.2008 12:13
Maza Faka

Да так большое спасибо. А чтобы они еще и закрывались вместе что сделать надо??
Автор: Maza Faka
Дата сообщения: 06.02.2008 13:08
XpycTMD

Цитата:
закрывались вместе

Можно так:

Код: #include <GuiConstants.au3>

Run("notepad.exe")

WinWait("[Class:Notepad]")

$hWnd = WinGetHandle("[Class:Notepad]")

$hGui = GuiCreate("Test GUI", 300, 200, -1, -1, -1, -1, $hWnd)

GUISetState()

While 1
If Not WinExists($hWnd) Then ExitLoop
$msg = GUIGetMsg()
Switch $msg
Case $GUI_EVENT_CLOSE
ExitLoop
EndSwitch
WEnd
Автор: XpycTMD
Дата сообщения: 06.02.2008 13:47
Maza Faka

Можно но я сделал немного по другому. Вот что получилось:

Код: #include <GuiConstants.au3>

If WinExists("[Class:Notepad]") Then
$hWnd = WinGetHandle("[Class:Notepad]")
Start($hWnd)
Else
Exit
EndIf

$hWnd = WinGetHandle("[Class:Notepad]")

$hGui = GuiCreate("Test GUI", 300, 200, -1, -1, -1, -1, $hWnd)

GUISetState(@SW_SHOW)

While WinExists($hWnd)
$msg = GUIGetMsg()
Switch $msg
Case $GUI_EVENT_CLOSE
Exit
EndSwitch
WEnd
Автор: Maza Faka
Дата сообщения: 06.02.2008 14:26

Цитата:
Вот что получилось:

И что же получилось?
Автор: ynbIpb
Дата сообщения: 06.02.2008 15:41
Привет всем.. вот второй день изучаю данную софтину. очень всё интересно. перечитал все 43 станицы форума.
есть пара вопросов:
Нужно мне при определённом условии перепрыгуть кусок кода.
идеально бы была команда "goto"
Но как вычитал в хелпе афтор её исключил. и говорит что можно с циклами чёта замутить. мне ума не хватает.

Код: ;Проверяем существует ли файл..
If FileExists(@ProgramFilesDir & "\programma\file.txt") Then
типа прыгаем на нужный нам код.    
EndIf
Автор: ViSiToR
Дата сообщения: 06.02.2008 16:32
ynbIpb

Цитата:
Нужно мне при определённом условии перепрыгуть кусок кода.

Можно циклом, а можно заключить последующий код (тот который нужно "перепрыгнуть") в функцию...


Код: ;Прыгаем с циклом

While 1
If FileExists(@ProgramFilesDir & "\programma\file.txt") Then
ExitLoop
EndIf


;Тут другой код который не нужно перепрыгивать

ExitLoop
WEnd


;Тут код кторый нам нужен

;--------------------------------

;Используем функцию


If FileExists(@ProgramFilesDir & "\programma\file.txt") Then
MyJumpFunc()
Else
;Тут другой код который не нужно перепрыгивать
EndIf

Func
MyJumpFunc()
;Тут код кторый нам нужен
EndFunc
Автор: ynbIpb
Дата сообщения: 06.02.2008 17:08
Вот это подробный ответ!
Спасибо. Щас всё буду пробовать.
а по поводу не знал как получить ответ я имел ввиду что не знал что можно через переменную $Return_Value
Автор: 1ac3124
Дата сообщения: 06.02.2008 18:05
кхм...плохо значит у мну дело....мжет есть какие др варианты получить имя и размер файла из USD????
Автор: ViSiToR
Дата сообщения: 06.02.2008 19:24
ynbIpb

Цитата:
не знал что можно через переменную $Return_Value

Почти каждая (встроенная) функция возвращает то или иное значение, которое можно вот таким образом помещать в переменные/массивы и т.д.

1ac3124

Цитата:
мжет есть какие др варианты получить имя и размер файла из USD?

Можно так (только для выделенной ссылки):


Код: #include <GUIListBox.au3>

$hWnd = ControlGetHandle("[REGEXPTITLE:Universal Share Downloader.*;CLASS:TForm1]", "", "[CLASSNN:TListBox1]")

$iIndex = _GUICtrlListBox_GetCurSel($hWnd)
$sSelected_URL = _GUICtrlListBox_GetText($hWnd, $iIndex)

$sFileName = StringRegExpReplace($sSelected_URL, "^.*/", "")
$iFileSize = InetGetSize($sSelected_URL)

MsgBox(64, "Информация", "Имя файла: " & $sFileName & @LF & @LF & "Размер файла: " & Round($iFileSize / 1024, 1) & " MB")
Автор: 1ac3124
Дата сообщения: 06.02.2008 19:38
спс ViSiToR, но ты мну не так понял чуть-чуть...имя и размер брать из правой панели

а на счет др.способов я имел ввиду, может вообще не автоит использовать??? вообщем проблема есть...идей по решению нет
Автор: ViSiToR
Дата сообщения: 06.02.2008 20:43
1ac3124

Цитата:
ты мну не так понял чуть-чуть.

Значит ты не точно обьяснил суть задачи .


Цитата:
на счет др.способов я имел ввиду, может вообще не автоит использовать?

Не думаю что в этом случае поможет что-то другое... хотя всё возможно. К примеру TranslateIT умеет получать любой текст на экране под курсором мышки, он не использует формы/элементы и т.п., возможно там используется система OCR или нечто похожее (кстати через OCR можно и на AutoIt попробовать).


Цитата:
проблема есть

Если не секрет, зачем нужно получать оттуда данные?
Автор: 1ac3124
Дата сообщения: 06.02.2008 20:58
да собсно проблема очпроста..нужна резидентная программ, которая будет скаченный файл из ycд заливать на другой сервер....тобишь передавать размер и имя в другую программу (размер чтобы выбрать аккаунт на который лить)
Автор: NIKZZZZ
Дата сообщения: 06.02.2008 21:22
1ac3124

Цитата:
мжет есть какие др варианты получить имя и размер файла из USD?

В принципе эту инфу можно вытащить из лога (USDownloader.log).
Автор: ViSiToR
Дата сообщения: 06.02.2008 22:05

Цитата:
кстати через 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
Автор: 1ac3124
Дата сообщения: 06.02.2008 22:17
кхм.....СБАСИБО...буду разбираться
Автор: XpycTMD
Дата сообщения: 07.02.2008 08:41
ViSiToR


Цитата:
Требуется *корректно* установлены Office 2003

А если у меня стоит 2007 (незнаю корректно не корректно не я устанавливал) работать будет??


Добавлено

Проверил выдает ошибку
Автор: ViSiToR
Дата сообщения: 07.02.2008 09:11
XpycTMD

Цитата:
выдает ошибку

Попробуй поставить паузу...


Код:     $miDoc.Create($sImageFile)
    If @error Then Return SetError(1)
    Sleep(500)
    $miDoc.Ocr($mi_Lang, True, False) ;Line 57
    If @error Then Return SetError(2)
Автор: XpycTMD
Дата сообщения: 07.02.2008 09:17
ViSiToR


Цитата:
Попробуй поставить паузу...


Все равно выдает ошибку. Может это из-за того что у меня стоит 2007 Офис
Автор: ViSiToR
Дата сообщения: 07.02.2008 09:40
XpycTMD

Цитата:
Может это из-за того что у меня стоит 2007 Офис

Не могу сказать, у меня 2003, нужно чтобы кто-то ещё попробовал, тот у кого 2007
Автор: XpycTMD
Дата сообщения: 07.02.2008 12:40
ViSiToR

Цитата:
Не могу сказать


Ладно с этим потом разберусь.

Есть еще вопрос а молжно ли сделать скриншот не всего экрана а только определенных координат???

Автор: NIKZZZZ
Дата сообщения: 07.02.2008 13:34
ViSiToR

Цитата:
Не могу сказать, у меня 2003, нужно чтобы кто-то ещё попробовал, тот у кого 2007

Выдает ошибку:

Код: The requested action with this object has failed.:
$miDoc.Ocr($mi_Lang, True, False)
$miDoc.Ocr($mi_Lang, True, False)^ ERROR

Страницы: 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192

Предыдущая тема: Quintura Search


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.