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

» AutoIT

Автор: Tipulatoid
Дата сообщения: 28.09.2008 07:19
Стоит задача выдирать инфу из бинарных файлов. Скажите, существующий функционал AutoIt v3.2.12.1 достаточен для этого, или даже не пытаться разбираться?
Автор: Maza Faka
Дата сообщения: 28.09.2008 08:16

Цитата:
или даже не пытаться разбираться?

Ну почему же, используй функцию FileOpen() с бинарным режимом 16

Код:
FileOpen("test.exe", 16)
Автор: Tipulatoid
Дата сообщения: 28.09.2008 09:22
Maza Faka
Спасибо. Еще вопрос - вроде простой, да чего-то не соображу Имею массив
Код: Dim $TeamsCoeff [6][18] = [[1.4473, 2.7075, 0.4507, 6.0076, 45.741, 0.5684, 105.0674, 1.725, 2.0765, 1.412, 0.7404, 0.1481, 0.0001, 0, 0.1667, 20.4267, 7.6133, 0.6942],[1.3948, 2.6626, 0.4524, 5.885, 45.7443, 0.5686, 104.9644, 1.7249, 2.0753, 1.4096, 0.7328, 0.1481, 0.0001, 0, 0.1667, 20.2735, 7.6133, 0.6913],[1.5283, 2.777, 0.4477, 6.2032, 45.7304, 0.5681, 105.2266, 1.7248, 2.0782, 1.4157, 0.7522, 0.1481, 0.0001, 0, 0.165, 20.6769, 7.6133, 0.6992],[1.3068, 2.5877, 0.4551, 5.6858, 45.7453, 0.5688, 104.7925, 1.7247, 2.0734, 1.3576, 0.72, 0.1481, 0.0001, 0, 0.1683, 20.0291, 7.6133, 0.6867],[0.8328, 2.1866, 0.4664, 4.6886, 45.6967, 0.5691, 103.8754, 1.7216, 2.0634, 1.3367, 0.6521, 0.1481, 0.0001, 0, 0.1733, 18.8615, 7.6133, 0.6667],[0.1768, 1.6465, 0.4704, 3.5005, 45.4317, 0.5672, 102.6325, 1.7101, 2.0497, 1.2623, 0.56, 0.1481, 0.0001, 0, 0.175, 17.6818, 7.6133, 0.6534]]
_arrayDisplay ($TeamsCoeff)
Автор: Leagnus
Дата сообщения: 28.09.2008 09:40
Интересно, можно ли на AutoIt сделать такой твикер, как Neo Utilities. Или игра не стоит свеч? В настройке системы пользуюсь целым набором скриптов, в т.ч. и твикером – хотелось бы объединить всё в одном фейсе, но никак эту мечту не реализую... XP Tweaker, например, на sourceforge.net есть в cpp исходниках, Remote Administration Suite тоже вроде интересный проект (хотя его уже больше года никто не толкает дальше), но фейса лично мне больше нравится у Neo Utilities.
Автор: Maza Faka
Дата сообщения: 28.09.2008 10:40
Tipulatoid

Цитата:
Требуется по каждой колонке выбрать максимальное значение, записать их в массив $TeamsCoeffMax[1][18]

Можно так:

Код:
#include <Array.au3>

Dim $TeamsCoeff[6][18] = [[1.4473, 2.7075, 0.4507, 6.0076, 45.741, 0.5684, 105.0674, 1.725, 2.0765, 1.412, 0.7404, 0.1481, 0.0001, 0, 0.1667, 20.4267, 7.6133, 0.6942],[1.3948, 2.6626, 0.4524, 5.885, 45.7443, 0.5686, 104.9644, 1.7249, 2.0753, 1.4096, 0.7328, 0.1481, 0.0001, 0, 0.1667, 20.2735, 7.6133, 0.6913],[1.5283, 2.777, 0.4477, 6.2032, 45.7304, 0.5681, 105.2266, 1.7248, 2.0782, 1.4157, 0.7522, 0.1481, 0.0001, 0, 0.165, 20.6769, 7.6133, 0.6992],[1.3068, 2.5877, 0.4551, 5.6858, 45.7453, 0.5688, 104.7925, 1.7247, 2.0734, 1.3576, 0.72, 0.1481, 0.0001, 0, 0.1683, 20.0291, 7.6133, 0.6867],[0.8328, 2.1866, 0.4664, 4.6886, 45.6967, 0.5691, 103.8754, 1.7216, 2.0634, 1.3367, 0.6521, 0.1481, 0.0001, 0, 0.1733, 18.8615, 7.6133, 0.6667],[0.1768, 1.6465, 0.4704, 3.5005, 45.4317, 0.5672, 102.6325, 1.7101, 2.0497, 1.2623, 0.56, 0.1481, 0.0001, 0, 0.175, 17.6818, 7.6133, 0.6534]]

Dim $TeamsCoeffMax[1][18]

For $i = 0 To UBound($TeamsCoeff, 2) - 1
    $iMax = 0
    For $j = 0 To UBound($TeamsCoeff, 1) - 1
        If $TeamsCoeff[$j][$i] > $iMax Then $iMax = $TeamsCoeff[$j][$i]
        $TeamsCoeffMax[0][$i] = $iMax
    Next
    ConsoleWrite("!> Max value vor column #" & $i + 1 & ": " & $iMax & @LF)
Next

_ArrayDisplay($TeamsCoeffMax)
Автор: Tipulatoid
Дата сообщения: 28.09.2008 11:10
Maza Faka

Цитата:
Не понял.

Требуется теперь создать массив $TeamsCoeffDeviation[6][18], где рассчитать:
в нулевой колонке
1,5283 (макс. значение нулевой колонки) - 1,4473
1,5283-1,3948
1,5283-1,5283
1,5283-1,3068
1,5283-0,8328
1,5283-0,1768
в первой колонке
2,777(макс. значение первой колонки)-2,7075
2,777-2,6626
2,777-2,777
2,777-2,5877
2,777-2,1866
2,777-1,6465
и т.д.
Автор: Maza Faka
Дата сообщения: 28.09.2008 11:35
Tipulatoid
Просто добавь ещё один цикл:

Код:
#include <Array.au3>

Dim $TeamsCoeff[6][18] = [[1.4473, 2.7075, 0.4507, 6.0076, 45.741, 0.5684, 105.0674, 1.725, 2.0765, 1.412, 0.7404, 0.1481, 0.0001, 0, 0.1667, 20.4267, 7.6133, 0.6942],[1.3948, 2.6626, 0.4524, 5.885, 45.7443, 0.5686, 104.9644, 1.7249, 2.0753, 1.4096, 0.7328, 0.1481, 0.0001, 0, 0.1667, 20.2735, 7.6133, 0.6913],[1.5283, 2.777, 0.4477, 6.2032, 45.7304, 0.5681, 105.2266, 1.7248, 2.0782, 1.4157, 0.7522, 0.1481, 0.0001, 0, 0.165, 20.6769, 7.6133, 0.6992],[1.3068, 2.5877, 0.4551, 5.6858, 45.7453, 0.5688, 104.7925, 1.7247, 2.0734, 1.3576, 0.72, 0.1481, 0.0001, 0, 0.1683, 20.0291, 7.6133, 0.6867],[0.8328, 2.1866, 0.4664, 4.6886, 45.6967, 0.5691, 103.8754, 1.7216, 2.0634, 1.3367, 0.6521, 0.1481, 0.0001, 0, 0.1733, 18.8615, 7.6133, 0.6667],[0.1768, 1.6465, 0.4704, 3.5005, 45.4317, 0.5672, 102.6325, 1.7101, 2.0497, 1.2623, 0.56, 0.1481, 0.0001, 0, 0.175, 17.6818, 7.6133, 0.6534]]

Dim $TeamsCoeffMax[1][18]
Dim $TeamsCoeffDeviation[6][18]

For $i = 0 To UBound($TeamsCoeff, 2) - 1
    $iMax = 0
    For $j = 0 To UBound($TeamsCoeff, 1) - 1
        If $TeamsCoeff[$j][$i] > $iMax Then $iMax = $TeamsCoeff[$j][$i]
        $TeamsCoeffMax[0][$i] = $iMax
    Next
    
    ConsoleWrite("!> Max value vor column #" & $i + 1 & ": " & $iMax & @LF)
    
    For $j = 0 To UBound($TeamsCoeff, 1) - 1
        $TeamsCoeffDeviation[$j][$i] = $iMax - $TeamsCoeff[$j][$i]
    Next
Next

_ArrayDisplay($TeamsCoeffMax)
_ArrayDisplay($TeamsCoeffDeviation)
Автор: Hackproof
Дата сообщения: 28.09.2008 12:46
Maza Faka - где можно почитать интересные вещи про WMI? (Это на тему серийника HDD)
Я нарыл программу WMICodeCreator, ей можно получить нужный код на VB, а его уже поправить в au3, но там столько всего...
Автор: Maza Faka
Дата сообщения: 28.09.2008 13:26
Hackproof
Кратко здесь
Подробней здесь
Автор: ViSiToR
Дата сообщения: 28.09.2008 15:14
Hackproof 13:46 28-09-2008
Цитата:
где можно почитать интересные вещи про WMI?

Вот неплохое описание (кстати там-же есть отличная статья по использованию AutoItX), а также тема тут на руборде: Что такое WMI, как писать сценарии WMI.


Цитата:
нарыл программу WMICodeCreator, ей можно получить нужный код на VB

Нечто подобное на AutoIt'е: WMI ScriptOMatic tool for AutoIt
Автор: Tipulatoid
Дата сообщения: 28.09.2008 15:27
Maza Faka
еще раз спасибо. А как можно у всех элеметов массива, например такого Dim $arr[3] = [1#3, 2#4, 5#6] заменить все символы # на . (точку)
Автор: Maza Faka
Дата сообщения: 28.09.2008 15:32
ViSiToR

Цитата:
Вот неплохое описание

Спасибо!

Добавлено:
Tipulatoid

Цитата:
заменить все символы # на . (точку)

Наверное только перебирая все элементы в цикле:

Код: Dim $arr[3] = ["1#3", "2#4", "5#6"]

For $i = 0 To UBound($arr) - 1
$arr[$i] = StringReplace($arr[$i], "#", ".")
Next
Автор: gregaz
Дата сообщения: 29.09.2008 19:42
Подскажите , пожалуйста , оптимальный код преобразования текста массива :
Имеется массив с текстовыми строками .
Требуется изменить написание всех слов , длиной > 2 символов , с заглавной буквы
Автор: timsky
Дата сообщения: 29.09.2008 21:25
ViSiToR

Цитата:
Если я правильно понял, _IEAttach всего лишь возвращает объект окна по заданному свойству (hWnd в нашем случае) ?
Тогда можно попробовать ещё так:


Код:#include <IE.au3>

$sUniqueTitle = "~ _____ My Title _____ ~"

$hwnd = WinGetHandle($sUniqueTitle)

$account = _IEAttach($hwnd, 'hwnd')

If @error Then
$hwnd = WinGetHandle("[CLASS:IEFrame;REGEXPTITLE:.*?" & $sUniqueTitle & ".*?]")
$account = _IEAttach($hwnd, 'hwnd')

If @error Then
$hwnd = ControlGetHandle("[CLASS:IEFrame; REGEXPTITLE:.*?" & $sUniqueTitle & ".*?]", "", "Internet Explorer_Server1")
$account = _IEAttach($hwnd, 'hwnd')
EndIf
EndIf

Select
Case @error = 5
MsgBox (16,'Invalid Value', 'Can not access CL window!')
Case @error = 7
MsgBox (16,'No Match', 'Can not access CL window!' & @CRLF & "hwnd (Title) = " & WinGetTitle($hwnd))
EndSelect

MsgBox (64,'','OK?')

Разобрался. Дело было в том, что та софтина запускала от имени другого юзера в винде


Спасибо за помощь!
Автор: ViSiToR
Дата сообщения: 29.09.2008 23:08
gregaz 20:42 29-09-2008
Цитата:
Требуется изменить написание всех слов , длиной > 2 символов , с заглавной буквы

Так:


Код: #include <Array.au3>

$aWords_Arr = StringSplit("some word or other words", " ")

For $i = 1 To $aWords_Arr[0]
If StringLen($aWords_Arr[$i]) > 2 Then _
$aWords_Arr[$i] = StringUpper(StringLeft($aWords_Arr[$i], 1)) & StringTrimLeft($aWords_Arr[$i], 1)
Next

_ArrayDisplay($aWords_Arr)
Автор: gregaz
Дата сообщения: 30.09.2008 04:34
ViSiToR
Это действительно оптимум.
Мне как-то в голову не пришло разбитие на слова.
По- другому получалось сложновато.
Если можно , то с результатом в виде исходного массива строк (прошу для получения оптимума)
Наверное в цикле по строкам массива с исползованием _ArrayToString ??



Код: #include <Array.au3>

Dim $ar[2]=["some word or other words",'the elements of an array into a single string']
_ArrayDisplay($ar,'$ar')

For $ii=0 To UBound($ar)-1
    $aWords_Arr = StringSplit($ar[$ii],' ')
    For $i = 1 To $aWords_Arr[0]
     If StringLen($aWords_Arr[$i]) > 2 Then _
$aWords_Arr[$i] = StringUpper(StringLeft($aWords_Arr[$i], 1)) & StringTrimLeft($aWords_Arr[$i], 1)
    Next
    $ar[$ii]=_ArrayToString($aWords_Arr, ' ' ,1 )
Next

_ArrayDisplay($ar,'$ar')
Автор: Maza Faka
Дата сообщения: 30.09.2008 07:06
gregaz
Можно и так, во всяком случае будет быстрее:

Код: #include <Array.au3> ;Only for _ArrayDisplay

Dim $ar[2]=["some word or other words",'the elements of an array into a single string']
_ArrayDisplay($ar,'$ar')

For $i = 0 To UBound($ar) - 1
$aWords_Arr = StringSplit($ar[$i],' ')
$sString = ""

For $j = 1 To $aWords_Arr[0]
If StringLen($aWords_Arr[$j]) > 2 Then _
$sString &= StringUpper(StringLeft($aWords_Arr[$j], 1)) & StringTrimLeft($aWords_Arr[$j], 1) & Chr(32)
Next

$ar[$i] = StringTrimRight($sString, 1)
Next

_ArrayDisplay($ar, '$ar')
Автор: Hackproof
Дата сообщения: 30.09.2008 11:37
Укороченный пример из справки, оставлено только существенное.
Сервер.

Код: $Mainsocket=TCPListen($addr,$port)
Do
$ConnectedSocket = TCPAccept($Mainsocket)
Until $ConnectedSocket <> -1

$recv = TCPRecv( $ConnectedSocket, 2048 )
Автор: Maza Faka
Дата сообщения: 30.09.2008 12:54

Цитата:
олучается по одному соединению двухсторонню связь не сделать

Нет, клиент отправляет - сервер принимает.
Автор: gal7
Дата сообщения: 30.09.2008 14:58
Не подскажите почему у меня никак не работает реакция на события в IE?
Нужно вызывать функцию в ответ на клик в окне браузера, никак этого не могу добиться. Пробую так например:

Код:
ObjEvent ($IE, "IEEvent_", "HTMLElementEvents")
Func IEEvent_onclick()
msgbox(0, 1, 1)
EndFunc
Автор: gregaz
Дата сообщения: 30.09.2008 22:31
Maza Faka

Цитата:
Можно и так, во всяком случае будет быстрее:

Да , без использования функций массива будет быстрее .
И без лишних преобразований .
ViSiToR , Maza Faka , спасибо большое .
Автор: Tipulatoid
Дата сообщения: 01.10.2008 06:13
Опять детский вопрос про массивы. Имею следуюший $arr[2] = [цена+рынок1+рынок2, продукт1+15,2+15,6]
Требуется вызвать функцию, которая бы поменяла все "+" на "!"

Код: #include <Array.au3>
Dim $arr[2] = ["цена+рынок1+рынок2", "продукт1+15,2+15,6"]
_ArrayDisplay($arr)
_ReplaceSymbols ($arr, "+", "!")
_ArrayDisplay($arr) ; здесь выясняется что массив $arr не обновился

Func _ReplaceSymbols ($vremArray, $oldsymbol, $newsymbol)
_ArrayDisplay($vremArray)
For $i = 0 To UBound($vremArray) - 1
$vremArray[$i] = StringReplace($vremArray[$i], $oldsymbol, $newsymbol)
Next
_ArrayDisplay($vremArray)
EndFunc
Автор: Maza Faka
Дата сообщения: 01.10.2008 06:34
Tipulatoid

Цитата:
Итак, функция отрабатывает нормально, знаки меняет, но исходный массив $arr не обновляется

И правильно делает, что не обновляется Что возвращает функция по умолчанию?

Цитата:

Из справки:
Unlike built-in functions, user-defined functions return 0 unless another return value is specified

Другими словами, если ты специально не возвращаешь из функции никакого значения, то функция возвращает 0.


Цитата:

Из справки:
Arrays should be passed to user-defined functions using the ByRef keyword to avoid copying all the data in the array.



Код: #include <Array.au3>

Dim $arr[2] = ["цена+рынок1+рынок2", "продукт1+15,2+15,6"]
_ArrayDisplay($arr)
_ReplaceSymbols($arr, "+", "!")
_ArrayDisplay($arr)

Func _ReplaceSymbols(ByRef $vremArray, $oldsymbol, $newsymbol)
For $i = 0 To UBound($vremArray) - 1
$vremArray[$i] = StringReplace($vremArray[$i], $oldsymbol, $newsymbol)
Next
EndFunc
Автор: Tipulatoid
Дата сообщения: 01.10.2008 06:46
Maza Faka
Спасибо. Буду знать. Справка - она для людей разбирающихся или полуразбирающихся. В первый раз - сложновато. А второй вопрос? Тут, похоже рэгэкспы нужны, но тут для меня темный лес.
Автор: Maza Faka
Дата сообщения: 01.10.2008 07:03
Tipulatoid

Цитата:
А второй вопрос?


Код: #include <Array.au3>

Dim $arr[2] = ["цена++рынок1+рынок2+++", "продукт1+15,2+++++15,6++"]
_ArrayDisplay($arr)
_ReplaceSymbols($arr, "+", "!")
_ArrayDisplay($arr)

Func _ReplaceSymbols(ByRef $vremArray, $oldsymbol, $newsymbol)
For $i = 0 To UBound($vremArray) - 1
$vremArray[$i] = StringRegExpReplace($vremArray[$i], "\++", "+")
Next
EndFunc
Автор: Tipulatoid
Дата сообщения: 01.10.2008 07:19
Maza Faka
Автор: ViSiToR
Дата сообщения: 01.10.2008 08:55
Tipulatoid 07:46 01-10-2008
Цитата:
Справка - она для людей разбирающихся или полуразбирающихся. В первый раз - сложновато

Поддерживаю, я когда только начинал, то в справке всё казалось тёмным лесом, это теперь я другим очень часто справку читать советую (не всегда при простых задач), забывая что не все могут по справке разобраться.
Но всё же лезть в неё стоит, так, чтобы привыкнуть, со временем оно дойдёт

Maza Faka 08:03 01-10-2008
Цитата:
Не только, для начинающих она тоже очень полезна

Как ни странно, но тут бы больше подошло обратное, типа: “Даже для продвинутых заглядывание в справку бывает полезным занятием” .

Для начинающих она больше всего полезна, просто начинающие не видят этой пользы ...
Автор: Tipulatoid
Дата сообщения: 01.10.2008 10:50
Опять массивы

Код: #include <Array.au3>

Dim $anim[6] = ["жираф", "кот", "собака", "бегемот", "тигр", "лиса"]
Dim $StringsToFormat[2] = [3,5]
_ArrayDisplay ($anim)
_ArrayDisplay ($StringsToFormat)

_FormatStrings ($anim, $StringsToFormat)

Func _FormatStrings (ByRef $tmpArray, $StringsNums)
_ArrayDisplay ($tmpArray)
_ArrayDisplay ($StringsNums)
EndFunc
Автор: Maza Faka
Дата сообщения: 01.10.2008 12:32
Tipulatoid

Цитата:
Требуется, чтобы функция _FormatStrings прошлась циклом по всем строкам массива $tmpArray и в те строки, чьи номера равны значениям из массива $StringsNums добавила знак "+" в конец

Можно и без вложенного 2-го цикла:

Код: #include <Array.au3> ;Only for _ArrayDisplay()

Dim $anim[6] = ["girafe", "cat", "dog", "begemot", "tiger", "fox"]
Dim $StringsToFormat[3] = [1, 5, 3]

_ArrayDisplay ($anim, "Before")

_FormatStrings ($anim, $StringsToFormat)

_ArrayDisplay ($anim, "After")

Func _FormatStrings (ByRef $tmpArray, $StringsNums)
For $i = 0 to UBound ($StringsNums) - 1
$tmpArray[$StringsNums[$i]] &= "+"
Next
EndFunc
Автор: Hackproof
Дата сообщения: 01.10.2008 16:03
Давайте же воздадим хвалу ему за неоценимую и безвозмездную помощь!

Страницы: 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192

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


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