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

» AutoIT

Автор: timsky
Дата сообщения: 07.11.2008 02:33
kpuk
Глянь в хелпе по UDF. Функции _Net_Share* - вроде что-то там есть.

Добавлено:
По поводу моей проблемы обнаружил, что глюк присутствует и на Windows XP SP 3 EN x86
Для быстрой проверки слепил скрипт:

Код: #Include <Process.au3>

If WinExists(@ScriptName) Then Exit

AutoItWinSetTitle(@ScriptName)

$login = IniRead(@ScriptDir & '\config.ini', 'Main', 'Login', '')
If $login = '' Then $login = 'Administrator'

$pass = IniRead(@ScriptDir & '\config.ini', 'Main', 'Pass', '')
If $pass = '' Then $pass = ''

$logonType = IniRead(@ScriptDir & '\config.ini', 'Main', 'LogonType', '')
If $logonType = '' Then $logonType = 0

If $CmdLineRaw = 'schedule' Then
$hour = @HOUR
$min = @MIN + 1
$command = 'at ' & $hour & ':' & $min & ' /interactive ' & @ScriptDir & '\' & @ScriptName
_RunDOS ($command)
Exit
Else


$i = 0
While 1
$i = $i + 1
$run = RunAs($login, @ComputerName, $pass, $logonType, 'c:\WINDOWS\system32\calc.exe', @ScriptDir)
If @error Then Exit

$file = FileOpen(@ScriptDir & '\log.txt', 1)
FileWriteLine($file, $i & ' - ' & @HOUR &':'& @MIN &':'& @SEC)
ProcessClose($run)
Sleep(1000)
Wend

EndIf
Автор: Maza Faka
Дата сообщения: 07.11.2008 06:01
NIKZZZZ
Посмотри здесь, очень интересный пример использования WinAPI функции CallWindowProc, может получится прикрутить к твоему коду
Автор: CrazyNNM
Дата сообщения: 07.11.2008 11:08
привет народ, давно уже читаю эту тему, пытаюсь учить автоит
много полезного подчеркнул

вот возникла проблема:
хочу написать прогу, призванную автоматизировать установку стандартных приложений, тобишь, имеется N-ное колличество компилированных скриптов автоит, содержащие сценарии для установки тех или иных программ, все это собрано, вместе с программами к скриптам, описано в *.ини файле.
как считать из ини, как это описать в проге понятно, все проги проявляются в зависимости от наличия в инишнике, в теле программы в виде чекбоксов

так вот вопрос:

как мне сделать так, чтоб при нажатии кнопки скрипты(ну они уже в виде ехе файлов) выполнялись строго по очереди (последующий выполняется только по завршении предыдущего), а не все вместе и сразу?

остальное я вроде уже смог
использую On Event Mode.

помогите пожалуйста
Автор: Tipulatoid
Дата сообщения: 07.11.2008 11:29
CrazyNNM
RunWait?
Автор: CrazyNNM
Дата сообщения: 07.11.2008 11:37
Tipulatoid

попробую ща

Добавлено:
вот спасибо, попробовал, получилось все
позже выложу готовую прогу с описаловом и исходниками, мож кому и пригодится
везде расставлю коментарии, может кому помогут в начинаниях))))
Автор: timsky
Дата сообщения: 07.11.2008 14:21
Люди, в этом топике пробегало немало очень полезных скриптов, функций, примеров.
Может их как-нибудь собрать в одно целое, оформить. Ведь очень много труда в это вложено, а зачастую этим воспользовались в лучшем случае несколько человек.
Что-то наподобие "Готовые скрипты и программы с открытым кодом на AutoIt:" и прочего из шапки.
Например, мне есть чем поделиться, здесь уже очень много полезного пробегало.

Например, я слепил скрипт, отписываю тут его вместе с версией Автоита, на которой он писался. Кто-то кидает его в шапку. Чтобы шапка не разрасталась, там нужно оставить лишь сылки на одиночные посты типа "Общие вопросы и решения на Autoit", которые уже пополняются постепенно. Вот этого я не умею...

Как Вам идея? Русиш Knowledge Base
Автор: VovIK
Дата сообщения: 07.11.2008 14:56
timsky

Цитата:
Например, я слепил скрипт, отписываю тут его вместе с версией Автоита, на которой он писался.
отличненько


Цитата:
Кто-то кидает его в шапку.
ну, єто ті и сам тоже можешь сделать

Автор: timsky
Дата сообщения: 07.11.2008 15:35
VovIK
Дык, шапка же раздуется неимоверно. Вот как делают, что в шапке ссылка на еденичный пост, содержащий инфу и постоянно обновляемый?? И куда этот пост впендюривать?
Автор: NIKZZZZ
Дата сообщения: 07.11.2008 16:14
Maza Faka

Цитата:
Посмотри здесь, очень интересный пример использования WinAPI функции

Спасибо за подсказку.
Убедился, что строковые функции очень медленно работают.
Для bin данных лучше создать структуру с помощью DllStructCreate(), обращение к ней на более , чем на два порядка превышает по скорости , чем работа со строками.
модифицированный пример сравнения двух bin файлов:


Код: #include <WinAPI.au3>

$sFile1 = 'file.bin'
$sFile2 = 'file2.bin'
$sFile3 = 'Result.txt'
$nFileSize1=FileGetSize($sFile1)
$nFileSize2=FileGetSize($sFile2)
Global $tBuffer1[$nFileSize1]
Global $tBuffer2[$nFileSize2]

$bBuffer1 = DllStructCreate("byte[" & $nFileSize1 & "]")
$hFile = _WinAPI_CreateFile($sFile1, 2, 2)
_WinAPI_ReadFile($hFile, DllStructGetPtr($bBuffer1),$nFileSize1,$nFileSize1)
_WinAPI_CloseHandle($hFile)

$bBuffer2 = DllStructCreate("byte[" & $nFileSize2 & "]")
$hFile = _WinAPI_CreateFile($sFile2, 2, 2)
_WinAPI_ReadFile($hFile, DllStructGetPtr($bBuffer2),$nFileSize2,$nFileSize2)
_WinAPI_CloseHandle($hFile)

$iAd = -1
$iCount = 0
$sf3 = ''
For $iAddr = 1 To $nFileSize2

If (DllStructGetData($bBuffer1,1,$iAddr) <> DllStructGetData($bBuffer2,1,$iAddr)) Or ($iAddr>$nFileSize1) Then
If $iAd <> $iAddr Then
$sf3 &= @CRLF & Hex($iAddr -1, 8) & ':'
$iCount = 0
$iAd = $iAddr
EndIf
$sf3 &= Hex(DllStructGetData($bBuffer2,1,$iAddr),2)
$iAd += 1
$iCount += 1
If $iCount = 64 Then
$iAd = -1
EndIf
EndIf
Next

$f = FileOpen($sFile3, 2)
FileWrite($f,$sf3)
FileClose($f)
Автор: ViSiToR
Дата сообщения: 07.11.2008 17:03
timsky 15:21 07-11-2008
Цитата:
Может их как-нибудь собрать в одно целое, оформить. Ведь очень много труда в это вложено, а зачастую этим воспользовались в лучшем случае несколько человек.

Ну для этого и есть шапка То что люди туда не смотрят, это другой вопрос, они и не будут заглядывать в любую другую форму базы данны.


Цитата:
Например, я слепил скрипт, отписываю тут его вместе с версией Автоита, на которой он писался. Кто-то кидает его в шапку.

Липи, выкладывай , я беру на себя слежку за шапкой (если никто не против ). Буду добавлять если оно того стоит.
Автор: gal7
Дата сообщения: 07.11.2008 19:49
Подскажите можно ли кликать по элементу Label высылая сообщения ему? Для button такое есть, а для этого не могу найти. Можно без примера, просто названия сообщения если такое есть будет достаточно.
Автор: ViSiToR
Дата сообщения: 07.11.2008 20:40
gal7 20:49 07-11-2008
Цитата:
Подскажите можно ли кликать по элементу Label высылая сообщения ему?

Не уверен что понял, но ControlClick("Title", "", "Label1") разве не подходит?
Автор: gal7
Дата сообщения: 07.11.2008 20:56
Нет, не подходит, т.к. Label не видно. Хотел еще ее сделать "стандартной кнопкой GUI", но Label и поле этого не реагировал на _GUICtrlButton_Click().
Автор: ViSiToR
Дата сообщения: 07.11.2008 21:58
gal7 21:56 07-11-2008
Цитата:
Label не видно

Это Label с аутоитовского GUI, или внешний? Если внутренний, тогда лучше опиши подробнее что требуется, для чего кликать?
Автор: CrazyNNM
Дата сообщения: 08.11.2008 00:37
согласен с тимски, сборник примеров это супер
я буду в этом участвовать, буду собирать полезности
если что наваяю своимми руками полезного, тоже включу.
у меня лежит сохраненный код для копирования большого файла
еще в начале темы кто-то тут постил
кто постил я хз, но код могу выложить

и код для работы с треем лежит тоже (редактирование колличества элементов в трей-меню)

кстати, прогу я дописал, чутка позже (в зависимости от свободного времени) допишу к ней небольшую описаловку, расставлю подробные коментарии и выставлю на всеобщее обозрение. мож кто нить чем нить поправит, буду только благодарен)))
Автор: ViSiToR
Дата сообщения: 08.11.2008 00:51
CrazyNNM 01:37 08-11-2008
Цитата:
еще в начале темы кто-то тут постил
кто постил я хз, но код могу выложить

Он уже есть в шапке.
Автор: CrazyNNM
Дата сообщения: 08.11.2008 02:25
все, программка с описаловом и с коментариями готова
может она и кривовато написана (главное, работает как надо), просто я пока что на небольшом уровне знаю программирование
может это можно было решить короче, через массивы, но с ними я обращаться не умею пока что.
в общем, если кто чего подредактирует, буду рад

скачать можно тут
Автор: gal7
Дата сообщения: 08.11.2008 09:25
Все, сделал с регистрацией новых сообщений windows и их отправлением.

Добавлено:
Еще хотел давно спросить, нельзя ли в AutoIt как-нибудь напрямую(без всяких излишеств, чем-то встроенным) вызывать функции из одного скрипта в другом? Какой-нибудь ОДНОЙ функцией.
Автор: Tipulatoid
Дата сообщения: 08.11.2008 11:50
gal7
Если я правильно понял вопрос - конечно можно. Именно так работают UDF - ки.
В начале своего основного скрипта ставишь
#include <MyFunc.au3>

В MyFunc.au3 выписываешь свои функции. Из основного скрипта вызываешь их обыкновенно, так, как будто они присутствуют в теле основного скрипта

Код:
_MyFunc1 (param1, param2)
_MyFunc2 (param1, param2)
_MyFunc3 (param1, param2)
Автор: CrazyNNM
Дата сообщения: 08.11.2008 13:01
насколько я понял, он хочет взаимодействия с компилированным скриптом
Автор: gal7
Дата сообщения: 08.11.2008 13:14
>Если я правильно понял вопрос - конечно можно

Нет, нет, я имел ввиду вызов функций в одной работающей программе Autoit из другой работающей программы Autoit.
Чую, что нельзя
Автор: CrazyNNM
Дата сообщения: 08.11.2008 14:04
думаю, если есть гуи интерфейс у управляющей программы, то можно во второй программе средствами winwait(окно первой программы) или что-то типа того, достичь желаемых действий.
подумай об этом

а если нужно текст вытащить из управляющей программы, можно использовать например, ControlGetText или что то типа того))))
Автор: gal7
Дата сообщения: 08.11.2008 15:21

Цитата:
думаю, если есть гуи интерфейс у управляющей программы, то можно во второй программе средствами winwait(окно первой программы) или что-то типа того, достичь желаемых действий.
подумай об этом

Не совсем понял как это все будет работать, но все равно спасибо!

Пока я такую связь делаю с помощью input, передавая так данные между программами. Для меня это самое простое пока. Всякие сокеты и т.п. для моих целей излишни. Вот я и подумал, может есть совсем простой и лучший способ вызывать функции из другой программы autoit.
Автор: ViSiToR
Дата сообщения: 08.11.2008 15:59
gal7 14:14 08-11-2008
Цитата:
вызов функций в одной работающей программе Autoit из другой работающей программы Autoit

Только если вторая “умеет” обрабатывать подобные вызовы. Если нужно, выложу позже пример.
Автор: askretov
Дата сообщения: 08.11.2008 16:00
Люди, подскажите как получить текст из консольных окон. Допустим cmd и так далее. Надо дождаться определенного текста в консоли. Запускаю telnet через cmd и жду приглашения. так вот как получить текст то из консоли ?
Автор: gal7
Дата сообщения: 08.11.2008 16:58

Цитата:
Только если вторая “умеет” обрабатывать подобные вызовы.

Если без наворотов никак, то буду делать тогда по-старому. Я рассчитовал на встроенность этого механизма в autoit, усложнение мне пока никчему.
Автор: CrazyNNM
Дата сообщения: 08.11.2008 17:43
askretov
думаю, тебе поможет ConsoleRead
только я не знаю как её юзать
Автор: kpuk
Дата сообщения: 08.11.2008 22:18
Есть ли функция которая определяет сетевую папку, для записи ли она или просто для чтения?
Как вариант закидывать туда файл, если @error не очень устраивает
Автор: Tipulatoid
Дата сообщения: 09.11.2008 01:35
askretov
Пример того как можно захватить вывод консольной утилиты


Код: #include <Constants.au3>

$POP3RecvArgs = "pop3recv.exe -s pop.yandex.ru -p 110 -u delta2-greit -w не_скажу -uidl -dw"
_GetMail ($POP3RecvArgs)


Func _GetMail ($CMDstring) ; функция скачивает почту и записывает в переменную
$foo = Run ($CMDstring, @ScriptDir, @SW_HIDE, $STDOUT_CHILD) ; запускаем консольную pop3recv.exe с аргументами
$sReadStdout = ""
While 1 ; бесконечный цикл
$line = StdoutRead($foo) ; захватываем вывод построчно
If $line <> "" Then
$sReadStdout &=$line ; если он не пустой, дописываем его к переменной $sReadStdout
EndIf
If @error Then ExitLoop ; если вывод кончился, выходим из цикла
Sleep (1) ; спим 1 мсек, чтоб не грузить излишне процессор
WEnd

ConsoleWrite ($sReadStdout & @CRLF)

EndFunc ; ==> _GetMail
Автор: NIKZZZZ
Дата сообщения: 09.11.2008 01:58
Tipulatoid
Не совсем правильно


Код: #include <Constants.au3>

$POP3RecvArgs = "pop3recv.exe -s pop.yandex.ru -p 110 -u delta2-greit -w не_скажу -uidl -dw"
_GetMail ($POP3RecvArgs)


Func _GetMail ($CMDstring) ; функция скачивает почту и записывает в переменную
$foo = Run ($CMDstring, @ScriptDir, @SW_HIDE, $STDOUT_CHILD) ; запускаем консольную pop3recv.exe с аргументами
$sReadStdout = ""
While 1 ; бесконечный цикл
$line = StdoutRead($foo) ; захватываем вывод построчно
If @error Then ExitLoop ; если вывод кончился, выходим из цикла
If $line <> "" Then
$sReadStdout &=$line ; если он не пустой, дописываем его к переменной $sReadStdout
EndIf
Sleep (1) ; спим 1 мсек, чтоб не грузить излишне процессор
WEnd

ConsoleWrite ($sReadStdout & @CRLF)

EndFunc ; ==> _GetMail

Страницы: 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192

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


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