Что нового

Автоконфигурирование OUTlook 2003-2010 (заведение учетных записей)

millgan

Новичок
Сообщения
42
Репутация
2
Всем доброго времени суток! Стало интерестно сможет ли Autoit справиться вот с такой задачей:
Имеется 350 машинок, очень часто приходиться заводить или переделывать учетные записи почты Outlook (версии 2003 2007 2010) делать это вручную очень не айс(здание большое пока дойдешь уже обед))
Хочу написать скриптик с гуишкой :
- Сначала гуи спрашивает адрес почты до [email protected](так как домен всегда один) и пароль
- Затем версию Outlook (так как кнопки на которые Autoit будет жмакать располагаются по разнаму в разных версиях)
- ну и собственно должен компилить екзешник, который я отправлю канечному пользователю

При открытие екзешника должен открыться Outlook - учетные записи - и завестить новая или переписаться старая учетка!
Возможно такие скрипты уже написаны, если да киньте ссылку посмотреть
Жду ответов
 
Автор
M

millgan

Новичок
Сообщения
42
Репутация
2
Код:
#include <GUIConstants.au3> 
GUICreate ("Добавление учетной записи почты", 260, 230)
$name = Inputbox("Name", "name", "Василий Ленин", "", _
    -1, -1, 0, 0)
$login = InputBox("Почта", "Mail", "[email protected]", "", _
    -1, -1, 0, 0)
	$passwd = InputBox("Security Check", "Enter your password.", "", "*")



 $KEY="HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\OUTLOOK.EXE"
 $PATH=RegRead($KEY,"Path")
 ShellExecute('rundll32.exe','shell32.dll,Control_RunDLL "'&$PATH&'\MLCFG32.CPL"')

WinWaitActive("Настройка почты - Outlook")
Send("{ENTER}")

WinWaitActive("Настройка учетных записей")
Send("{TAB}")
Send("{ENTER}")

WinWaitActive("Добавление новой учетной записи электронной почты")
Send("{TAB}")
Send("{TAB}")
Send("{TAB}")
Send("{TAB}")
Send("{Space}")

Send("{TAB}")
Send("{Space}")
WinWaitActive("Добавление новой учетной записи электронной почты")	
Send("{TAB}")
Send("{TAB}")
Send("{Space}")



Send($name)
Send("{TAB}")
Send("[email protected]")
Send("{TAB}")
Send("{TAB}")
Send("mail.sima-land.ru")
Send("{TAB}")
Send("mail.sima-land.ru")
Send("{TAB}")
Send("[email protected]")
Send("{TAB}")
Send("150285pry")
Send("{TAB}")
Send("{TAB}")
Send("{TAB}")
Send("{TAB}")
Send("{Space}")
WinWaitActive("Настройки электронной почты Интернета")
Send("{TAB}")
Send("{TAB}")
Send("{TAB}")
Send("{TAB}")
Send("{TAB}")
Send("{right}")
Send("{TAB}")
Send("{Space}")
Send("{TAB}")
Send("{TAB}")
Send("{Space}")
WinWaitActive("Добавление новой учетной записи электронной почты")
Send("{Space}")
Send("{Space}")
WinWaitActive("Настройка учетных записей")
Send("{TAB}")
Send("{TAB}")
Send("{TAB}")
Send("{TAB}")
Send("{TAB}")
Send("{TAB}")
Send("{Space}")
WinWaitActive("Настройка учетных записей")
Send("{TAB}")
Send("{TAB}")
Send("{Space}")
WinWaitActive("Настройка почты - Outlook")
Send("{TAB}")
Send("{TAB}")
Send("{TAB}")
Send("{Space}")
MsgBox(4096, "Done", "Учетная запись добавлена", 10)


Вот что пока получилось, обьясните как сделать 1-о окошко gui в котором бы спрашивало имя почту и пароль, а не три окошка как сейчас?
 

madmasles

Модератор
Глобальный модератор
Сообщения
7 790
Репутация
2 319
qsort,
А зачем так?
Код:
;...
$name = ControlGetText("Добавление учетной записи почты", "",  $name_input)
;...

Код:
#include <GUIConstants.au3>

GUICreate('Добавление учетной записи почты', 260, 230)
$nName_input = GUICtrlCreateInput('', 30, 20)
$nLogin_input = GUICtrlCreateInput('', 30, 40)
$nPasswd_input = GUICtrlCreateInput('', 30, 60)
$nButton = GUICtrlCreateButton('Записать очередного гаврика в Outlook', 20, 120, 220, 70)
GUISetState()
While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit
		Case $nButton
			$sName = GUICtrlRead($nName_input)
			$sLogin = GUICtrlRead($nLogin_input)
			$sPasswd = GUICtrlRead($nPasswd_input)
			If Not $sName Or Not $sLogin Or Not $sPasswd Then
				MsgBox(16, 'Error', 'Вы ввели не все данные.')
			Else
				MsgBox(64, 'OK', $sName & @CRLF & $sLogin & @CRLF & $sPasswd)
				;а здесь вызов функции
			EndIf
	EndSwitch
WEnd

qsort [?]
И потом, конструкция с заголовком окна всяко поуниверсальней будет.
Надежнее будет с Handle, а не с заголовком и в чужом окне, а для своего созданного есть свои функции. Можно и с помощью API
Код:
$hEdit = GUICtrlGetHandle($nName_input)
MsgBox(64, '$nName_input', _GUICtrlEdit_GetText($hEdit))
Только зачем стрелять из пушки по воробьям?


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

qsort [?]
С чужим окошком проще и надежней использовать именно конструкцию "с заголовком в чужом окне". Не один раз натыкался на то, что она отрабатыает, с вариант с хэндлом - нет.
Приведите, пожалуйста, пример, где с Handle не отрабатывает.
 

madmasles

Модератор
Глобальный модератор
Сообщения
7 790
Репутация
2 319
qsort
Вы в своем примере неправильно принимаете Handle в $CmdLine. Параметры передаются в виде строки. На входе надо конвертировать его обратно в Handle. Вот так работает.
1. Скрипт с любым именем
Код:
#include <GUIConstants.au3>

GUICreate('TestGui', 200, 110)
$nEdit = GUICtrlCreateEdit('Test text', 5, 5, 190, 50)
$hEdit = GUICtrlGetHandle($nEdit)
Run(@AutoItExe & ' /AutoIt3ExecuteScript 1.au3 ' & $hEdit)
GUISetState()

While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit
	EndSwitch
WEnd

2.Скрипт с именем 1.au3
Код:
#include <GuiEdit.au3>

If $CmdLine[0] Then
	;MsgBox(64, 'Info', 'IsString: ' & IsString($CmdLine[1]) & @CRLF & _
	;		'IsHWnd: ' & IsHWnd($CmdLine[1]) & @CRLF & 'IsHWnd: ' & IsHWnd(HWnd($CmdLine[1])))
	MsgBox(64, '', _GUICtrlEdit_GetText(HWnd($CmdLine[1])))
Else
	MsgBox(16, 'Error', 'No CmdLine')
EndIf
Попробуйте положить оба скрипта в одну папку и запустить. Все работает. :whistle:

PS
Окна с одинаковыми заголовками могут быть, с одинаковыми Handle - никогда.
 
Автор
M

millgan

Новичок
Сообщения
42
Репутация
2
Спс за ответы)) Взял такой вариант
Код:
#include <GUIConstants.au3>

GUICreate('Добавление учетной записи почты', 260, 230)
$nName_input = GUICtrlCreateInput('', 30, 20)
$nLogin_input = GUICtrlCreateInput('', 30, 40)
$nPasswd_input = GUICtrlCreateInput('', 30, 60)
$nButton = GUICtrlCreateButton('GO', 20, 120, 220, 70)
GUISetState()
While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            Exit
        Case $nButton
            $sName = GUICtrlRead($nName_input)
            $sLogin = GUICtrlRead($nLogin_input)
            $sPasswd = GUICtrlRead($nPasswd_input)
            If Not $sName Or Not $sLogin Or Not $sPasswd Then
                MsgBox(16, 'Error', 'Вы ввели не все данные.')
            Else
                MsgBox(64, 'OK', $sName & @CRLF & $sLogin & @CRLF & $sPasswd)
                 $KEY="HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\OUTLOOK.EXE"
 $PATH=RegRead($KEY,"Path")
 ShellExecute('rundll32.exe','shell32.dll,Control_RunDLL "'&$PATH&'\MLCFG32.CPL"')

WinWaitActive("Почта")
Send("{TAB}")
Send("{Space}")
Send("mail")
WinWaitActive("Добавление новой учетной записи электронной почты")


WinWaitActive("Добавление новой учетной записи электронной почты")
Send("{TAB}")
Send("{TAB}")
Send("{TAB}")
Send("{TAB}")
Send("{Space}")
Send("{TAB}")
Send("{Space}")

WinWaitActive("Добавление новой учетной записи электронной почты")	
Send("{TAB}")
Send("{TAB}")
Send("{Space}")



Send($name_input)
Send("{TAB}")
Send($login_input)
Send("{TAB}")
Send("{TAB}")
Send("mail.sima-land.ru")
Send("{TAB}")
Send("mail.sima-land.ru")
Send("{TAB}")
Send("[email protected]")
Send("{TAB}")
Send($passwd_input)
Send("{TAB}")
Send("{TAB}")
Send("{TAB}")
Send("{TAB}")
Send("{Space}")
WinWaitActive("Настройки электронной почты Интернета")
Send("{TAB}")
Send("{TAB}")
Send("{TAB}")
Send("{TAB}")
Send("{TAB}")
Send("{right}")
Send("{TAB}")
Send("{Space}")
Send("{TAB}")
Send("{TAB}")
Send("{Space}")
WinWaitActive("Добавление новой учетной записи электронной почты")
Send("{Space}")
Send("{Space}")
WinWaitActive("Настройка учетных записей")
Send("{TAB}")
Send("{TAB}")
Send("{TAB}")
Send("{TAB}")
Send("{TAB}")
Send("{TAB}")
Send("{Space}")
WinWaitActive("Настройка учетных записей")
Send("{TAB}")
Send("{TAB}")
Send("{Space}")
WinWaitActive("Настройка почты - Outlook")
Send("{TAB}")
Send("{TAB}")
Send("{TAB}")
Send("{Space}")
MsgBox(4096, "Done", "Учетная запись добавлена", 10)

            EndIf
    EndSwitch
WEnd
 
 $KEY="HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\OUTLOOK.EXE"
 $PATH=RegRead($KEY,"Path")
 ShellExecute('rundll32.exe','shell32.dll,Control_RunDLL "'&$PATH&'\MLCFG32.CPL"')

WinWaitActive("Почта")
Send("{TAB}")
Send("{Space}")
Send("mail")
WinWaitActive("Добавление новой учетной записи электронной почты")


WinWaitActive("Добавление новой учетной записи электронной почты")
Send("{TAB}")
Send("{TAB}")
Send("{TAB}")
Send("{TAB}")
Send("{Space}")
Send("{TAB}")
Send("{Space}")

WinWaitActive("Добавление новой учетной записи электронной почты")	
Send("{TAB}")
Send("{TAB}")
Send("{Space}")



Send($name_input)
Send("{TAB}")
Send($login_input)
Send("{TAB}")
Send("{TAB}")
Send("mail.sima-land.ru")
Send("{TAB}")
Send("mail.sima-land.ru")
Send("{TAB}")
Send("[email protected]")
Send("{TAB}")
Send($passwd_input)
Send("{TAB}")
Send("{TAB}")
Send("{TAB}")
Send("{TAB}")
Send("{Space}")
WinWaitActive("Настройки электронной почты Интернета")
Send("{TAB}")
Send("{TAB}")
Send("{TAB}")
Send("{TAB}")
Send("{TAB}")
Send("{right}")
Send("{TAB}")
Send("{Space}")
Send("{TAB}")
Send("{TAB}")
Send("{Space}")
WinWaitActive("Добавление новой учетной записи электронной почты")
Send("{Space}")
Send("{Space}")
WinWaitActive("Настройка учетных записей")
Send("{TAB}")
Send("{TAB}")
Send("{TAB}")
Send("{TAB}")
Send("{TAB}")
Send("{TAB}")
Send("{Space}")
WinWaitActive("Настройка учетных записей")
Send("{TAB}")
Send("{TAB}")
Send("{Space}")
WinWaitActive("Настройка почты - Outlook")
Send("{TAB}")
Send("{TAB}")
Send("{TAB}")
Send("{Space}")
MsgBox(4096, "Done", "Учетная запись добавлена", 10)


Вот что осталось под вопросом: Данный скрипт работает только с Outlook 2010, к сожалению ввиду наличия блондинистых телок и консервативных чувачков поставить 2010 Office получается не всем! есть и 2003 и 2007 версии. Конечна можно написать три разных скрипта под три версии или добавить в гуишку выбор версии, но всеже хочется узнать возможно ли реализовать автоматическое распознавание версии???
 

madmasles

Модератор
Глобальный модератор
Сообщения
7 790
Репутация
2 319
millgan [?]
но всеже хочется узнать возможно ли реализовать автоматическое распознавание версии?
Попробуйте так
Код:
$oOutlook = ObjCreate('Outlook.Application')
If IsObj($oOutlook) Then
	MsgBox(64, 'Info', 'Версия Outlook: ' & $oOutlook.Version)
Else
	MsgBox(16, 'Error', 'Error')
EndIf


PS
Наверняка с помощью Outlook.Application можно все сделать без бесконечных Send("{TAB}") и т.д.
 
Автор
M

millgan

Новичок
Сообщения
42
Репутация
2
madmasles сказал(а):
millgan [?]
но всеже хочется узнать возможно ли реализовать автоматическое распознавание версии?
Попробуйте так
Код:
$oOutlook = ObjCreate('Outlook.Application')
If IsObj($oOutlook) Then
	MsgBox(64, 'Info', 'Версия Outlook: ' & $oOutlook.Version)
Else
	MsgBox(16, 'Error', 'Error')
EndIf


PS
Наверняка с помощью Outlook.Application можно все сделать без бесконечных Send("{TAB}") и т.д.
хммм интересно)) на 2007 выдает 12.0.0.6423
Завтро на работе попробую на других машинах запустить
 

madmasles

Модератор
Глобальный модератор
Сообщения
7 790
Репутация
2 319
millgan [?]
на 2007 выдает 12.0.0.6423
У меня на 2003 - 11.0.0.8330. Подозреваю, что на 2010 будет 14.0..., а не 13. ;D

Здесь посмотрите про объект Outlook.Application.
Пример:
Код:
$oOutlook = ObjCreate('Outlook.Application')
$oContact = $oOutlook.CreateItem(2)
With $oContact
	.FirstName = 'Вася Пупкин'
	.Email1Address = '[email protected]'
	.Save
	.Display
EndWith
 
Автор
M

millgan

Новичок
Сообщения
42
Репутация
2
)))
2010:
14.0.0.4760
 
Автор
M

millgan

Новичок
Сообщения
42
Репутация
2
помогите разобраться как сделать условие по Title окна?
если title допустим "почта"
то сделать тото

а если"Настройка почты - mail" то тото)))

madmasles выложи скрипт тогда тут если у тебя открылось
 

madmasles

Модератор
Глобальный модератор
Сообщения
7 790
Репутация
2 319
millgan [?]
как сделать условие по Title окна?
Попробуйте так:
Код:
$sTitle_1 = 'Настройка почты'
$sTitle_2 = 'Почта'
$sTitle_3 = 'Еще что-то'

If WinExists($sTitle_1) Then
	;делаем 1
ElseIf WinExists($sTitle_2) Then
	;делаем 2
ElseIf WinExists($sTitle_3) Then
	;делаем 2
Else
	;ничего не делаем
EndIf
;или так
Dim $aTitle[4][2] = [[3],['Настройка почты', 'Button1'],['Почта', 'Button2'],['Еще что-то', 'Button3']]

For $i = 1 To $aTitle[0][0]
	If WinExists($aTitle[$i][0]) Then
		_MySuperFunc($aTitle[$i][0], $aTitle[$i][1])
		ExitLoop
	EndIf
Next

Func _MySuperFunc($sTitle, $sControl)
	ControlClick($sTitle, '', $sControl)
EndFunc   ;==>_MySuperFunc
 

serzzz

Новичок
Сообщения
18
Репутация
0
A создать акаунт можно с
Код:
ObjCreate('Outlook.Application')?
 
Верх