Что нового

Обьединение 2 функций

prokazzza

Новичок
Сообщения
160
Репутация
2
Всем привет, столкнулся с этим в первый раз, подскажите как правильно заставить первую функцию использовать вторую??? Либо переделать в одну.


Код:
#include <IE.au3>
#include <MsgBoxConstants.au3>

$oIE = _IECreate("http://...")
WinSetState("[CLASS:IEFrame]", "", @SW_MAXIMIZE)

$email_0 = '[email protected]'
$email_1 = '[email protected]'
$email_2 = '[email protected]'

$email_input=""

Local $i = 0
Do
   MsgBox($MB_SYSTEMMODAL, "", "Проход: " & $i, 5)
   $i = $i + 1
	  Send_email_1()
	  Send_email_2()
Until $i = 3

Func Send_email_1()
   TrayTip("Инфо", "Вводим емаил", 5, 1)
      $emailEl=_IEGetObjById($oIE,"email") ; email это определение куда нужно вводить на странице IE.
      _IEFormElementSetValue($emailEl,$email_input) ; $email_input - тут должно вводиться каждый раз следующий емайл.
   Sleep(10000)
EndFunc

Func Send_email_2()
   Local Static $i = 0
   Local Const $aVals[3] = [$email_0, $email_1, $email_2]

   Send($aVals[$i])
   $i += 1
   If $i = UBound($aVals) Then $i = 0
EndFunc
 

beliy

Продвинутый
Сообщения
372
Репутация
72
Возможно лучше так:

Код:
#include <IE.au3>
#include <MsgBoxConstants.au3>

Local $aEmail[] = ['[email protected]', '[email protected]', '[email protected]']

$oIE = _IECreate("http://...")
WinSetState("[CLASS:IEFrame]", "", @SW_MAXIMIZE)

Send_email($aEmail, 3)

Func Send_email($aArrayMail, $iRepeat = 1) ; $aArrayMail - массив e-mail; iRepeat - количество проходов (по умолчанию 1)
   Local $email_input
   For $i = 0 To $iRepeat - 1
	  MsgBox($MB_SYSTEMMODAL, "", "Проход: " & $i + 1, 5)
	  For $k = 0 To UBound($aArrayMail, 1) - 1
		 TrayTip("Инфо (" & $k & ")", "Вводим емаил ( " & $aEmail[$k] &" )", 5, 1)
		 $emailEl=_IEGetObjById($oIE,$aEmail[$k]) ; Тут должно вводиться каждый раз следующий емайл, по порядку (вторая функция).
		 _IEFormElementSetValue($emailEl,$email_input)
		 Sleep(10000)
	  Next
   Next
EndFunc
 
Автор
P

prokazzza

Новичок
Сообщения
160
Репутация
2
beliy немного не то, надо чтобы в каждом проходе, вводился только 1 емайл. Т.е в первом проходе первый емайл, во втором второй емайл и т.д.
 

beliy

Продвинутый
Сообщения
372
Репутация
72
Уточняющий вопрос - если я правильно понял, то нужно ограничивать количество используемых e-mail? Если да,то наверное так:

Код:
Func Send_email($aArrayMail, $iRepeat = 1) ; $aArrayMail - массив e-mail; iRepeat - количество проходов/используемых mail (по умолчанию 1)
   Local $email_input
   For $i = 0 To $iRepeat - 1
      MsgBox($MB_SYSTEMMODAL, "", "Проход: " & $i + 1, 5)
      TrayTip("Инфо (" & $i & ")", "Вводим емаил ( " & $aArrayMail[$i] &" )", 5, 1)
      $emailEl=_IEGetObjById($oIE,$aArrayMail[$i]) ; Тут должно вводиться каждый раз следующий емайл, по порядку (вторая функция).
      _IEFormElementSetValue($emailEl,$email_input)
      Sleep(10000)
   Next
EndFunc
 
Автор
P

prokazzza

Новичок
Сообщения
160
Репутация
2
beliy я перепутал строку :'( :'( :'(

В скрипте:

Код:
Func Send_email_1()
   TrayTip("Инфо", "Вводим емаил", 5, 1)
      $emailEl=_IEGetObjById($oIE,"email") ; Тут должно вводиться каждый раз следующий емайл, по порядку (вторая функция).
      _IEFormElementSetValue($emailEl,$email_input)
   Sleep(10000)
EndFunc


Должно быть так:

Код:
Func Send_email_1()
   TrayTip("Инфо", "Вводим емаил", 5, 1)
      $emailEl=_IEGetObjById($oIE,"email") ; email это определение куда нужно вводить на странице IE.
      _IEFormElementSetValue($emailEl,$email_input) ; $email_input - тут должно вводиться каждый раз следующий емайл.
   Sleep(10000)
EndFunc


:(
 

alex33

Скриптер
Сообщения
1,457
Репутация
186
My variant: :smile:
Код:
; AutoIt version: 3.3.10.2
#include <IE.au3>
#include <MsgBoxConstants.au3>

Local $aEmail[] = [ _
'[email protected]', _
'[email protected]', _
'[email protected]' _
]

$oIE = _IECreate("http://...")
WinSetState("[CLASS:IEFrame]", "", @SW_MAXIMIZE)

Send_email($aEmail)

Func Send_email($aArrayMail)
   Local $email_input
   For $k = 0 To UBound($aArrayMail) - 1
      MsgBox($MB_SYSTEMMODAL, "", "Проход: " & $k + 1, 5)
         TrayTip("Инфо (" & $k & ")", "Вводим емаил ( " & $aEmail[$k] &" )", 5, 1)
         $emailEl=_IEGetObjById($oIE,$email_input)
         _IEFormElementSetValue($emailEl,$aEmail[$k]) ; Тут должно вводиться каждый раз следующий емайл, по порядку (вторая функция).
         Sleep(10000)
      Next
EndFunc
 

beliy

Продвинутый
Сообщения
372
Репутация
72
я перепутал строку

меняете
Код:
$emailEl=_IEGetObjById($oIE,$aArrayMail[$i]) ; Тут должно вводиться каждый раз следующий емайл, по порядку (вторая функция).
      _IEFormElementSetValue($emailEl,$email_input)


на

Код:
$emailEl=_IEGetObjById($oIE,"email") ; email это определение куда нужно вводить на странице IE.
      _IEFormElementSetValue($emailEl,$aArrayMail[$i]) ; $email_input - тут должно вводиться каждый раз следующий емайл.


т.э. внутри цикла For - Next в месте где нужно указывать e-mail пишете $aArrayMail[$i]




Добавлено:
Сообщение автоматически объединено:

и
Код:
Local $email_input


тогда тоже можно убрать
 
Автор
P

prokazzza

Новичок
Сообщения
160
Репутация
2
alex33 beliy не получается, все равно пока не введет все емайлы в списке, дальше функция не идет. :( :(
 

alex33

Скриптер
Сообщения
1,457
Репутация
186
Обновил сообщение 5. [ ? ]


Добавлено:
Сообщение автоматически объединено:

prokazzza сказал(а):
все равно пока не введет все емайлы в списке, дальше функция не идет.
Как это не идет? Можно чуть-чуть по подробнее?
 

beliy

Продвинутый
Сообщения
372
Репутация
72
все равно пока не введет все емайлы в списке, дальше функция не идет
сложно помогать когда в ТЗ автора много белых плям.
Если есть нееоходимость частично скрыть функционал скрипта и при этом хотите что б вам помогли правильно оформить структуру, то часть кода заменяют псевдо кодом. При этом и ваша идея остается скрытой от посторнних глаз и людям которые хотят помочь проще это сделать, видя полную картину как оно должно работать.

Код:
#include <IE.au3>
#include <MsgBoxConstants.au3>

Local $aEmail[] = ['[email protected]', '[email protected]', '[email protected]']

$oIE = _IECreate("http://...")
WinSetState("[CLASS:IEFrame]", "", @SW_MAXIMIZE)

Send_email($aEmail, 3)

Func Send_email($aArrayMail, $iRepeat = 1) ; $aArrayMail - массив e-mail; iRepeat - количество проходов/используемых mail (по умолчанию 1)
   For $i = 0 To $iRepeat - 1
      MsgBox($MB_SYSTEMMODAL, "", "Проход: " & $i + 1, 5)
      TrayTip("Инфо (" & $i & ")", "Вводим емаил ( " & $aArrayMail[$i] &" )", 5, 1)
      $emailEl=_IEGetObjById($oIE,"email") ; email это определение куда нужно вводить на странице IE.
      _IEFormElementSetValue($emailEl,$aArrayMail[$i]) ; $email_input - тут должно вводиться каждый раз следующий емайл.
      ; все то что должно происходить до неоходимости ввести новый e-mail. Далее для примера вызов функции, которая делает остальные операции которые должны будут сделаться в 1 проходе.
      _otherFunc()
      Sleep(10000)
   Next
EndFunc

Func _otherFunc()
    MsgBox(64, "Проход", "Тут пишем остальные действия для 1 прохода" )
EndFunc


P.S. вы так и не ответили нужно ли ограничивать количество используемых e-mail?
 
Автор
P

prokazzza

Новичок
Сообщения
160
Репутация
2
beliy Я разобрался, но появился вопрос, почему функция начинает вписывать с [email protected] ?? Ограничивать количество используемых e-mail не нужно.
 
Автор
P

prokazzza

Новичок
Сообщения
160
Репутация
2
beliy

Вот она сейчас выглядит. Не знаю почему, но начинает всегда со 2.

Код:
Func Send_email($aArrayMail, $iRepeat = 1)
      TrayTip("Инфо (" & $i & ")", "Вводим емаил ( " & $aArrayMail[$i] &" )", 5, 1)
      $emailEl=_IEGetObjById($oIE,"email")
      _IEFormElementSetValue($emailEl,$aArrayMail[$i])
      Sleep(10000)
EndFunc
 

alex33

Скриптер
Сообщения
1,457
Репутация
186
prokazzza, только не забывай что отсчёт элементов в массиве наченается с нуля.
0 - email1
1 - email2
2 - email3
Проверь переменную $i.
 

beliy

Продвинутый
Сообщения
372
Репутация
72
Вот она сейчас выглядит

А где у тебя цыкл For - Next? В твоем коде не понятно откуда берется переменная $i. Если нет необходимости ограничивать количество e-mail, то $iRepeat можно убрать и использовать UBound. Покажи полный конечный твой код заменив конфиденциальные части псевдокодом, иначе сложно угадывать в каком виде у тебя код и что в нем не так.

Код:
#include <IE.au3>
#include <MsgBoxConstants.au3>

Local $aEmail[] = ['[email protected]', '[email protected]', '[email protected]']

$oIE = _IECreate("http://...")
WinSetState("[CLASS:IEFrame]", "", @SW_MAXIMIZE)

Send_email($aEmail)

Func Send_email($aArrayMail) ; $aArrayMail - массив e-mail;
   For $i = 0 To UBound($aArrayMail) - 1 ; у тебя нет этой строки и не понятно откуда берется $i. В данном случае изначально $i = 0, 
      ; соответственно $aArrayMail[$i] изначально будет соответствовать $aArrayMail[0], в котором хранится [email protected]
      ; при следующем проходе $aArrayMail[$i] будет соответствовать $aArrayMail[1] (при каждом проходе $i увеличивается на 1) в котором хранится [email protected]
      ; и так до конца массива
      MsgBox($MB_SYSTEMMODAL, "", "Проход: " & $i + 1, 5)
      TrayTip("Инфо (" & $i & ")", "Вводим емаил ( " & $aArrayMail[$i] &" )", 5, 1)
      $emailEl=_IEGetObjById($oIE,"email") ; email это определение куда нужно вводить на странице IE.
      _IEFormElementSetValue($emailEl,$aArrayMail[$i]) ; $email_input - тут должно вводиться каждый раз следующий емайл.
      ; все то что должно происходить до неоходимости ввести новый e-mail. Далее для примера вызов функции, которая делает остальные операции которые должны будут сделаться в 1 проходе.
      _otherFunc()
      Sleep(10000)
   Next ; закрывает For который у тебя не указан
EndFunc

Func _otherFunc()
    MsgBox(64, "Проход", "Тут пишем остальные действия для 1 прохода" )
EndFunc
 
Автор
P

prokazzza

Новичок
Сообщения
160
Репутация
2
Вот как выглядит скелет:

Код:
#include <IE.au3>
#include <MsgBoxConstants.au3>

Global $Paused
HotKeySet("{PAUSE}", "TogglePause")
HotKeySet("{ESC}", "Terminate")

Local $aEmail[] = [ _
'[email protected]', _
'[email protected]', _
'[email protected]', _
'[email protected]', _
'[email protected]', _
'[email protected]' _
]

IE_Kill()
$oIE = _IECreate("https://")
WinSetState("[CLASS:IEFrame]", "", @SW_MAXIMIZE)

Local $i = 0
Do
   MsgBox($MB_SYSTEMMODAL, "", "Проход: " & $i, 5)
   $i = $i + 1
	  Start_IE_Page()
	  Circle_1()
	  Send_name()
	  Send_email($aEmail, 3)
	  Circle_2()
	  End()
Until $i = 6

Exit

Func IE_Kill()
   TrayTip("Инфо", "Убиваем процессы IE", 5, 1)
	  WinMinimizeAll()
	  $PIDs = ProcessList('iexplore.exe')
	  For $i = 1 To $PIDs[0][0]
		 If ProcessExists($PIDs[$i][1]) Then ProcessClose($PIDs[$i][1])
		 Next
   Sleep(5000)
EndFunc

Func Start_IE_Page()
	  _IENavigate($oIE, "https://")
	  _IELoadWait($oIE)
   Sleep(5000)
EndFunc

Func Circle_1()
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
EndFunc

Func Send_name()
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
EndFunc

Func Send_email($aArrayMail, $UBound)
      Local Static $i = 0
      TrayTip("Инфо (" & $i & ")", "Вводим емаил ( " & $aArrayMail[$i] &" )", 5, 1)
      $emailEl=_IEGetObjById($oIE,"email")
      _IEFormElementSetValue($emailEl,$aArrayMail[$i])
	  $i += 1
	  If $i = UBound($aArrayMail) Then $i = 0
      Sleep(5000)
EndFunc

Func Circle_2()
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
EndFunc

Func End()
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
EndFunc

Func TogglePause()
   $Paused = Not $Paused
   While $Paused
      Sleep(100)
	  TrayTip("Инфо", "Скрипт приостановлен", 50, 1)
   WEnd
   ToolTip("")
EndFunc

Func Terminate()
   Exit 0
EndFunc


Вот так все получилось, что задумывалось. Вписывается как надо и по порядку. Надеюсь все правильно сделал.
 

InnI

AutoIT Гуру
Сообщения
4,922
Репутация
1,432
prokazzza
Вариант "скелета"
Код:
#include <IE.au3>
#include <MsgBoxConstants.au3>

;~ Global $Paused
;~ HotKeySet("{PAUSE}", "TogglePause")
;~ HotKeySet("{ESC}", "Terminate")

Global $aEmail[] = [ _
'[email protected]', _
'[email protected]', _
'[email protected]', _
'[email protected]', _
'[email protected]', _
'[email protected]' _
]

;~ IE_Kill()
$oIE = _IECreate("https://")
WinSetState("[CLASS:IEFrame]", "", @SW_MAXIMIZE)

For $i = 0 To UBound($aEmail) - 1
   MsgBox($MB_SYSTEMMODAL, "", "Проход: " & $i, 5)
;~    Start_IE_Page()
;~    Circle_1()
;~    Send_name()
   Send_email()
;~    Circle_2()
;~    End()
Next

Func Send_email()
   TrayTip("Инфо (" & $i & ")", "Вводим емаил ( " & $aEmail[$i] &" )", 5, 1)
   Local $emailEl = _IEGetObjById($oIE, "email")
   _IEFormElementSetValue($emailEl, $aEmail[$i])
   Sleep(5000)
EndFunc
 
Верх