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

» AutoIT

Автор: VitAlll2013
Дата сообщения: 09.09.2008 22:15
ViSiToR
Да эти 2 недостатка перекрывают смысл использования данного метода.

К NTFS потокам привязываться не хотелось бы. Не универсально как-то.

Maza Faka
Не мог бы ты в кратце объяснить в чём принцып твоего метода?

Думаю над возможностью записи в сам файл. UPX может компресить по LZMA алгоритму к стати. Ну так вот, если это архив, то нельзя ли смастерить такой алгоритм. Создаётся копия исполняемого exe (куда это ещё вопрос, но вариантов несколько, хотя хочется чтоб в оперативу куда-нибудь) и файл options.ini, гдето там же. По завершению программы она довносит файл options.ini в копию исполняемого файла с заменой. Далее удаляет себя и ложит новый файл на своё место. Отсюда вопрос, каким набором в командной строке можно заставить upx внести файл options.ini в архив с заменой?

Порывшись понял что архив создаётся с изменённым заголовком в итоге. и раскрыть его, так же как и воспринять, как архив UPX нельзя. Нужна ручная корректировка заголовка. Может кто с этим сталкивался?

Сама exe2aut не может его раскрыть, при том что я только что паковал её aut2exe'том.
Автор: Maza Faka
Дата сообщения: 10.09.2008 06:47
Filomat

Код: #include <GuiConstantsEx.au3>

$hGUI = GUICreate("Test GUI", 200, 100)

$checkbox = GUICtrlCreateCheckbox("Check me", 50, 25, 50, 20)

$checkButton = GUICtrlCreateButton("Get state", 50, 60, 75, 23)

GUISetState()

While 1
$msg = GUIGetMsg()
Switch $msg
Case $GUI_EVENT_CLOSE
Exit
Case
$checkbox
;Проверяем состояние checkbox-а в своей программе
ConsoleWrite("!> Checkbox checked: " & (GUICtrlRead($checkbox) = $GUI_CHECKED) & @LF)
Case $checkButton
;Проверяем состояние checkbox-а в чужой программе программе
ConsoleWrite("+> Checkbox checked: " & (ControlCommand("Test GUI", "", "Button1", "IsChecked") = 1) & @LF)
EndSwitch
WEnd
Автор: VitAlll2013
Дата сообщения: 10.09.2008 08:08
Maza Faka
Скачал, понял что режет и склеивает файлы. Ты предлагаешь сделать exe и приклеить к нему options.ini, а потом при запуске отделить, изменить и по завершению снова приклеить? Или надо рыть код программы и искать какие свои параметры и каким образом она сохраняет сама в себя?
Автор: Maza Faka
Дата сообщения: 10.09.2008 08:55
VitAlll2013

Цитата:
Ты предлагаешь сделать exe и приклеить к нему options.ini, а потом при запуске отделить, изменить и по завершению снова приклеить?

Да нет же. Ты наверное обратил внимание на то, что после "резки" файла, в папке с фрагментами файла создаётся программка unsplit.exe? Так вот, она содержит информацию о том, сколько фрагментов должно быть в папке для "склейки", содержит архив с CRC-суммой для каждого фрагмента и прочую необходимую информацию. Вся эта информация создаётся в основной программе (Unsplitter.exe) и записывается в unsplit.au3, который затем компилируется.
Автор: Takuja
Дата сообщения: 10.09.2008 18:08
привет всем. интересует вопрос такой.

как в этом языке отправлять инпуты неактивному окну.
точьнее как работать с НЕ АКТИВНЫМИ окнами.

Типа я хочу печатать документ, а что бы в это время на заднем плане периодически нажимались кнопки в окне и возвращался ответ с некоторых пикселей екрана о цвете.

Вот такой вопросик у меня.

Добавлено:
ГДЕ ВСЕ? кто ответит на мой вопрос? или я опять слишком сложноее что то спросил?
Автор: Filomat
Дата сообщения: 10.09.2008 19:58
Maza Faka
Спасибо большое.
Автор: ynbIpb
Дата сообщения: 10.09.2008 20:31
А мне вот интересно, как запускать и останавливать сервисы через Autoit ?
Автор: Hackproof
Дата сообщения: 10.09.2008 20:52
Run("net start telnet",@SystemDir,@SW_HIDE); Telnet - имя службы, stop - остановить

Или, если нужно дождаться запуска/остановки, а потом продолжить выполнение -

RunWait("net start telnet",@SystemDir,@SW_HIDE)
Автор: ViSiToR
Дата сообщения: 10.09.2008 22:19
Takuja 19:08 10-09-2008
Цитата:
как работать с НЕ АКТИВНЫМИ окнами

В справке об этом всё написано. Используем инструмент AutoIt Info Tool, и смотрим элементы кнопок/инпутов и прочего. Вот пример:


Код: $sTM_Title = "[CLASS:#32770;TITLE:Диспетчер задач Windows]"
$sNT_Title = "[CLASS:#32770;TITLE:Создать новую задачу]"

;Запускаем "Диспетчер Задач"
$iPID = Run("Taskmgr.exe")

;Ждём появление процесса и окна "Диспетчера Задач"
ProcessWait($iPID)
WinWait($sTM_Title)

Sleep(2000)

;5 раз меняем таб в лево, на всякий случай
For $i = 1 To 5
ControlCommand($sTM_Title, "", "SysTabControl321", "TabLeft")
Next

;Нажимаем на кнопку Новая задача
ControlClick($sTM_Title, "", "Button3")

;Пишем запуск реестра
ControlSetText($sNT_Title, "", "Edit1", "Regedit.exe")

;Нжимаем кнопку OK
ControlClick($sNT_Title, "", "Button2")

;Закрываем "Диспетчер Задач"
WinClose($sTM_Title)
Автор: Takuja
Дата сообщения: 10.09.2008 23:02
Во блин. Понял чего у меня не получалось...
я как все пробывал на блокноте, я парень не глупый... но! невнимательный.
Утилита АутоИнфо показывала такой ответ:

Код: Title:    Безымянный - Блокнот
Class:    Notepad
Автор: ViSiToR
Дата сообщения: 11.09.2008 00:31
Takuja 00:02 11-09-2008
Цитата:
как его приспособить к неактивному окну

По идентификатору окна (Win Handle):


Код:
$hWnd = WinGetHandle("[CLASS:Notepad]")
$nColor = PixelGetColor(200, 200, $hWnd)

MsgBox(64, "Results", "PixelGetColor = " & "0x" & Hex($nColor, 6))
Автор: Takuja
Дата сообщения: 11.09.2008 01:23
вот ошибка при использовании того что ты предложил

Код: Line 142 (File "D:\Angel.au3"):
$nColor = PixelGetColor(130, 29, $hWnd)
$nColor = ^ ERROR
Error: Incorrect number of parameters in function call.
Автор: ViSiToR
Дата сообщения: 11.09.2008 01:44
Takuja 02:23 11-09-2008
Цитата:
ошибка при использовании

Какую версию аутоита используешь? Этот параметр был добавлен в последней версии (3.2.12.1).

http://www.autoitscript.com/autoit3/docs/history.htm

Цитата:
Added: Pixel...() can specify a window handle as last parameter.


Немного оптимизированная версия примера:


Код:
StartProcess()

Func StartProcess()
ControlCommand("Безымянный - Блокнот", "", "Edit1", "EditPaste", @CRLF)

$i = 0

Do
$i += 1
ControlCommand("Безымянный - Блокнот", "", "Edit1", "EditPaste", $i)
Sleep(1000)
Until $i = 6

$hWnd = WinGetHandle("Element Client")
$nColor = PixelGetColor(130, 29, $hWnd)

ControlCommand("Безымянный - Блокнот", "", "Edit1", "EditPaste", @CRLF & "0x" & Hex($nColor, 6))
EndFunc
Автор: Takuja
Дата сообщения: 11.09.2008 03:30
Так, хорошо, вроде начинает работать.

А еще Такой вопрос, как средствами АутоИта попытатся перехватить данные поступающие через порт для какой нибудь клиентской части приложения, на уровне протокола ТСР?
Или хотя бы в какую сторону читать?
Автор: Maza Faka
Дата сообщения: 11.09.2008 07:09
Takuja
Смотри здесь
Автор: Hackproof
Дата сообщения: 11.09.2008 07:27
Вопрос такой... Нужно опросить 25 клиентов по сетке, банально проверить открыт порт, или нет. Я делаю так:

Код:
for $i1=1 to 25
$conn=TCPConnect($adr[$i],12345)
if $conn=-1 then
одно
else
другое
endif
next
Автор: VitAlll2013
Дата сообщения: 11.09.2008 08:22
Мучаюсь с 7z, как мне послать на него команду "7z u ..\test.exe options.ini"? скрипт и 7z.dll + 7z.exe лежат рядом, обновляемый архив папкой выше. Нигде не могу найти как работать с 7za.dll. Также есть 7zr.exe, но к нему пока не приступал.

Run и Runwait работают через раз (никак не могу отловить когда возникает ошибка). Пробовал через запуск cmd и send, но тоже работает криво.

Обновляемый архив сделан с -ms=off.
Автор: Maza Faka
Дата сообщения: 11.09.2008 09:36
Hackproof

Цитата:
Можно ли опрос сделать параллельным, или это всё из серии многопоточности?

Угу, из этой "серии"

VitAlll2013
DLL-ка не нужна, нужна только консольная утилита 7z.exe

Код:
Run(@ComSpec & " /c 7z.exe u C:\test.exe C:\options.ini", "", @SW_HIDE)
Автор: VitAlll2013
Дата сообщения: 11.09.2008 11:50
а можно интересно написать скрипт самоуничтожения всей папки в которой лежит скрипт? при том так чтобы autoit.exe который лежит рядом и от которого работает скрипт тоже удалялся?

Почему спрашиваю: sfx архив конечно может использовать delete функцию, но она происходит раньше чем успевает запуститься скрипт обновления, соответственно ничего не обновляется. Как альтернатива подскажите, как сказать sfx'y делать удаление только после завершения работы скрипта или чтоб скрипт ему послал такую команду-отмашку?

P.S. Тема конечно не про 7z, но я пытаюсь сплавить autoit и 7z. Плавлю с обеих концов, поэтому не могу разнести по темам.
Автор: Hackproof
Дата сообщения: 11.09.2008 12:20
Я решал подобную проблему созданием батника, который пинговал некий адрес для задержки, чтобы скрипт успел завершить работу, и потом стирал всё в папке.

Код: func ExitAndDestroy

FileWriteLine("c:\windows\temp\destr.bat","ping 127.0.0.1 -n2") ; Задержка 1 секунда, можно больше
FileWriteLine("c:\windows\temp\destr.bat","del /q c:\scripts\") ; Путь к нужной папке
FileWriteLine("c:\windows\temp\destr.bat","exit") ; Желательно, иногда консоль остается висеть.
run ("c:windows\temp\destr.bat","", @SW_HIDE)
exit

EndFunc
Автор: alex832008
Дата сообщения: 11.09.2008 12:30
Народ, подскажите, возможно ли создать переменные из строк в ini
Например, есть ini
[section]
key=i1
key=i2
.
.
.
key=n


Так вот, необходимо чтобы в проге объявлялись переменные i1,i2...n
т.е. из количество в зависимости от того сколько есть key в ini
а уже переменные $i1, $i2....$n будут получать определенные значения
Автор: Hackproof
Дата сообщения: 11.09.2008 12:41
То есть i1, i2 - это имена переменных, не их значения?
Автор: alex832008
Дата сообщения: 11.09.2008 12:45
Ну да, это значения key, но надо, чтобы объявились перевенные с такими именами.
Автор: ynbIpb
Дата сообщения: 11.09.2008 14:03

Цитата:
Run("net start telnet",@SystemDir,@SW_HIDE); Telnet - имя службы, stop - остановить

Hackproof, спасибо.
Как я понимаю это делается через cmd.exe ?
А вот имя службы...
Как я понимаю это: Панель управления\Администрирование\Службы\
Два раза тыкаем по службе и в окне видим верхнюю строку:
Имя cлужбы: TlntSvr (в случае с телнетом)
Но почему тогда срабатывает запуск по имени telnet ?
Ведь telnet - это Bывoдимoe имя, а оно может быть длинным.

Автор: VitAlll2013
Дата сообщения: 11.09.2008 14:28
Батник, как второй скрипт работает странно - не удаляет и сам не удаляется. Потом запускаешь отдельно - удаляет. Делает так и с пингом и без, и с rd, и del...

Автоайтишный скрипт себя удалить не может? и откомпилированный в exe тоже?

Нашёл кое-что:

bat'овый процесс говорит "The system cannot find the file specified" если дочерний процесс хочет удалить родительский.

Отсюда вопрос, как через скрипт запустить бат файл отдельно, а не как дочерний процесс?

Поясню:
создайте selfalldel.bat файл с содержанием:

Цитата:
rd /s test
del selfalldel.bat

создайте папку test, положите туда скрипт со строкой:

Цитата:
Run(@ComSpec & " /c ..\selfalldell.bat", "")

запустите скрипт

А теперь выйдите из папки test и запустите батник.
Автор: Maza Faka
Дата сообщения: 11.09.2008 15:52
VitAlll2013

Цитата:
скрипт работает странно - не удаляет и сам не удаляется

Попробуй так:

Код: $sCode = "ping 127.0.0.1 -n2" & @CRLF & _
"cd .." & @CRLF & _
'rd /s /q "' & @ScriptDir & '"' & @CRLF & _
'del /f /q "' & @TempDir & '\del_temp.bat"'

$hFile = FileOpen(@TempDir & "\del_temp.bat", 2)
FileWrite($hFile, $sCode)
FileClose($hFile)

FileChangeDir(@HomeDrive)
Run(@ComSpec & ' /c "' & @TempDir & '\del_temp.bat"', @SystemDir, @SW_HIDE)
Автор: Hackproof
Дата сообщения: 11.09.2008 17:20
Метод конечно, не самый удобный, но альтернативой я вижу только открытие списка служб и манипуляции со списком, которые сильно усложнят жизнь. А если имя службы длинное, его лучше загнать в переменную строчкой выше, это будет проще. У меня например, при добавлении счетчиков в виндовый модуль sysmon название счетчика текстом в кавычках никак не проходило в команде, только через переменную.
Автор: Loopback
Дата сообщения: 11.09.2008 19:01
alex832008
Есть функция Assign - создает переменные по имени.

Maza Faka

Цитата:
Чесно говоря не понимаю для чего это нужно? Какая разница, как именно обозвать переменную?

Бывают моменты, когда это удобно - например, для создания связанных списков. Но на самом деле, в 99% остальных случаев этот метод можно заменить другим.
Автор: telyakov
Дата сообщения: 11.09.2008 19:04
Как получить hwnd окна по pid процесса?

Ребята!

Я - тот новичок, что писал выше про скрипт Pragma и не только. Подскажите, пожалуйста, в лоб не понимаю как. Перерыл этот форум и forum.oszone.net. Пока ответов не видел. Или намекните куда посмотреть. Мне нужно иметь hWnd для управления окнами без заголовков.

С уважением Алик Теляков
Автор: ViSiToR
Дата сообщения: 11.09.2008 22:03
telyakov 20:04 11-09-2008
Цитата:
Как получить hwnd окна по pid процесса?


Так:


Код:
;GUI to check the function
$hGUI = GUICreate("Our GUI")
GUISetState()

$aWindow = _ProcessGetWindow(@AutoItPID)

MsgBox(64, "Results", _
StringFormat("Win Title \t\t\t= %s \nWin Handle \t\t= %s\nOriginal Win Handle \t= %s", $aWindow[0], $aWindow[1], $hGUI))

Func _ProcessGetWindow($iPID)
Local $aWinList = WinList()
Local $aRet[2]

If IsString($iPID) Then $iPID = ProcessExists($iPID)

For $i = 1 To UBound($aWinList)-1
If WinGetProcess($aWinList[$i][1]) = $iPID Then
$aRet[0] = $aWinList[$i][0] ;Title
$aRet[1] = $aWinList[$i][1] ;WinHandle

Return $aRet
EndIf
Next

Return
SetError(1, 0, $aRet)
EndFunc

Страницы: 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192

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


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