PDA

Показать полную графическую версию : [Архив - Часть 3] AutoIt скрипты .:[общие вопросы]:.


Страниц : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 [38] 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78

Maza Faka
21-07-2008, 10:32
Creat0R

Вот такой вот извращённый метод

Отличная идея! :)

HORRIBLE
23-07-2008, 13:20
Всем привет.
У меня вот возник вопрос, можно распознать защитную картинку и получить код который на ней написан?
вот, к примеру картинка:
Или это нереальная задача?

спасибо

Drsmog
23-07-2008, 14:06
Привет

У мня вопрос как сделать подсчет строчек до определенного символа "?"

пример:

?
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

Creat0R
23-07-2008, 17:26
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??? спасибо за направление)

Creat0R
23-07-2008, 17:46
HORRIBLE, что такое OCR? »
OCR - Optical Character Recognition :)
Оптическое распознавание символов (http://ru.wikipedia.org/wiki/Оптическое_распознавание_символов)

Maza Faka
23-07-2008, 18:09
Creat0R

как сделать подсчет строчек до определенного символа "?"

Помнится мы такие простые задачки решали с помощью батников :)

amel27
24-07-2008, 11:34
Еще вариант - с точки зрения блоков текста, оптимизирован по скорости чтения файла:
З.Ы. обойтись без 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() с использованием этой картинки.

DImaN!
28-07-2008, 12:39
У меня есть один наболевший вопрос. как можно сделать так, чтобы изменился размер таскбара с одной в 2 строки причем квикланч был сверху, а открытые приложения снизу?

TimAlex
29-07-2008, 14:09
Помогите пожалуста!!!

Мне надо использовать несколько готовых заготовк написаных на 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

amel27
30-07-2008, 04:19
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

DImaN!
30-07-2008, 18:00
Извеняюсь за непонятную постановку моей проблемы. Я имел в виду каким образ можно сделать так, чтобы панели QuickLaunch и AppBar размещались не как на этом скриншоте:
http://s48.radikal.ru/i119/0807/1b/1894ffa33572.jpg,
а как на следующем:
http://s39.radikal.ru/i083/0807/7b/1847871ea666.jpg
если учесть то, что изначально TaskBar отображается только в одну строку и без QuickLainch-а

amel27
31-07-2008, 07:51
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")

DImaN!
31-07-2008, 10:28
amel27, Спасибо огромное! Я немного подкорректировал и получилось именно то, что мне нужно. Только вот можете подсказать, где можно скачать саму тулу AU3Record, потому что у меня при инсталле самого AutoIT3 данного приложения в комплекте не было...

amel27
31-07-2008, 12:03
где можно скачать саму тулу AU3Record »идет в комплекте SciTE (http://www.autoitscript.com/autoit3/scite/downloads.shtml)

DImaN!
31-07-2008, 17:50
Можете подсказать, возможно ли при помощт AutoIt реализовать сохранение выполненных действий в отдельный файл. Т.е. просто пример: написан скрипт, в котором открывается программа и выполняются определенные действия с контролами (клики по контролам, открытия комбо-боксов, ввод текста и т.п.). Нужно чтобы все эти действия сохранялись в отдельный txt (log) файл в виде "действие - контрол"...

Maza Faka
31-07-2008, 18:36
DImaN!
написан скрипт, в котором открывается программа
Программа написанная на AutoIt-е?




© OSzone.net 2001-2012