PDA

Показать полную графическую версию : [Архив - Часть 1.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

Diamond
28-05-2007, 14:13
Creat0R
Рад, что пригодилось. Собирал информацию как говориться с мира по нитке. :)
Вот только мне не нравиться что эти функции цвета переворачивают с RGB на GBR, надо будет потом поправить...

Diamond
29-05-2007, 09:18
Creat0R
Поправил. :) Теперь только RGB.

V0van3
29-05-2007, 15:06
Я написал AutoIt скрипт который автоматически закрывает рекламное окно в visicom 2003:

;Отслеживает и закрывает рекламное окно
;скрыть в системной панели индикатор AutoIt
;AutoItSetOption("TrayIconHide", 1)
;Отображать текущую строку сценария с помощью индикатора системной панели в режиме отладки.
AutoItSetOption("TrayIconDebug", 1)
AutoItSetOption("SendKeyDelay", 15)
;Переходим в папку с visicom
;FileChangeDir('%1%')
FileChangeDir('c:\temp\Visicom')
Run('Vcmurbas.exe')
WinWaitActive('','')
ControlClick('','Вход','Button1')
;MsgBox(4096, "", ProcessExists("mmc.exe"))
;включить режим поиска в окнах-потомках
Opt("WinSearchChildren", 1)
While ProcessExists("ntvdm.exe")<>0
;дожидаемся активности окна с рекламой
WinWait('Внимание!','Подробнее...')
WinClose('Внимание!','Подробнее...')
Sleep(200)
WEnd

запускаю %path_cmdutils%\Autoit3.exe Visicom.au3 %visicom_path% (переменные объявлены и заданы верно)
Работает (рекламные окна закрывает), но не отслеживает закрытия visicom и скрипт продолжает зацикливаться.

Прикол в том что vcmurbas.exe запущен через NTVDM и в явном виде его ProcessExists не видет :(

система Win2kSP4en, что посоветуете? Как это можно обойти?

amel27
30-05-2007, 03:25
V0van3
vcmurbas.exe запущен через NTVDM и в явном виде его ProcessExists не видет так вроде работает:$pid = Run("Vcmurbas.exe")

While ProcessExists($pid)
Sleep(200)
WEnd

mariolast
30-05-2007, 09:32
Клевая прога для работы с телефонной книгой, картинками, мелодиями и т.п. для целой кучи 357 видов мобил
Скачать http://download.mobiledit.com/mobiledit!/MOBILedit!.exe
Русик http://msilab.net/show.php?rus=1033
Наброски AutoIt скрипта http://forum.oszone.net/showthread.php?p=592697#post592697
:moderator
Данная тема предназначена для общих вопросов по AutoIt. Вопросы по установке приложений при помощи AutoIt следует задавать в соответствии с правилами форума "Автоматическая установка приложений" (http://forum.oszone.net/announcement.php?f=61&announcementid=43)

voler
31-05-2007, 08:06
Вот написал скрипт для установки Adobe Acrobat 7.0.0 Professional но видимо где то проблема с нажатием кнопки, так как вылетает сообщение уверены что хотите отменить установку Adobe Acrobat 7.0.0 Professional, и скрипт авто отвечает нет и установка идет далее. Проверял все кнопки все, вроде указано верно в чем может быть проблема?

#cs
----------------------
Приложение: Adobe Acrobat
На какой(их) версии(ях) тестировалось: 7.0.0 Professional

Автор скрипта: Voler
----------------------
#ce
;предотвращение возможности множественного запуска скрипта
If WinExists(@ScriptName) Then Exit
AutoItWinSetTitle(@ScriptName)
;Отображать текущую строку сценария с помощью индикатора системной панели в режиме отладки.
AutoItSetOption("TrayIconDebug", 1)

; Установка переменных
Global $file='setup.exe', $key='keygen.exe', $AvtCode, $ACStr

Run ( $file )

;Splash
WinWaitActive ( 'Adobe Acrobat 7.0 Professional - Setup' )
ControlClick ( 'Adobe Acrobat 7.0 Professional - Setup', '', 'Button1' )

;Welcome to the Adobe Acrobat 7.0 Professional Setup
WinWaitActive ( 'Adobe Acrobat 7.0 Professional - Setup' )
Sleep ( 500 )
ControlClick ( 'Adobe Acrobat 7.0 Professional - Setup', '', 'Button1' )

;Click Next to view the End User License agreement.
WinWaitActive ( 'Adobe Acrobat 7.0 Professional - Setup' )
ControlClick ( 'Adobe Acrobat 7.0 Professional - Setup', '', 'Button1' )

;End User License agreement.
WinWaitActive ( 'Adobe Acrobat 7.0 Professional - Setup' )
ControlClick ( 'Adobe Acrobat 7.0 Professional - Setup', '', 'Button2' )

;Customer Information.
WinWaitActive ( 'Adobe Acrobat 7.0 Professional - Setup' )
ControlClick ( 'Adobe Acrobat 7.0 Professional - Setup', '', 'Button1' )

;Cache the Installer Files.
WinWaitActive ( 'Adobe Acrobat 7.0 Professional - Setup' )
ControlClick ( 'Adobe Acrobat 7.0 Professional - Setup', '', 'Button1' )

;PDFMaker Installation and Integration Information.
WinWaitActive ( 'Adobe Acrobat 7.0 Professional - Setup' )
ControlClick ( 'Adobe Acrobat 7.0 Professional - Setup', '', 'Button1' )

;Please select a setup type.
WinWaitActive ( 'Adobe Acrobat 7.0 Professional - Setup' )
ControlClick ( 'Adobe Acrobat 7.0 Professional - Setup', '', 'Button5' )

;Destination Folder.
WinWaitActive ( 'Adobe Acrobat 7.0 Professional - Setup' )
ControlClick ( 'Adobe Acrobat 7.0 Professional - Setup', '', 'Button1' )

; рапорт инсталятора о готовности к установки
WinWait ( 'Adobe Acrobat 7.0 Professional','Ready to Install the Program' )
WinWaitActive ( 'Adobe Acrobat 7.0 Professional','Ready to Install the Program' )
ControlClick ( 'Adobe Acrobat 7.0 Professional', 'Ready to Install the Program', 'Button1' )

; активация - начало
WinWait ( 'Adobe Acrobat Installer','Activation Options' )

;это окно иногда появляется, а иногда нет. Закономерность появления не найдена.
If WinExists ( 'Adobe Acrobat Installer', 'Activate Using the Internet' ) Then
WinActivate ( 'Adobe Acrobat Installer', 'Activate Using the Internet' )
WinWaitActive ( 'Adobe Acrobat Installer', 'Activate Using the Internet' )
ControlClick ( 'Adobe Acrobat Installer', 'Activate Using the Internet', 'Button3' )
EndIf

; продолжение активации - выбираем активировать по телефону
WinWaitActive ( 'Adobe Acrobat Installer','Activation Options' )
Sleep ( 500 )
ControlClick ( 'Adobe Acrobat Installer','Activation Options', 'Button2' )
Sleep ( 500 )
ControlClick ( 'Adobe Acrobat Installer','Activation Options', 'Button7' )

exit

amel27
31-05-2007, 11:39
volerв чем может быть проблема?проблема очевидна - при появлении окна отрабатывают сразу все 9 ControlClick'ов, т.е. для Button1, Button2, Button5, так как эти окна ничем не отличаются - используйте для идентификации текст окна. Кроме того:

- "предотвращение возможности множественного запуска скрипта" работать не будет, используйте функцию ProcessList();
- если окно может не появиться используйте WinWait() / WinWaitActive() с таймаутом ожидания.
- автоматизацию keygen'а лучше с форума убрать, задавайте вопросы по существу.

_Flame_
31-05-2007, 15:29
Сейчас объясню. У меня есть программа в папке, где такое дерево каталогов.

\
\Files

Мне надо, чтобы открывался txt файл, который лежит в папке \Files


Как мне такое сделать.. (Или как вообще txt открыть...)

voler
31-05-2007, 16:00
проблема очевидна - при появлении окна отрабатывают сразу все 9 ControlClick'ов, т.е. для Button1, Button2, Button5, так как эти окна ничем не отличаются - используйте для идентификации текст окна. Кроме того:

Скажи ты имеешь ввиду вставлять текст в

WinWaitActive ( 'Adobe Acrobat 7.0 Professional - Setup' )
ControlClick ( 'Adobe Acrobat 7.0 Professional - Setup', 'Вот Сюда?', 'Button1' ) И какой текст вводить?


&Next >
&Cancel
< &Back
The Wizard will install Adobe Acrobat 7.0 Professional on your computer. To continue, click Next.
WARNING: This program is protected by copyright law and international treaties.
BmpDlgImage
InstallShield
InstallShield
Welcome to the Adobe Acrobat 7.0 Professional Setup

DenchikK
31-05-2007, 16:08
Не могу понять, как осуществить задуманное.
Идея такая:
Надо в программе заполнять 3 поля: ссылка, логин, пароль.
Список ссылок, логинов и паролей находится в файлах links.txt, logins.txt, pass.txt
Для одной ссылки, пароля и логина я знаю как это делается:

#include <GUIConstants.au3>

If WinExists(@ScriptName) Then Exit
AutoItWinSetTitle(@ScriptName)
AutoItSetOption("TrayIconDebug", 1)
AutoItSetOption("SendKeyDelay", 60)
AutoItSetOption("MouseCoordMode", 0)

Global $file, $line_logins, $line_pass, $line_links

; Чтение Файла С Логинами

$file = FileOpen("logins.txt", 0)

If $file = -1 Then
MsgBox(0, "Error", "Unable to open file.")
Exit
EndIf

$line_logins = FileReadLine($file)

FileClose($file)

; Чтение Файла С Паролями

$file = FileOpen("pass.txt", 0)

If $file = -1 Then
MsgBox(0, "Error", "Unable to open file.")
Exit
EndIf

$line_pass = FileReadLine($file)

FileClose($file)

; Чтение Файла С Линками

$file = FileOpen("links.txt", 0)

If $file = -1 Then
MsgBox(0, "Error", "Unable to open file.")
Exit
EndIf

$line_links = FileReadLine($file)

FileClose($file)

; Запуск программы

Run ('avaload.exe')

; Построение GUI

GUICreate("Автозаполнение", 330, 300)

$checkCN1 = GUICtrlCreateCheckbox ($line_logins, 10, 10, 180, 20)
$checkCN2 = GUICtrlCreateCheckbox ("CHECKBOX 2", 10, 30, 180, 20)
$checkCN3 = GUICtrlCreateCheckbox ("CHECKBOX 3", 10, 50, 180, 20)

$Start = GUICtrlCreateButton("Заполнить", 200, 10, 120, 20)
$Close = GUICtrlCreateButton("Выход", 200, 30, 120, 20)

GUISetState ()

; Основная Работа Скрипта

While 1
$msg = GUIGetMsg()
If $msg = $GUI_EVENT_CLOSE Or $msg = $Close Then
Exit

ElseIf $msg = $Start Then

If GUICtrlRead($checkCN1) = 1 Then
WinActivate ("AvaRemoteLoad")
ControlSetText ( 'AvaRemoteLoad', '', 'Edit1', $line_links )
ControlSetText ( 'AvaRemoteLoad', '', 'Edit2', $line_logins)
ControlSetText ( 'AvaRemoteLoad', '', 'Edit3', $line_pass )
EndIf

If GUICtrlRead($checkCN2) = 1 Then
MsgBox(0,"Установка","Чекбокс 2",1)
EndIf

If GUICtrlRead($checkCN3) = 1 Then
MsgBox(0,"Установка","Чекбокс 3",1)
EndIf

EndIf
WEnd

а вот как переделать это под список - чтоб чекбоксов появлялось столько, сколько записей.

И ещё наверное, либо есть способ чтоб выделялся только один чекбокс, либо надо будет переделать под radiobutton.

Заранее благодарен за любую помощь.

Creat0R
31-05-2007, 19:20
_Flame_
Мне надо, чтобы открывался txt файл, который лежит в папке \Files
Открывался в редакторе по умолчанию? тогда так:


$FilePath = "Files\textfile.txt"
ShellExecute($FilePath)


DenchikK
как переделать это под список - чтоб чекбоксов появлялось столько, сколько записей.
Примерно так - это отдельный набросок для создания чекбоксов в зависимости от числа записей, которые предварительно нужно поместить в массив (см. функцию _FileReadToArray() ) :


;---это в начало файла---
#include <File.au3>
;------------------------

; Построение GUI
GUICreate("Автозаполнение", 330, 300)

Global $Links_Array
_FileReadToArray("links.txt", $Links_Array)

If IsArray($Links_Array) Then
$Top = 10
For $i = 1 To $Links_Array[0]
GUICtrlCreateCheckbox($Links_Array[$i], 10, $Top, 180, 20)
$Top += 20
Next
EndIf

$Start = GUICtrlCreateButton("Заполнить", 200, 10, 120, 20)
$Close = GUICtrlCreateButton("Выход", 200, 30, 120, 20)

GUISetState()


Если записей (каждая запись это отдельная строка в файле) больше чем чекбоксы помещаются в ГУИ, то также как я проделал с переменной $Top, нужно проделать и с левым выравниванием чекбоксов ($Left = 10 и потом прибавлять в цикле, скажем по 80).

DenchikK
01-06-2007, 01:47
Creat0R
Спасибо большое! Построение GUI идет как надо, но вот только теперь я не понимаю, как обрабатывать эти чекбоксы... Не понимаю, как это:


If GUICtrlRead($checkCN1) = 1 Then
WinActivate ("AvaRemoteLoad")
ControlSetText ( 'AvaRemoteLoad', '', 'Edit1', $Links_Array[1] )
ControlSetText ( 'AvaRemoteLoad', '', 'Edit2', $Logins_Array[1])
ControlSetText ( 'AvaRemoteLoad', '', 'Edit3', $Pass_Array[1])
EndIf


заставить работать с построением GUI...

Тупо заделал так, но теряется возможность определять, сколько чекбоксов надо сделать для содержимого файла логов:

#include <GUIConstants.au3>
#include <File.au3>

If WinExists(@ScriptName) Then Exit
AutoItWinSetTitle(@ScriptName)
AutoItSetOption("TrayIconDebug", 1)
AutoItSetOption("SendKeyDelay", 60)
AutoItSetOption("MouseCoordMode", 0)

; Запуск программы

Run ('avaload.exe')

; Построение GUI

GUICreate("Автозаполнение", 330, 300)

Global $Links_Array, $Logins_Array, $Pass_Array

_FileReadToArray("logins.txt", $Logins_Array)
_FileReadToArray("pass.txt", $Pass_Array)
_FileReadToArray("links.txt", $Links_Array)

$checkCN1 = GUICtrlCreateCheckbox ($Logins_Array[1], 10, 10, 180, 20)
$checkCN2 = GUICtrlCreateCheckbox ($Logins_Array[2], 10, 30, 180, 20)
$checkCN3 = GUICtrlCreateCheckbox ($Logins_Array[3], 10, 50, 180, 20)
$checkCN4 = GUICtrlCreateCheckbox ($Logins_Array[4], 10, 70, 180, 20)
$checkCN5 = GUICtrlCreateCheckbox ($Logins_Array[5], 10, 90, 180, 20)
$checkCN6 = GUICtrlCreateCheckbox ($Logins_Array[6], 10, 110, 180, 20)
$checkCN7 = GUICtrlCreateCheckbox ($Logins_Array[7], 10, 130, 180, 20)
$checkCN8 = GUICtrlCreateCheckbox ($Logins_Array[8], 10, 150, 180, 20)
$checkCN9 = GUICtrlCreateCheckbox ($Logins_Array[9], 10, 170, 180, 20)
$checkCN10 = GUICtrlCreateCheckbox ($Logins_Array[9], 10, 190, 180, 20)

$Start = GUICtrlCreateButton("Заполнить", 200, 10, 120, 20)
$Close = GUICtrlCreateButton("Выход", 200, 30, 120, 20)

GUISetState ()

; Основная Работа Скрипта

While 1
$msg = GUIGetMsg()
If $msg = $GUI_EVENT_CLOSE Or $msg = $Close Then
Exit

ElseIf $msg = $Start Then

If GUICtrlRead($checkCN1) = 1 Then
WinActivate ("AvaRemoteLoad")
ControlSetText ( 'AvaRemoteLoad', '', 'Edit1', $Links_Array[1])
ControlSetText ( 'AvaRemoteLoad', '', 'Edit2', $Logins_Array[1])
ControlSetText ( 'AvaRemoteLoad', '', 'Edit3', $Pass_Array[1])
EndIf

If GUICtrlRead($checkCN2) = 1 Then
WinActivate ("AvaRemoteLoad")
ControlSetText ( 'AvaRemoteLoad', '', 'Edit1', $Links_Array[2])
ControlSetText ( 'AvaRemoteLoad', '', 'Edit2', $Logins_Array[2])
ControlSetText ( 'AvaRemoteLoad', '', 'Edit3', $Pass_Array[2])
EndIf

If GUICtrlRead($checkCN3) = 1 Then
WinActivate ("AvaRemoteLoad")
ControlSetText ( 'AvaRemoteLoad', '', 'Edit1', $Links_Array[3])
ControlSetText ( 'AvaRemoteLoad', '', 'Edit2', $Logins_Array[3])
ControlSetText ( 'AvaRemoteLoad', '', 'Edit3', $Pass_Array[3])
EndIf

If GUICtrlRead($checkCN4) = 1 Then
WinActivate ("AvaRemoteLoad")
ControlSetText ( 'AvaRemoteLoad', '', 'Edit1', $Links_Array[4])
ControlSetText ( 'AvaRemoteLoad', '', 'Edit2', $Logins_Array[4])
ControlSetText ( 'AvaRemoteLoad', '', 'Edit3', $Pass_Array[4])
EndIf

If GUICtrlRead($checkCN5) = 1 Then
WinActivate ("AvaRemoteLoad")
ControlSetText ( 'AvaRemoteLoad', '', 'Edit1', $Links_Array[5])
ControlSetText ( 'AvaRemoteLoad', '', 'Edit2', $Logins_Array[5])
ControlSetText ( 'AvaRemoteLoad', '', 'Edit3', $Pass_Array[5])
EndIf

If GUICtrlRead($checkCN6) = 1 Then
WinActivate ("AvaRemoteLoad")
ControlSetText ( 'AvaRemoteLoad', '', 'Edit1', $Links_Array[5])
ControlSetText ( 'AvaRemoteLoad', '', 'Edit2', $Logins_Array[5])
ControlSetText ( 'AvaRemoteLoad', '', 'Edit3', $Pass_Array[5])
EndIf

If GUICtrlRead($checkCN7) = 1 Then
WinActivate ("AvaRemoteLoad")
ControlSetText ( 'AvaRemoteLoad', '', 'Edit1', $Links_Array[7])
ControlSetText ( 'AvaRemoteLoad', '', 'Edit2', $Logins_Array[7])
ControlSetText ( 'AvaRemoteLoad', '', 'Edit3', $Pass_Array[7])
EndIf

If GUICtrlRead($checkCN8) = 1 Then
WinActivate ("AvaRemoteLoad")
ControlSetText ( 'AvaRemoteLoad', '', 'Edit1', $Links_Array[8])
ControlSetText ( 'AvaRemoteLoad', '', 'Edit2', $Logins_Array[8])
ControlSetText ( 'AvaRemoteLoad', '', 'Edit3', $Pass_Array[8])
EndIf

If GUICtrlRead($checkCN9) = 1 Then
WinActivate ("AvaRemoteLoad")
ControlSetText ( 'AvaRemoteLoad', '', 'Edit1', $Links_Array[9])
ControlSetText ( 'AvaRemoteLoad', '', 'Edit2', $Logins_Array[9])
ControlSetText ( 'AvaRemoteLoad', '', 'Edit3', $Pass_Array[9])
EndIf

If GUICtrlRead($checkCN10) = 1 Then
WinActivate ("AvaRemoteLoad")
ControlSetText ( 'AvaRemoteLoad', '', 'Edit1', $Links_Array[10])
ControlSetText ( 'AvaRemoteLoad', '', 'Edit2', $Logins_Array[10])
ControlSetText ( 'AvaRemoteLoad', '', 'Edit3', $Pass_Array[10])
EndIf


EndIf
WEnd

Попробовал по изощряться для компактности с $i - не вышло...

Creat0R
01-06-2007, 03:45
DenchikK
как обрабатывать эти чекбоксы
По идее можно создавать динамический массив который будет содержать в себе все управляющие идентификаторы (ControlID) от созданных чекбоксов, и отслеживать каждый раз нужный проверяя элементы массива..

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

Я бы если честно предложил использовать события (Events), правда придётся немного переделать структуру всего GUI (не сильно :) ), для этого в начале скрипта нужно установить опции для срабатывания событии - Opt("GuiOnEventMode", 1), и потом всем (нужным для обработки) контролам присваивать функцию которая будет срабатывать на событие, так в дальнейшем легче обрабатывать элементы (имхо):


#include <GUIConstants.au3>
#include <File.au3>

If WinExists(@ScriptName) Then Exit
AutoItWinSetTitle(@ScriptName)
Opt("TrayIconDebug", 1)
Opt("SendKeyDelay", 60)
Opt("MouseCoordMode", 0)
Opt("GuiOnEventMode", 1)

Global $Array_logins, $Array_pass, $Array_links, $CheckBoxIDArray[1]

; Чтение Файла С Логинами
_FileReadToArray("logins.txt", $Array_logins)
If @error Then
MsgBox(0, "Error", "Unable to open file.")
Exit
EndIf

; Чтение Файла С Паролями
_FileReadToArray("pass.txt", $Array_pass)
If @error Then
MsgBox(0, "Error", "Unable to open file.")
Exit
EndIf

; Чтение Файла С Линками
_FileReadToArray("links.txt", $Array_links)
If @error Then
MsgBox(0, "Error", "Unable to open file.")
Exit
EndIf

; Запуск программы

Run ('avaload.exe')

; Построение GUI

GUICreate("Автозаполнение", 330, 300)
GUISetOnEvent(-3, "Quit")

$Top = 10
$Left = 10

;Чекбоксы для логинов
If IsArray($Array_logins) Then
For $i = 1 To $Array_logins[0]
ReDim $CheckBoxIDArray[UBound($CheckBoxIDArray)+1]
$CheckBoxIDArray[UBound($CheckBoxIDArray)-1] = GUICtrlCreateCheckbox($Array_logins[$i], $Left, $Top, 180, 20)
$Top += 20

If $Top >= 200 Then
$Top = 10
$Left += 90
EndIf
Next
EndIf

;Чекбоксы для паролей
If IsArray($Array_pass) Then
For $i = 1 To $Array_pass[0]
ReDim $CheckBoxIDArray[UBound($CheckBoxIDArray)+1]
$CheckBoxIDArray[UBound($CheckBoxIDArray)-1] = GUICtrlCreateCheckbox($Array_pass[$i], $Left, $Top, 180, 20)
$Top += 20
If $Top >= 160 Then
$Top = 10
$Left += 90
EndIf
Next
EndIf

;Чекбоксы для линков
If IsArray($Array_links) Then
For $i = 1 To $Array_links[0]
ReDim $CheckBoxIDArray[UBound($CheckBoxIDArray)+1]
$CheckBoxIDArray[UBound($CheckBoxIDArray)-1] = GUICtrlCreateCheckbox($Array_links[$i], $Left, $Top, 180, 20)
$Top += 20
If $Top >= 160 Then
$Top = 10
$Left += 90
EndIf
Next
EndIf

$Start = GUICtrlCreateButton("Заполнить", 200, 10, 120, 20)
GUICtrlSetOnEvent($Start, "Start")

$Close = GUICtrlCreateButton("Выход", 200, 30, 120, 20)
GUICtrlSetOnEvent($Close, "Quit")

GUISetState()

While 1
Sleep(10)
WEnd

; Основная Работа Скрипта - функция для обработки чекбоксов
Func Start()
For $i = 1 To UBound($CheckBoxIDArray)-1
If GUICtrlRead($CheckBoxIDArray[$i]) = 1 Then
WinActivate("AvaRemoteLoad")
$CurrentText = GUICtrlRead($CheckBoxIDArray[$i], 1)
ControlSetText('AvaRemoteLoad', '', 'Edit1', $CurrentText)
ControlSetText('AvaRemoteLoad', '', 'Edit2', $CurrentText)
ControlSetText('AvaRemoteLoad', '', 'Edit3', $CurrentText)
EndIf
Next
EndFunc

Func Quit()
Exit
EndFunc


P.S
Кстати, (кажется в последних версиях AutoIt) не обязательно активировать окно для ControlSetText() ;).

DenchikK
01-06-2007, 04:31
Creat0R
Ещё раз огромное спасибо!
Но я что то пока так и не смог разобраться, как же всё это работает...

Эти строки я убрал, так они не нужны и мешают (идея какая - если выбран 3 логин, то выбираются вместе с ним 3 пасс и 3 линк):

;Чекбоксы для паролей

If IsArray($Array_pass) Then
For $i = 1 To $Array_pass[0]
ReDim $CheckBoxIDArray[UBound($CheckBoxIDArray)+1]
$CheckBoxIDArray[UBound($CheckBoxIDArray)-1] = GUICtrlCreateCheckbox($Array_pass[$i], $Left, $Top, 180, 20)
$Top += 20
If $Top >= 160 Then
$Top = 10
$Left += 90
EndIf
Next
EndIf

;Чекбоксы для линков
If IsArray($Array_links) Then
For $i = 1 To $Array_links[0]
ReDim $CheckBoxIDArray[UBound($CheckBoxIDArray)+1]
$CheckBoxIDArray[UBound($CheckBoxIDArray)-1] = GUICtrlCreateCheckbox($Array_links[$i], $Left, $Top, 180, 20)
$Top += 20
If $Top >= 160 Then
$Top = 10
$Left += 90
EndIf
Next
EndIf


и видать из за этого результат этого один и тот же для всех полей:
; Основная Работа Скрипта - функция для обработки чекбоксов
Func Start()
For $i = 1 To UBound($CheckBoxIDArray)-1
If GUICtrlRead($CheckBoxIDArray[$i]) = 1 Then
WinActivate("AvaRemoteLoad")
$CurrentText = GUICtrlRead($CheckBoxIDArray[$i], 1)
ControlSetText('AvaRemoteLoad', '', 'Edit1', $CurrentText)
ControlSetText('AvaRemoteLoad', '', 'Edit2', $CurrentText)
ControlSetText('AvaRemoteLoad', '', 'Edit3', $CurrentText)
EndIf
Next
EndFunc


То бишь у меня получается в поля Линк, Логин, Пароль - пихается Логин... Сижу, пытаюсь понять, как, не выходит...

И скорее всего придётся отказаться от чекбоксов в пользу радиобуттонов, но структура case мне пока не даётся...

amel27
01-06-2007, 04:58
volerWinWait ( 'Adobe Acrobat 7.0 Professional - Setup', 'Сюда вставить тект окна, отличающий его от остальных')
ControlClick ( 'Adobe Acrobat 7.0 Professional - Setup', 'Сюда тот же текст, что и в предыдущей функции', 'Button1' )Текст окна можно посмотреть в штатной "AutoIt Window Info".

Creat0R
01-06-2007, 05:30
DenchikK
идея какая - если выбран 3 логин, то выбираются вместе с ним 3 пасс и 3 линк
Я если честно теперь ещё больше запутался в отношении самой идеи...

Если можешь, поясни пошагово (не программно, а как бы со стороны юзера) - Что должно произойти, какие чекбоксы будут созданы (их структура и цель назначения), что должно происходить при зажатом чекбоксе (после нажатия кнопки Start) и т.д.

А я попробую построить соответственно гуи и описать процесс... должно быть не сложно, но цель немного смутновата - когда есть чётко поставленная цель, остальное это время, и усидчивость! (+ немного знании ;)).

ChVL
01-06-2007, 10:34
В одной папке находятся скрипт .au3 и .exe исходного приложения. При запуске скрипта всё устанавливается правильно, до самого конца.
Через контекстное меню компилирую. При этом скомпилированный .exe "съедает" исходный .exe и имеет иконку такую же, как и скрипт. При запуске скомпилированного .exe ничего не происходит.
AutoIt версия 3.2.4.9.
Что делаю не так?

amel27
01-06-2007, 10:43
ChVLскомпилированный .exe "съедает" исходный .exe и имеет иконку такую же, как и скрипт.так ты выбери для скрипта другое имя, к примеру: Setup.exe - приложение, Setup_AU.au3 - скрипт, тогда никакого наложения имен при компиляции не будет

ChVL
01-06-2007, 11:04
amel27
выбери для скрипта другое имя
Действительно, всё работает! Спасибо!
Странно, что нигде ни в одном мануале о необходимости переименования скрипта нет ни слова. Это же не очевидно. Ну, съедает... А может так и надо?

V0van3
01-06-2007, 12:36
уважаемый amel27
к сожалению в данном случае не всё так просто. видимо вы не проверяли.
я добавил сразу после запуска Visicom
MsgBox(4096, "otladka", $pid) и оказалось что Visicom.exe имеет Pid=0 т.е. не отлавливает
т.к. Visicom запускается как дочерний процесс NTVDM.exe, последний продолжает оставаться в памяти при закрытии Visiciom то PID NTVDM'а как условие не годится.
В случае например с Notepad.exe или ещё с каким-нибуть другим приложением, которое висит в памяти как самостоятельный процесс проблем нет.
Естессно ваш код более правильный т.к. позволяет отловить именно тот процесс который запустил скрипт (если есть другой процесс с таким же именем), но в данном случае не в этом проблема.




© OSzone.net 2001-2012