Показать полную графическую версию : [Архив - Часть 3] AutoIt скрипты .:[общие вопросы]:.
Maza Faka
21-07-2008, 10:32
Creat0R
Вот такой вот извращённый метод
Отличная идея! :)
HORRIBLE
23-07-2008, 13:20
Всем привет.
У меня вот возник вопрос, можно распознать защитную картинку и получить код который на ней написан?
вот, к примеру картинка:
Или это нереальная задача?
спасибо
Привет
У мня вопрос как сделать подсчет строчек до определенного символа "?"
пример:
?
1 строчка
2 строчка
3 строчка
? (здесь останавливается и выводит сообщение здесь 3 строчки) далее
1 строчка
2 строчка
3 строчка
4 строчка
? (здесь останавливается и выводит сообщение а здесь 4 строчки)
1 строчка
2 строчка
3 строчка
4 строчка
5 строчка
6 строчка
? (здесь останавливается и выводит сообщение а здесь 6 строчки)
и.т.д
HORRIBLE
23-07-2008, 14:48
Drsmog,
Можно так:
#include <file.au3>
$sumbol = "?"
$y = 0
Dim $aRecords
If Not _FileReadToArray("error.log",$aRecords) Then
MsgBox(4096,"Error", " Error reading log to Array error:" & @error)
Exit
EndIf
For $x = 1 to $aRecords[0]
$y += 1
$result = StringCompare($aRecords[$x], $sumbol, 1)
If $result = 0 then
MsgBox(0,"","До искомого символа "&($y-1)&" строк")
$y = 0
endif
Next
HORRIBLE, можно распознать защитную картинку и получить код который на ней написан? »
См. в сторону OCR, на оф. сайте приводили много примеров.
Drsmog, как сделать подсчет строчек до определенного символа "?" »
$hFileOpen = FileOpen("File.txt", 0)
If $hFileOpen = -1 Then Exit
$iCounter = 1
While 1
$sReadLine = FileReadLine($hFileOpen)
If @error <> 0 Then ExitLoop
If $sReadLine = "?" Then
MsgBox(64, "Counter", "Насчитано строк: " & $iCounter)
$iCounter = 0
Else
$iCounter += 1
EndIf
WEnd
FileClose($hFileOpen)
HORRIBLE
23-07-2008, 17:37
Creat0R,
а что такое OCR??? спасибо за направление)
HORRIBLE, что такое OCR? »
OCR - Optical Character Recognition :)
Оптическое распознавание символов (http://ru.wikipedia.org/wiki/Оптическое_распознавание_символов)
Maza Faka
23-07-2008, 18:09
Creat0R
как сделать подсчет строчек до определенного символа "?"
Помнится мы такие простые задачки решали с помощью батников :)
Еще вариант - с точки зрения блоков текста, оптимизирован по скорости чтения файла:
З.Ы. обойтись без RegExp стоило усилий :)
$sFile = "C:\File.Txt"
$sChar = "?" & @CRLF
MsgBox(64, "Counter", "Насчитано строк в блоке 1: " & _FileBlockLines($sFile, $sChar))
MsgBox(64, "Counter", "Насчитано строк в блоке 2: " & _FileBlockLines($sFile, $sChar, 2))
MsgBox(64, "Counter", "Насчитано строк в блоке 3: " & _FileBlockLines($sFile, $sChar, 3))
MsgBox(64, "Counter", "Насчитано строк в блоке 4: " & _FileBlockLines($sFile, $sChar, 4))
MsgBox(64, "Counter", "Насчитано строк в блоке 5: " & _FileBlockLines($sFile, $sChar, 5))
Func _FileBlockLines($sFile, $sDelim, $iBlock = 1)
Local Const $iBufSize = 16384 ; размер буфера
Local $iFindLen=StringLen($sDelim) ; длина разделителя
Local $iLines=0, $iNum=0 ; счетчики
; Открытие файла
Local $hFile = FileOpen($sFile, 0)
If $hFile = -1 Then Return SetError(1,0,-1)
; Цикл поблочного чтения из файла
While 1
$sRead = FileRead($hFile, $iBufSize)
If @error Then ExitLoop
; Цикл подсчета блоков и строк в блоке
Do
$iFind = StringInStr($sRead, $sDelim)
If $iFind Then
StringReplace(StringLeft($sRead, $iFind-1), @LF, "")
$iLines += @extended
$iNum +=1
; Если номер искомого блока, то Выход
If $iNum=$iBlock Then ExitLoop 2
; Инициализация для следующего блока
$sRead = StringTrimLeft($sRead, $iFind+$iFindLen)
$iLines = 0
Else
StringReplace($sRead, @LF, "")
$iLines += @extended
EndIf
Until $iFind=0
WEnd
If $sRead="" Then $iLines=-1
FileClose($hFile)
Return $iLines
EndFunc
HORRIBLE
24-07-2008, 12:16
как в созданное GUI поместить картинку находящююся в интернете, к примеру по адресу (http://forum.oszone.net/attachment.php?attachmentid=13664&d=1216804832) ?
Maza Faka
24-07-2008, 16:34
HORRIBLE
как в созданное GUI поместить картинку находящююся в интернете
Загрузить в компьютер с помощью функции InetGet(), а затем создать контрол GuiCtrlCreatePic() с использованием этой картинки.
У меня есть один наболевший вопрос. как можно сделать так, чтобы изменился размер таскбара с одной в 2 строки причем квикланч был сверху, а открытые приложения снизу?
Помогите пожалуста!!!
Мне надо использовать несколько готовых заготовк написаных на VBS. По вот этому примеру (http://forum.ru-board.com/topic.cgi?forum=5&topic=17705&start=860#) получилось:
$id_W=RegRead ("HKLM\SOFTWARE\Microsoft\Internet Explorer\Registration","DigitalProductId")
MsgBox(0,"", _GetKeyVBS($id_W))
Func _GetKeyVBS($key)
Local $Code = ""
$Code &= 'Function GetKey(rpk)' & @LF
$Code &= 'Const rpkOffset=52' & @LF
$Code &= 'i=28' & @LF
$Code &= 'szPossibleChars="BCDFGHJKMPQRTVWXY2346789"' & @LF
$Code &= 'Do ' & @LF
$Code &= 'dwAccumulator=0 ' & @LF
$Code &= 'j=14' & @LF
$Code &= 'Do ' & @LF
$Code &= 'dwAccumulator=dwAccumulator*256 ' & @LF
$Code &= 'dwAccumulator=rpk(j+rpkOffset)+dwAccumulator' & @LF
$Code &= 'rpk(j+rpkOffset)=(dwAccumulator\24) and 255 ' & @LF
$Code &= 'dwAccumulator=dwAccumulator Mod 24' & @LF
$Code &= 'j=j-1' & @LF
$Code &= 'Loop While j>=0' & @LF
$Code &= 'i=i-1 ' & @LF
$Code &= 'szProductKey=mid(szPossibleChars,dwAccumulator+1,1 )&szProductKey' & @LF
$Code &= 'if (((29-i) Mod 6)=0) and (i<>-1) then ' & @LF
$Code &= 'i=i-1 ' & @LF
$Code &= 'szProductKey="-"&szProductKey' & @LF
$Code &= 'End If' & @LF
$Code &= 'Loop While i>=0' & @LF
$Code &= 'GetKey=szProductKey' & @LF
$Code &= 'End Function'
MsgBox(0,'', $Code)
Local $VbsObj = ObjCreate("ScriptControl")
If @error Then Return SetError(1, 0, -1)
$VbsObj.Language = "vbscript"
$VbsObj.AddCode($Code)
Local $Ret = $VbsObj.Run("GetKey ",$key)
If $Ret = 0 Then Return SetError(0, 0, 0)
Return $Ret
EndFunc
но выдет ошибку:
D:\auto_it\office.au3 (48) : ==> The requested action with this object has failed.:
$VbsObj.Run("GetKey ","")
$VbsObj.Run("GetKey ","")^ ERROR
DImaN!, как можно сделать так, чтобы изменился размер таскбара с одной в 2 строки причем квикланч был сверху, а открытые приложения снизу? »а разве возможно, чтобы AppBar-приложения размещались иначе, чем вдоль панели (горизонтально)? :unsure:
TimAlex, выдет ошибку»
- VBScript и AutoIT по разному считывают REG_BINARY параметры реестра;
- строковая переменная всегда =0 (смотри закомментированную строку);
- имя функции в "$VbsObj.Run" должно быть без пробелов
$oWshShell = ObjCreate("WScript.Shell")
$id_W = $oWshShell.RegRead("HKLM\SOFTWARE\Microsoft\Internet Explorer\Registration\DigitalProductId")
MsgBox(0,"", _GetKeyVBS($id_W))
Func _GetKeyVBS($key)
Local $Code = ""
$Code &= 'Function GetKey(rpk)' & @LF
$Code &= 'Const rpkOffset=52' & @LF
$Code &= 'i=28' & @LF
$Code &= 'szPossibleChars="BCDFGHJKMPQRTVWXY2346789"' & @LF
$Code &= 'Do' & @LF
$Code &= 'dwAccumulator=0' & @LF
$Code &= 'j=14' & @LF
$Code &= 'Do' & @LF
$Code &= 'dwAccumulator=dwAccumulator*256' & @LF
$Code &= 'dwAccumulator=rpk(j+rpkOffset)+dwAccumulator' & @LF
$Code &= 'rpk(j+rpkOffset)=(dwAccumulator\24) and 255' & @LF
$Code &= 'dwAccumulator=dwAccumulator Mod 24' & @LF
$Code &= 'j=j-1' & @LF
$Code &= 'Loop While j>=0' & @LF
$Code &= 'i=i-1' & @LF
$Code &= 'szProductKey=mid(szPossibleChars,dwAccumulator+1,1 )&szProductKey' & @LF
$Code &= 'if (((29-i) Mod 6)=0) and (i<>-1) then' & @LF
$Code &= 'i=i-1' & @LF
$Code &= 'szProductKey="-"&szProductKey' & @LF
$Code &= 'End If' & @LF
$Code &= 'Loop While i>=0' & @LF
$Code &= 'GetKey=szProductKey' & @LF
$Code &= 'End Function'
MsgBox(0,'', $Code)
Local $VbsObj = ObjCreate("ScriptControl")
If @error Then Return SetError(1, 0, -1)
$VbsObj.Language = "vbscript"
$VbsObj.AddCode($Code)
Local $Ret = $VbsObj.Run("GetKey",$key)
; If $Ret = 0 Then Return SetError(0, 0, 0)
Return $Ret
EndFunc
Извеняюсь за непонятную постановку моей проблемы. Я имел в виду каким образ можно сделать так, чтобы панели QuickLaunch и AppBar размещались не как на этом скриншоте:
http://s48.radikal.ru/i119/0807/1b/1894ffa33572.jpg,
а как на следующем:
http://s39.radikal.ru/i083/0807/7b/1847871ea666.jpg
если учесть то, что изначально TaskBar отображается только в одну строку и без QuickLainch-а
DImaN!
вот блин, не знал что так можно... :)
AFAIK программно это не реализовать, так можно менять только "Закрепление" и AutoHide, остальное придется автоматизацией кликов и перетаскиваний, тут основная проблема - определение актуальных координат... Если универсальность не требуется (первоначальные настройки всегда одинаковые), то все просто. Вот скрипт, который я сгенерил в AU3Record из комплекта AutoIT и слегка подредактировал:Opt("WinWaitDelay",100)
Opt("WinTitleMatchMode",4)
Opt("WinDetectHiddenText",1)
Opt("MouseCoordMode",0)
WinWait("classname=Shell_TrayWnd","")
If Not WinActive("classname=Shell_TrayWnd","") Then WinActivate("classname=Shell_TrayWnd","")
WinWaitActive("classname=Shell_TrayWnd","")
; Расширил таскбар с одной до двух строк
MouseMove(397,2,0)
MouseDown("left")
MouseMove(397,-36,0)
MouseUp("left")
; Пауза для применения новых настроек
Sleep(3000)
; Опустил QuickLaunch вниз
MouseMove(121,32,0)
MouseDown("left")
MouseMove(138,63)
MouseUp("left")
amel27, Спасибо огромное! Я немного подкорректировал и получилось именно то, что мне нужно. Только вот можете подсказать, где можно скачать саму тулу AU3Record, потому что у меня при инсталле самого AutoIT3 данного приложения в комплекте не было...
где можно скачать саму тулу AU3Record »идет в комплекте SciTE (http://www.autoitscript.com/autoit3/scite/downloads.shtml)
Можете подсказать, возможно ли при помощт AutoIt реализовать сохранение выполненных действий в отдельный файл. Т.е. просто пример: написан скрипт, в котором открывается программа и выполняются определенные действия с контролами (клики по контролам, открытия комбо-боксов, ввод текста и т.п.). Нужно чтобы все эти действия сохранялись в отдельный txt (log) файл в виде "действие - контрол"...
Maza Faka
31-07-2008, 18:36
DImaN!
написан скрипт, в котором открывается программа
Программа написанная на AutoIt-е?
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.