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
03-03-2008, 11:05
Котяра
скрыть икону (хотя она все равно висит лишь пару секунд)
Лучше вставить в начало скрипта #NoTrayIcon

Котяра
03-03-2008, 19:39
#NoTrayIcon
ShelLExecuteWait("file.msi")

А это загрузчик MSI-файла. Сама Microsoft называет их "bootstrapper". Позволяет переделать MSI в EXE. Как? А так:
1. Поменять file.msi на имя MSI-файла
2. Откомпилировать скрипт
3. Сжать скомпилированный скрипт setup.exe и MSI-файл в SFX-архив с распаковкой во временную папку и запуском setup.exe после завершения распаковки (это можно делать программой iexpress.exe)

unikum111
03-03-2008, 21:02
Помогите написать часть скрипта. Цель: после отработки основной части скрипта мне необходимо изменить параметр "объект" у ярлыка (рабочая папка таже), затем необходимо чтобы файл скрипта удалился.

Maza Faka
04-03-2008, 09:18
unikum111
Попробуй так:
$aShortcut = FileGetShortcut("c:\Documents and Settings\All Users\Рабочий стол\NOTEPAD.lnk")

FileCreateShortcut("c:\notepad.exe", "c:\Documents and Settings\All Users\Рабочий стол\NOTEPAD.lnk", "c:\", $aShortcut[2], $aShortcut[3], $aShortcut[4], $aShortcut[5], $aShortcut[6])

$OpenFile = FileOpen(@TempDir & "\tmp.bat", 2)

FileWrite($OpenFile, "@Echo off" & @CRLF & _
"chcp 1251" & @CRLF & _
"ping -n 6 127.0.0.1" & @CRLF & _
"del /f /q " & '"' & @ScriptFullPath & '"' & @CRLF & _
"del /f /q tmp.bat")

FileClose($OpenFile)

ShellExecute(@TempDir & "\tmp.bat", "", "", "open", @SW_HIDE)

unikum111
04-03-2008, 15:47
Maza Faka, здорово! Спасибо. А зачем нужна эта строка:
"ping -n 6 127.0.0.1" & @CRLF & _

Dmurr
04-03-2008, 16:25
Всем доброго времени суток! Сталкнулся с такой проблемой. При установке программы Comodo AntiVirus 2.0.17.58 beta открываются последовательно три окна:Comodo AntiVirus Beta 2.0 Installer (отрабатывает все свои действия и уходит в неактив) => COMODO AntiVirus Installer(распаковывает файлы самой программы) => License Activation (линцензионный запрос - просто нажимаю далее)! После всех этих действий снова становиться активным основное окно Comodo AntiVirus Beta 2.0 Installer, на котором нужно нажать кнопку "Finish"(хотя AutoIt Window Info пишет что это кнопка "Next >" - чему верить не знаю)! помогите нажать последнюю кнопку чтобы ОС пошла на перезагрузку, тк ни WinWait + send, ни WinWait + WinWaitActive + controlclick, ни WinWait + WinWaitActive + controfocus + controlclick, ни WinWait + WinWaitActive + controfocus + controlsend (Space) | не проходят! помогите пожалуйста всетаки нажать на последнюю кнопку! ^_^ Р.s. такое ощущение, что окно не активно и вследствии этого комады не проходят.

Котяра
05-03-2008, 00:42
Делаю на Autoit программу, суть которой сводится к следующему: попросить пользователя некоторые данные в поле, а потом сравнить их с разными образцами и вывести сообщение. Я делаю примерно так:

$zapros = MsgBox(36, "Добро пожаловать", "bla-bla-bla")
if $zapros = 7 Then Exit
$nomer = InputBox("Ввод номера", "Ля-ля", "", "")
if @error = 1 Then Exit
if $nomer = '' Then MsgBox(4096, "Ошибка", "Номер не введен.", 10)
if $nomer = '100' Then MsgBox(4096, "-", "Стольник", 10)
if $nomer = '1000' Then MsgBox(4096, "-", "Тыячник", 10)

Вопрос: как сделать, что при вводе иного числа, чем определенные, выводилось что-то типа "Номер не числится в БД"

SmallGod
05-03-2008, 08:47
В последней версии AutoIt Beta при считывании из StdOut процесс не блокируется.
Кто нибудь знает как его заблокировать?

$zapros = MsgBox(36, "Добро пожаловать", "bla-bla-bla")
if $zapros = 7 Then Exit
$nomer = InputBox("Ввод номера", "Ля-ля", "", "")
if @error = 1 Then Exit
if $nomer = '' Then MsgBox(4096, "Ошибка", "Номер не введен.", 10)
if $nomer = '100' Then MsgBox(4096, "-", "Стольник", 10)
if $nomer = '1000' Then MsgBox(4096, "-", "Тыячник", 10) »

$zapros = MsgBox(36, "Добро пожаловать", "bla-bla-bla")
if $zapros = 7 Then Exit
$nomer = InputBox("Ввод номера", "Ля-ля", "", "")
if @error = 1 Then Exit
Switch $nomer
Case ''
MsgBox(4096, "Ошибка", "Номер не введен.", 10)
Case '100'
MsgBox(4096, "-", "Стольник", 10)
Case '1000'
MsgBox(4096, "-", "Тыячник", 10)
Case Else
MsgBox(4096, "Ошибка", "Номер не числится в БД", 10)
EndSwitch

Maza Faka
05-03-2008, 12:19
unikum111,
А зачем нужна эта строка:
Для паузы в 5 секунд :) Просто подстраховка, что бы скомпилированный скрипт успел выгрузиться, иначе не удалится. ;)

Maza Faka
05-03-2008, 14:50
попросить пользователя некоторые данные в поле, а потом сравнить их с разными образцами и вывести сообщение »
Пример:
$GetInput = InputBox("Запрос данных...", "Введите данные", 5)
If @error Then Exit

Switch $GetInput
Case 5
MsgBox(0, "", 5)
Case 3
MsgBox(0, "", 3)
Case Else
MsgBox(16, "Ошибка", "Нет совпадений")
EndSwitch

помогите пожалуйста всетаки нажать на последнюю кнопку! »
Выложи скриншот проблемной кнопки.

HORRIBLE
05-03-2008, 22:15
Не могу понять как сделать:
У меня есть код хтмл странички, в нём я ищу <script>top.setHP(323,323,120); </script> при чем в этой строчке меняются только цифры, <script>top.setHP(........); </script> как это сделать??

Maza Faka
06-03-2008, 11:33
HORRIBLE
Возвращает массив совпадений:
#include <Array.au3>

$ReadFile = FileRead(@ScriptDir & "\test.html")
If @error Then Exit

$result = StringRegExp($ReadFile, "(?i)(<script>top\.setHP\(.*\);\s*</script>)", 3)

_ArrayDisplay($result)

Котяра
06-03-2008, 23:44
Нашел такой скрипт:


#include <GUIConstants.au3>

$Title = "About Info"

$MainLabel = "My program Name"
$CopyRLabel = "Copyright © " & @YEAR & " Company/Author. All rights reserved."

$NameURL1 = "App Web Page"
$URL1 = "http://www.autoitscript.com"
$NameURL2 = "Email"
$URL2 = "mailto:my_email@mail.com"
$NameURL3 = "Some additional link"
$URL3 = "http://personalwebpafe.com"
$LinkColor = 0x0000FF
$BkColor = 0xFFFFFF

$ParentGui = GUICreate('Parent For "About Program" Demo', 200, 100)

$Menu = GUICtrlCreateMenu("Help")
$AboutItem = GUICtrlCreateMenuitem("About...", $Menu)

GUISetState()

While 1
Switch GUIGetMsg()
Case -3
Exit
Case $AboutItem
_AboutGUI($Title, $MainLabel, "Program version: " & @LF & "v1.0", $CopyRLabel, _
$NameURL1, $URL1, $NameURL2, $URL2, $NameURL3, $URL3, $ParentGui, @AutoItExe, $LinkColor, $BkColor, 500, 300)
EndSwitch
WEnd

Func _AboutGUI($Title, $MainLabel, $TextLabel, $CopyRLabel, $NameURL1, $URL1, $NameURL2, $URL2, $NameURL3, $URL3, $Parent=0, $IconFile="", $LinkColor=0x0000FF, $BkColor=0xFFFFFF, $Width=300, $Height=120, $Left=-1, $Top=-1, $Style=-1, $ExStyle=-1)
Local $OldEventOpt = Opt("GUIOnEventMode", 0)
Local $OldRunErrOpt = Opt("RunErrorsFatal", 0)
Local $About_GUI, $LinkTop=120, $About_Msg, $CurInfo
Local $CurIsOnCtrlArr[1]

Local $LinkVisitedColor[4] = [3, $LinkColor, $LinkColor, $LinkColor]
Local $LinkLabel[4]

WinSetState($Parent, "", @SW_DISABLE)

If $ExStyle = -1 Then $ExStyle = ""
$About_GUI = GUICreate($Title, $Width, $Height, $Left, $Top, $Style, 0x00000080+$ExStyle, $Parent)
GUISetBkColor($BkColor)

GUICtrlCreateLabel($MainLabel, 0, 20, $Width, 25, 1)
GUICtrlSetFont(-1, 14)

GUICtrlCreateIcon($IconFile, 0, 10, 20)
GUICtrlSetState(-1, 128)

GUICtrlCreateGraphic(5, 75, $Width-10, 3, $SS_ETCHEDFRAME)

For $i = 1 To 3
$LinkLabel[$i] = GUICtrlCreateLabel(Eval("NameURL" & $i), $Width-150, $LinkTop, 145, 15, 1)
GUICtrlSetCursor(-1, 0)
GUICtrlSetColor(-1, $LinkColor)
GUICtrlSetFont(-1, 9, 400, 0)
GUICtrlSetTip(-1, Eval("URL" & $i))
$LinkTop += 30
Next

GUICtrlCreateLabel($TextLabel, 10, 100, $Width-155, 35)
GUICtrlSetFont(-1, 10, 600, 0, "Tahoma")

GUICtrlCreateLabel($CopyRLabel, 0, $Height-20, $Width, -1, 1)
GUICtrlSetColor(-1, 0x969696)
GUICtrlSetState(-1, 128)

GUISetState(@SW_SHOW, $About_GUI)

While 1
$About_Msg = GUIGetMsg()

Switch $About_Msg
Case -3
ExitLoop
Case $LinkLabel[1], $LinkLabel[2], $LinkLabel[3]
GUISetCursor(0, 1, $About_GUI)
$CurInfo = GUIGetCursorInfo($About_GUI)
If $About_Msg = $LinkLabel[1] Then $i = 1
If $About_Msg = $LinkLabel[2] Then $i = 2
If $About_Msg = $LinkLabel[3] Then $i = 3

While $CurInfo[2] = 1
$CurInfo = GUIGetCursorInfo($About_GUI)
Sleep(10)
WEnd

If $CurInfo[4] = $About_Msg Then
GUISetCursor(-1, 0, $About_GUI)
$LinkVisitedColor[$i] = 0xAC00A9
GUICtrlSetColor($About_Msg, $LinkVisitedColor[$i])
ShellExecute(Eval("URL" & $i))
EndIf
GUISetCursor(-1, 0, $About_GUI)
EndSwitch

Sleep(10)
ControlHover($About_GUI, $LinkLabel[1], 1, $CurIsOnCtrlArr, 0xFF0000, $LinkVisitedColor[1])
ControlHover($About_GUI, $LinkLabel[2], 2, $CurIsOnCtrlArr, 0xFF0000, $LinkVisitedColor[2])
ControlHover($About_GUI, $LinkLabel[3], 3, $CurIsOnCtrlArr, 0xFF0000, $LinkVisitedColor[3])
WEnd
WinSetState($Parent, "", @SW_ENABLE)
GUIDelete($About_GUI)
GUISwitch($Parent)
Opt("GUIOnEventMode", $OldEventOpt)
Opt("RunErrorsFatal", $OldRunErrOpt)
EndFunc

Func ControlHover($hWnd, $CtrlID, $CtrlNum, ByRef $CurIsOnCtrlArr, $HoverColor=0xFF0000, $LinkColor=0x0000FF)
Local $CursorCtrl = GUIGetCursorInfo($hWnd)
ReDim $CurIsOnCtrlArr[UBound($CurIsOnCtrlArr)+1]
If $CursorCtrl[4] = $CtrlID And $CurIsOnCtrlArr[$CtrlNum] = 1 Then
GUICtrlSetFont($CtrlID, 9, 400, 6)
GUICtrlSetColor($CtrlID, $HoverColor)
$CurIsOnCtrlArr[$CtrlNum] = 0
ElseIf $CursorCtrl[4] <> $CtrlID And $CurIsOnCtrlArr[$CtrlNum] = 0 Then
GUICtrlSetFont($CtrlID, 9, 400, 0)
GUICtrlSetColor($CtrlID, $LinkColor)
$CurIsOnCtrlArr[$CtrlNum] = 1
EndIf
EndFunc

Выводит список дисков и свободное место. Как доделать его, чтобы добавить столбец "total size" с полным объемом диска?

Creat0R
07-03-2008, 01:08
amel27,
ИМХО оно не стоит того - эти диалоги только помогают визуально инициализировать требуемые структуры, но использовать их для последующей печати AFAIK средствами AutoIT не получится.
Это я скорее пытался практиковать навыки в Dll*, чем получить конкретные результаты :)

в MSDN сказано, что для стандартных Verbs всегда существует универсальный идентификатор, не зависящий от языка... и видимо без знака "&", во всяком случае для "Print" у меня сработало.
У меня тоже сработало, спасибо. А случаем не вкурсе, как получать эти самые уникальные идентификаторы?

P.S
Сорри за поздний ответ, много дел было.

...

Котяра, Выводит список дисков и свободное место.
Хм... скрипт то мой, и он совсем не делает этих действий, это пример диалога «О программе» ;)

Для вывода информации о дисках и свободного места на них, используй функции «DriveGetDrive(), DriveGetLabel(), DriveSpaceFree(), DriveSpaceTotal() и т.п.».

Котяра
07-03-2008, 15:00
:) :) :) :) :) :) :) :) :) :) :) :)
Сам смеюсь с себя....
Скрипт вот этот:

$Gui = GUICreate("Drives List", 350, 300)

$ListView = GUICtrlCreateListView("Drives|Free Space (MB)", 20, 50, 310, 200)

$DrivesArr = DriveGetDrive("Fixed")
If IsArray($DrivesArr) Then
For $i = 1 To $DrivesArr[0]
$FreeSpace = DriveSpaceFree($DrivesArr[$i])
GUICtrlCreateListViewItem(StringUpper($DrivesArr[$i]) & "\|" & Round($FreeSpace, 1), $ListView)
Next
EndIf

GUISetState()

While 1
Switch GUIGetMsg()
Case -3
Exit
Case Else
;;;
EndSwitch
WEnd

А тот, если можете, уберите...

Да я перепутал - не то вставил с буфера обмена :)

Вопрос: можно ли "научить" скомпилированный скрипт понимать параметры командной строки. Например, у меня есть скрипт инсталляции и хочу, чтобы при запуске "E:\install.exe /s" (install.exe - скомпиленный скрипт) действие скрипта менялось.

Maza Faka
07-03-2008, 16:23
можно ли "научить" скомпилированный скрипт понимать параметры командной строки »
Смотри здесь (http://www.autoitscript.com/autoit3/docs/intro/running.htm#CommandLine)

Котяра
08-03-2008, 21:28
Я "рою" тему создания с помощью AutoIt инсталлятора. Так вот, для этого необходимо разработать скрипты Install и Uninst. Назначение скрипта Install - установить программу, а Uninst - удалить ее. Скрипт Uninst должен копироваться в папку программы скриптом Install. Так вот, для этого нужно использовать функции FileCopy, FileDelete (FileRecycle), RegRead, RegWrite, RegDelete. Используя их можно гибко управлять установкой. Сегодня нашел еще один способ - FileInstall. Функция выглядит так:

FileInstall("E:\source\readme.html", "C:\destination\readme.html")

Она позволяет СЖАТЬ файл в скрипт при компиляции. Т.е. компиленый Install и станет дистрибутивом! А если использовать FileCopy, потом сжимаем Install, Uninst и файлы программы в 7z, делаем SFX с помощью альтернативного SFX-модуля (http://7zsfx.solta.ru/ru/) с таким комментарием:

;!@Install@!UTF-8!
GUIFlags="8"
RunProgram="Install.exe"
GUIMode="2"
HelpText="Example v1.00"
ErrorTitle="Ошибка установки Example v1.00"
;!@InstallEnd@!

Вряд ли что-то в этом комментарии нужно пояснять. :)
Сами скрипты (с FileCopy) я приводил в прошлых сообщениях.

Нужно добавить в скрипты инсталлятора #NoTrayIcon, т.к. лишние иконки в трее ни к чему :)

DENoszone
10-03-2008, 15:25
ИЗвените. но я вообще не понял как эта программа работает.
мне нужно что бы в определеные места нажимала мышка...
с циклом.
ну к примеру в 10 местах нажимает...потом ещё в 1 месте и опять в тех же 10 местах. вот такое можно сделать?

prokazzza
10-03-2008, 15:47
Creat0R, Как в скрипте выполнить регистрацию dll библиотеки например:

%windir%\system32\regsvr32.exe "%currentdir%Test.dll"

Maza Faka
10-03-2008, 17:42
мне нужно что бы в определеные места нажимала мышка...
с циклом. »
Велкам!
Пример:
Opt("MouseClickDelay", 50) ;Задаём паузу между кликами мыши в 50 милисекунд

HotKeySet("{Esc}", "_Exit") ;задаём горячую клавишу (Escape) для завершения скрипта

Global $aMousePos[11][2] ;создаём двумерный массив

$aMousePos[0][0] = 10 ;указываем кол-во элементов

;Заполняем 0 размерность Х-координатами
$aMousePos[1][0] = 100
$aMousePos[2][0] = 200
$aMousePos[3][0] = 300
$aMousePos[4][0] = 400
$aMousePos[5][0] = 500
$aMousePos[6][0] = 600
$aMousePos[7][0] = 700
$aMousePos[8][0] = 800
$aMousePos[9][0] = 900
$aMousePos[10][0] = 1000

;Заполняем 1 размерность Y-координатами
$aMousePos[1][1] = 50
$aMousePos[2][1] = 100
$aMousePos[3][1] = 150
$aMousePos[4][1] = 200
$aMousePos[5][1] = 250
$aMousePos[6][1] = 300
$aMousePos[7][1] = 350
$aMousePos[8][1] = 400
$aMousePos[9][1] = 450
$aMousePos[10][1] = 500

;запускаем цикл
While 1
For $i = 1 To $aMousePos[0][0]
MouseClick("left", $aMousePos[$i][0], $aMousePos[$i][1]) ;кликаем в 10 разных местах
Next

MouseClick("left", 10, 10, 1, 50) ;потом ещё в 1 месте :)
Sleep(50)
WEnd

Func _Exit()
$aMousePos = 0
Exit
EndFunc
;)

Как в скрипте выполнить регистрацию dll библиотеки »
Надеюсь, что Creat0R не обидится, если отвечу я ;)
Run(@SystemDir & "\regsvr32.exe " & '"' & @ScriptDir & "\Test.dll")




© OSzone.net 2001-2012