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

» AutoIT

Автор: DSWQ
Дата сообщения: 05.07.2010 17:36
Здравствуйте! Подскажите, пожалуйста, пример кода для GUI с маленькими(минимизированными) кнопками управления.
Знаю, нужно в сторону стилей копать, но разобраться с ними не могу(
Автор: ViSiToR
Дата сообщения: 05.07.2010 18:29
DSWQ 18:36 05-07-2010
Цитата:
нужно в сторону стилей копать

Зачем, просто укажите размеры элементов:


Код: #include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>

FileChangeDir(@DesktopDir)

$hGUI = GUICreate("Test Script", 300, 200)

$nMiniButton = GUICtrlCreateButton("", 20, 40, 12, 12)
$nMiniCheckBox = GUICtrlCreateCheckbox("", 20, 80, 12, 12)

GUISetState(@SW_SHOW, $hGUI)

While 1
Switch GUIGetMsg()
Case $GUI_EVENT_CLOSE
Exit
EndSwitch
WEnd
Автор: DSWQ
Дата сообщения: 05.07.2010 19:39
ViSiToR, спасибо, но я, видимо, некорректно задал вопрос - речь о стандартных кнопках управления: "Закрыть", "Развернуть", "Свернуть".
Просто есть скрипт-приложение с очень маленьким GUI, стандартные кнопки смотрятся некрасиво.


Автор: DiaBlo90
Дата сообщения: 05.07.2010 21:02
Всем доброго времени суток.
МБ кто знает как можно сделать окно lineage без рамки?
Пробовал так

Код: #include <WindowsConstants.au3>
;Global Const $L2_WinClass = "[TITLE:Lineage II;Class:l2UnrealWWindowsViewportWindow]";
$hWindow = WinGetHandle($L2_WinClass)
WinActivate ($L2_WinClass);
sleep(1000)
_WinSetStyle($hWindow)
Func _WinSetStyle($hWnd)
DllCall("User32.dll", "int", "SetWindowLong", "hwnd", $hWnd, "int", "GWL_STYLE", "int", 0x14000000)
DllCall("User32.dll", "int", "SetWindowLong", "hwnd", $hWnd, "int", "GWL_EXSTYLE", "int", 0x0004000)
DllCall("User32.dll", "int", "SetWindowPos", "hwnd", $hWnd, "hwnd", 0, "int", 0, "int", 0, "int", 800, "int", 600, "int", "SWP_NOZORDER | SWP_FRAMECHANGED")
EndFunc
Автор: ViSiToR
Дата сообщения: 05.07.2010 23:02
DSWQ 20:39 05-07-2010
Цитата:
речь о стандартных кнопках управления: "Закрыть", "Развернуть", "Свернуть"

Тогда только так:


Код: #include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <StaticConstants.au3>

$iWidth = 200
$iHeight = 150

$hGUI = GUICreate("Tiny GUI", $iWidth, $iHeight, -1, -1, BitOR($WS_POPUP, $WS_BORDER))

$nMinimize_Button = GUICtrlCreateButton("—", $iWidth - 35, 3, 16, 16)
GUICtrlSetColor(-1, 0xFFFFFF)
GUICtrlSetBkColor(-1, 0x0000FF)

$nClose_Button = GUICtrlCreateButton("X", $iWidth - 19, 3, 16, 16)
GUICtrlSetColor(-1, 0xFFFFFF)
GUICtrlSetBkColor(-1, 0xFF0000)

GUICtrlCreateLabel("", 0, 0, $iWidth, 22, $WS_CLIPSIBLINGS, BitOR($WS_EX_DLGMODALFRAME, $GUI_WS_EX_PARENTDRAG))
GUICtrlSetBkColor(-1, 0x9D9DFF)

GUISetState(@SW_SHOW, $hGUI)

While 1
Switch GUIGetMsg()
Case $GUI_EVENT_CLOSE, $nClose_Button
Exit
Case $nMinimize_Button
GUISetState(@SW_MINIMIZE, $hGUI)
EndSwitch
WEnd
Автор: DiaBlo90
Дата сообщения: 05.07.2010 23:12

Цитата:
Странно, не должно у меня этот пример закрывает окно подставленное в $L2_WinClass.

Вот пример использования WinSetStyle [?].


Аналогично, на окне ла2 никак не пашет(((
Автор: ViSiToR
Дата сообщения: 06.07.2010 16:07
DiaBlo90 00:12 06-07-2010
Цитата:
на окне ла2 никак не пашет

Ну, я не знаю что это за окно, поэтому всё что могу посоветовать, так это посмотреть стили этого окна, и на основе этого уже задавать новые.
Автор: AZJIO
Дата сообщения: 06.07.2010 16:55
Обновил тестовый скрипт "Поиск дубликатов"
Автор: DiaBlo90
Дата сообщения: 06.07.2010 19:01

Цитата:
Ну, я не знаю что это за окно, поэтому всё что могу посоветовать, так это посмотреть стили этого окна, и на основе этого уже задавать новые.


А поподробнее можно или ссылочку какую-нить?
Автор: ViSiToR
Дата сообщения: 06.07.2010 22:33
DiaBlo90 20:01 06-07-2010
Цитата:
поподробнее можно

С помощью «Au3Info Tool» (поставляется вместе с AutoIt) нужно посмотреть стили:

и проверить:


Код: [no]If BitAND($nStyle, $WS_BORDER) = $WS_BORDER Then _WinSetStyle("Title", $WS_POPUPWINDOW)[/no]
Автор: DSWQ
Дата сообщения: 06.07.2010 23:44
ViSiToR
Спасибо, то что нужно

Автор: Trrrbit
Дата сообщения: 07.07.2010 00:14
Всем привет!

В двух словах почему сюда обратился:
Устанавливаю людям виндовсы из tib-архива (acronis true image). т.е. гружу лайв-cd, запускаю акронис и говорю ему ставить на диск С: заранее подготовленную винду из tib-архива.
так вот:
после успешной распаковки перегружаю комп и распакованная винда начинает ставить драйвера на новое оборудование. в итоге находит устройство и мастер установки оборудования предлагает нажать далее (а потом готово).
НО! Если клавиатура и мышь USBшные, то они (обычно) ставятся в последнюю очередь. В итоге - нажать кнопку далее(готово) не получается ни с клавы ни мышью. Если мышь или клава PS\2 то проблем не возникает. Они сразу работают
ТЕПЕРЬ ПРОСЬБА (ВОПРОС):
Напишите мне пожалуйста скрипт для autoit, который будет находить окно мастера установки нового оборудования и, скажем, будет нажимать ENTER, тем самым активируя кнопку ДАЛЕЕ или ГОТОВО. И так пока не перестанут появляться окна мастера установки нового оборудования (или например раз 30 нажать ENTER с интервалом в 10-15 сек).

Если не сложно - можно сразу готовый EXE-файл.
Если будет вышеуказанная ситуация - положу его в автозагрузку с-под лайв-cd и перезагружу комп. винда скажет "найдено новое оборудование, нажмите далее", а autoit ей сам нажмет ENTER (или ДАЛЕЕ/ГОТОВО) и установит драйвер. Подождет следующего вопроса об установке драйвера и снова нажмет далее.

ЗАРАНЕЕ БЛАГОДАРЕН...
Автор: AZJIO
Дата сообщения: 07.07.2010 07:35
Постмотрите перевод частичный UDFs3 (2.1Мб), 34 функции перевёл, ну и шаблонные тексты переведены по всем страничкам.
Автор: KiLL
Дата сообщения: 07.07.2010 10:48
Trrrbit, вы тему читали? На четвертой странице, в начале мой пост маленькой програмки закрывающей окна мастера установки оборудования. Именно закрывает, ибо просто нажать в этом окне Enter не прокатит. Это один из кирпичиков.

Я делаю то же что и вы, вот в таком порядке.
1. Загружаясь с WinPE диска акронис разворачивает готовый настроенный образ.
2. Система стартует и пытается установить драйвера. В системе никаких драйверов нету, поэтому она устанавливает только то что может, а на все остальное открывает одно за одним окошки мастера установки оборудования. Вся беда в том, что если у вас не установлена сетевая карта и система спрашивает на нее драйвера, то пока вы не дадите системе драйвера на карту или не пошлете систему нафиг, она не продолжит установку известных ей устройств и не поставит ваши USB клавомыши.
3. Поэтому моя программа просто закрывает эти окошки, ведет подсчет закрытых окошек мастера. Когда количество закрытых окон мастера сходится с количество неизвестных устройств в диспечере задач, то программа перестает следить за окошками мастера оборудования и передает управление установщику оборудования.
4. Установка драйверов происходит с внешнего носителя, не привязана к буквам диска и использует обычные ДрайверПаки типа Driverpacks.net или DriverPacks Solution.
5. Далее ребут и смотрим чтобы все установилось, далее еще раз ребут, чтобы разрешение экрана и размерность элеметнов выровнялась.

Вся работа в развернутой системе происходит автоматом. Основной упор на установку именно неизвестных (желтых) устройств, т.е. если система установила пусть даже старый драйвер устройства, я его не обновляю, для меня важно общее время выполнения. Пока еще сыровато и есть глюки, но исправляю потиху.
Автор: DiaBlo90
Дата сообщения: 07.07.2010 11:39
ViSiToR
Спс оромное)))
Разобрался в чем косяк был))))
Тестил на висте, забыл добавить права админа
Терь все норм))))
Автор: Trrrbit
Дата сообщения: 07.07.2010 13:11
KiLL
Спасибо за ответ. Но для меня это темный лес... Можно сразу ЕХЕ-файлик. Мне даже на принципиально как он работатет. Мне нужно чтобы клавомыши работали....
БУДУ ОЧЕНЬ БЛАГОДАРЕН.
Автор: KiLL
Дата сообщения: 07.07.2010 22:31
Trrrbit, если бы ты скомпилировал выложенный ранее код, то уже имел бы EXE.

http://rapidshare.com/files/405565063/BypassHardwareWizard.exe

Автор: Trrrbit
Дата сообщения: 08.07.2010 01:02
KiLL
Спасибо большое. При первой возможности опробую
Автор: AZJIO
Дата сообщения: 10.07.2010 06:00
[more=Секундомер]
Код: #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_OutFile=Stopwatch.exe
#AutoIt3Wrapper_icon=Stopwatch.ico
#AutoIt3Wrapper_Compression=4
#AutoIt3Wrapper_UseAnsi=y
#AutoIt3Wrapper_Res_Comment=-
#AutoIt3Wrapper_Res_Description=Stopwatch.exe
#AutoIt3Wrapper_Res_Fileversion=0.5.0.0
#AutoIt3Wrapper_Res_Fileversion_AutoIncrement=n
#AutoIt3Wrapper_Res_LegalCopyright=AZJIO
#AutoIt3Wrapper_Res_Language=1049
#AutoIt3Wrapper_Run_AU3Check=n
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****

; @AZJIO 2.09.2010 (AutoIt3_v3.2.12.1+)
#NoTrayIcon

; En
$LngTitle='Stopwatch'
$LngStart='Start'
$LngSp='Stop'
$LngPs='Pause'
$LngRe='Reset'
$LngMem='Memory'
$LngSig='Signal'
$LngAbout='About'
$LngVer='Version'
$LngSite='Site'
$LngHK='HotKey'
$LngHKMsg= 'Start - Enter, UP'&@CRLF&'Pause - Down, Pause-Break'&@CRLF&'Reset - Delete, 0, Numpad0'&@CRLF&'Memory - Space'&@CRLF&'Signal - Numpad., Alt+.'
$LngSgTx='Will Enter time, in which'&@CRLF&'must sound signal'
$LngTm='Hour | Minute | Seconds'
$LngSpk='1. Speaker'
$LngMSpk='2. Tune Speaker'
$LngCn='Cancel'
$LngErr='Error'
$LngErrMsg='Time must be not installed in 0,'&@CRLF&'a name of the conservation must be incorporated,'&@CRLF&'in name must not be a symbol "|"'
$LngErrMsg2='Path not exist.'
$LngErrMsg3='Choose other name of the save'
$LngErrMsg4='Time must be not installed in 0'
$LngSl="Select File"
$LngType="Media-File"
$LngNx='Next'
$LngCm='3. Select path'
$LngMP='internal device for mp3'
        


; Ru
; если есть русский в раскладках клавиатуры, то использовать его
For $i = 1 to 5
    $LngN = RegEnumVal("HKCU\Keyboard Layout\Preload", $i)
    If @error <> 0 Then ExitLoop
    If RegRead("HKCU\Keyboard Layout\Preload", $LngN) = 00000419 Then
        $LngTitle='Секундомер'
        $LngStart='Старт'
        $LngSp='Стоп'
        $LngPs='Пауза'
        $LngRe='Сброс'
        $LngMem='Память'
        $LngSig='Сигнал'
        $LngAbout='О программе'
        $LngVer='Версия'
        $LngSite='Сайт'
        $LngHK='Горячие клавиши'
        $LngHKMsg= 'Старт - Enter, UP'&@CRLF&'Пауза - Down, Pause-Break'&@CRLF&'Сброс - Delete, 0, Numpad0'&@CRLF&'Память - Space'&@CRLF&'Сигнал - Numpad., Alt+.'
        $LngSgTx='Введите время, в которое'&@CRLF&'должен прозвучать сигнал'
        $LngTm='Часы | Минуты | Секунды'
        $LngSpk='1. Динамик ПК'
        $LngMSpk='2. Мелодия динамика ПК'
        $LngCn='Отмена'
        $LngErr='Мелкая ошибка'
        $LngErrMsg='Время не должно быть установлено в 0,'&@CRLF&'должно быть введено имя сохранения,'&@CRLF&'в имени не должно быть символа "|"'
        $LngErrMsg2='Путь не существует.'
        $LngErrMsg3='Запись с таким именем уже существует'
        $LngErrMsg4='Время не должно быть установлено в 0'
        $LngSl="Указать файл"
        $LngType="Медиа-файл"
        $LngNx='Далее'
        $LngCm='3. Укажите путь'
        $LngMP='внутренее устройство для mp3'
        ExitLoop
    EndIf
Next

Global $Pause, $iTime, $L=0, $iStart, $s=0, $iTimeSig, $nSig0, $combo=$LngCm, $Bold = 700
Global $Tr1 = 0, $Tr2 = 0, $Tr3 = 0, $n=1, $pid, $sLabel, $trMp=0
Global $IniText, $aIniText, $ini=@ScriptDir&'\Stwh.ini'
If FileExists($ini) Then
    $file = FileOpen($ini, 0)
    $IniText = FileRead($file)
    FileClose($file)
EndIf


; Case 'WIN_2000', 'WIN_XP', 'WIN_2003'
Switch @OSVersion
Case 'WIN_VISTA', 'WIN_7'
$Bold = 400
EndSwitch


$Gui = GUICreate($LngTitle, 230, 185)
If @compiled=0 Then GUISetIcon("Stopwatch.ico",-2)
GUICtrlCreateLabel ("", 3,3,144,34,0x12)

$hLabel1 = GUICtrlCreateLabel(' 00', 5, 5, 35, 30,0xC)
_bk()
GUICtrlCreateLabel(':', 40, 5, 10, 30)
_bk()
$hLabel2 = GUICtrlCreateLabel('00', 50, 5, 28, 30)
_bk()
GUICtrlCreateLabel(':', 78, 5, 10, 30)
_bk()
$hLabel3= GUICtrlCreateLabel('00', 88, 5, 33, 30)
_bk()
GUICtrlCreateLabel('.', 116, 5, 7, 30)
_bk()
$hLabel4= GUICtrlCreateLabel('0', 123, 5, 22, 30)
_bk()

$hM1 = GUICtrlCreateLabel('M1 - 00:00:00.0', 30, 45, 110, 25, 0xC)
GUICtrlSetFont(-1, 10, $Bold)
$hM2 = GUICtrlCreateLabel('M2 - 00:00:00.0', 30, 65, 110, 25, 0xC)
GUICtrlSetFont(-1, 10, $Bold)
$hM3 = GUICtrlCreateLabel('M3 - 00:00:00.0', 30, 85, 110, 25, 0xC)
GUICtrlSetFont(-1, 10, $Bold)
$hM4 = GUICtrlCreateLabel('M4 - 00:00:00.0', 30, 105, 110, 25, 0xC)
GUICtrlSetFont(-1, 10, $Bold)
$hM5 = GUICtrlCreateLabel('M5 - 00:00:00.0', 30, 125, 110, 25, 0xC)
GUICtrlSetFont(-1, 10, $Bold)

$hSg = GUICtrlCreateLabel('', 30, 160, 110, 25)
GUICtrlSetFont(-1, 10, $Bold)
GUICtrlSetColor(-1, 0x3db03a)

$Start = GUICtrlCreateButton($LngStart, 161, 5, 60, 25)
GUICtrlSetTip(-1, 'Enter'&@CRLF&'Up')
$Pause0 = GUICtrlCreateButton($LngPs, 161, 35, 60, 25)
GUICtrlSetState(-1,128)
GUICtrlSetTip(-1, 'Down'&@CRLF&'Pause')
;$Stop = GUICtrlCreateButton("Стоп", 161, 65, 60, 25)
$Reset = GUICtrlCreateButton($LngRe, 161, 65, 60, 25)
GUICtrlSetTip(-1, 'NumPad 0'&@CRLF&'Del'&@CRLF&'0')
$Mem = GUICtrlCreateButton($LngMem, 161, 95, 60, 25)
GUICtrlSetTip(-1, 'Space')
$Signal = GUICtrlCreateButton($LngSig, 161, 125, 60, 25)
GUICtrlSetTip(-1, 'Alt+.'&@CRLF&'NumPad Del')
$About = GUICtrlCreateButton("@", 161, 155, 27, 25)
$HotKey = GUICtrlCreateButton("?", 193, 155, 27, 25)
$nStop1 = GUICtrlCreateButton($LngSp, 235, 160, 32, 23)
$n=1
$sLabel=' 00:00:00.0'
$iHour='00'
$iMin='00'
$iSec='00'
$iMsec='0'

Dim $AccelKeys[10][2]=[["{Enter}", $Start], ["{UP}", $Start], ["{SPACE}", $Mem], ["{DEL}", $Reset], ["0", $Reset], ["{NUMPAD0}", $Reset], ["{DOWN}", $Pause0], ["{PAUSE}", $Pause0], ["!{.}", $Signal], ["{NUMPADDOT}", $Signal]]

GUISetAccelerators($AccelKeys)

GUISetState()

$iHourTmp=''
$iMinTmp=''
$iSecTmp=''
$iMsecTmp=''

While 1
    $msg = GUIGetMsg()
    If $Tr1 = 1 Then
        $iTime = Int(TimerDiff($iStart)/100)/10-$L
        $iHour=Int($iTime/3600)
        $iMin = Int(($iTime-$iHour*3600)/60)
        $iSec = Int($iTime)-$iHour*3600-$iMin*60
        $iMsec = Int(($iTime-Int($iTime))*10)
        If $iHour < 10 Then $iHour='0'&$iHour
        If $iMin < 10 Then $iMin='0'&$iMin
        If $iSec < 10 Then $iSec='0'&$iSec
        ;If $iMsec < 10 Then $iMsec='0'&$iMsec
        If $iHourTmp<>$iHour Then GUICtrlSetData($hLabel1, " " &$iHour)
        If $iMinTmp<>$iMin Then GUICtrlSetData($hLabel2, $iMin)
        If $iSecTmp<>$iSec Then GUICtrlSetData($hLabel3, $iSec)
        If $iMsecTmp<>$iMsec Then GUICtrlSetData($hLabel4, $iMsec)
        $iHourTmp=$iHour
        $iMinTmp=$iMin
        $iSecTmp=$iSec
        $iMsecTmp=$iMsec
        ;Sleep(20)
    EndIf
    If $s = 1 And $iTimeSig<=$iTime Then
        $s = 0
        GUICtrlSetData($hSg,'')
        $nSig=StringLeft($nSig0, 1)
        Switch $nSig
            Case 1
             Beep(500, 1000)
            Case 2
                _melodia()
            Case 3
                ;ShellExecute(StringTrimLeft($nSig0, 3))
                If $trMp=1 And StringInStr(';mp3;wav;wma;',';'&StringRegExpReplace($nSig0, '.*\.(\S+)', '\1')&';')<>0 Then
                    _MP($nSig0)
                Else
                    _StartFile($nSig0)
                EndIf
            Case Else
                _melodia()
        EndSwitch
    EndIf
    
    If $pid<>0 And ProcessExists($pid) Then
        GUICtrlSetPos($nStop1, 5, 160)
    Else
        GUICtrlSetPos($nStop1, 235, 160)
        $pid=0
    EndIf

    Select
        Case $msg = $About
            _About()
        Case $msg = $HotKey
            MsgBox(0, $LngHK, $LngHKMsg)
        Case $msg = $nStop1
            If $pid<>0 And ProcessExists($pid) Then
                ProcessClose($pid)
                $pid=0
            EndIf
        Case $msg = $Start
            _Start()
        Case $msg = $Pause0
            If $Tr3 = 0 Then ContinueLoop
            If $Tr1 = 1 Then
                $Tr1 = 0
                $Tr2 = 1
                GUICtrlSetData($Pause0,$LngNx)
                GUICtrlSetState($Start,128)
            Else
                $L=Int(TimerDiff($iStart)/100)/10-$iTime
                $Tr1 = 1
                $Tr2 = 2
                GUICtrlSetData($Pause0, $LngPs)
                GUICtrlSetState($Start,64)
            EndIf
        Case $msg = $Mem
            If $n = 6 Then
                For $n = 1 to 5
                    GUICtrlSetColor(Eval("hM"&$n), 0x000000)
                Next
                $n = 1
            EndIf
            $sLabel = " " &$iHour & ":" & $iMin & ":" & $iSec & "." &$iMsec
            GUICtrlSetData(Eval("hM"&$n), 'M'&$n&' -'&$sLabel)
            If $sLabel<>' 00:00:00.0' Then
                GUICtrlSetColor(Eval("hM"&$n), 0xc03d3a)
                $n+=1
            EndIf
        Case $msg = $Reset
            _Reset()
        Case $msg = $Signal
            _Signal()
        Case $msg = -3
            Exit
    EndSelect
WEnd


Func _Signal()
    $GuiPos = WinGetPos($Gui)
$Gui1 = GUICreate($LngSig, 243, 200,$GuiPos[0], $GuiPos[1], -1, 0x00000080)
    GUICtrlCreateLabel($LngSgTx, 20, 5, 200, 34)
    
    GUICtrlCreateLabel($LngTm, 15, 38, 170, 17)
    $nHour = GUICtrlCreateInput("0", 10, 55, 50, 22)
    GUICtrlCreateUpdown(-1)
    GUICtrlSetLimit(-1, 24, 0)
    $nMin = GUICtrlCreateInput("0", 65, 55, 50, 22)
    GUICtrlCreateUpdown(-1)
    GUICtrlSetLimit(-1, 60, 0)
    $nSec = GUICtrlCreateInput("0", 120, 55, 50, 22)
    GUICtrlCreateUpdown(-1)
    GUICtrlSetLimit(-1, 60, 0)

    $nSig = GUICtrlCreateCombo ('', 10,83,160,25)
    GUICtrlSetData(-1,$LngSpk&'|'&$LngMSpk&'|'&$combo,$LngSpk)
    $nFolder = GUICtrlCreateButton("...", 172, 83, 32, 23)
    GUICtrlSetFont(-1, 14)
    $nPlay = GUICtrlCreateButton("Play", 205, 83, 32, 23)
    $nStop = GUICtrlCreateButton("Stop", 245, 55, 32, 23)

    $nSection = GUICtrlCreateCombo ('', 10,113,160,25)
    $nSave = GUICtrlCreateButton("Save", 172, 113, 32, 23)
    $nOpen = GUICtrlCreateButton("Open", 248, 113, 32, 23)
    If FileExists($ini) Then GUICtrlSetPos($nOpen, 205, 113)
    _IniText()
    
    If $IniText<>'' Then
        For $i = 1 to UBound($aIniText) - 1
            If $aIniText[$i]<>'' Then
                If StringInStr(StringRegExpReplace ($aIniText[$i],'(.*)(3\. .*)','\2'), '|')=0 Then GUICtrlSetData($nSig,StringRegExpReplace ($aIniText[$i],'(.*)(3\. .*)','\2'),'')
                GUICtrlSetData($nSection,StringRegExpReplace ($aIniText[$i],'(.*?)\|(.*)','\1'),'')
            EndIf
        Next
    EndIf
        
    $nMP = GUICtrlCreateCheckbox($LngMP, 10, 138, 180, 25)
    If $trMp=1 Then GUICtrlSetState(-1,1)
    
    $nOK = GUICtrlCreateButton("OK", 59, 165, 60, 25)
    $nCancel = GUICtrlCreateButton($LngCn, 124, 165, 60, 25)
    $pid=0
    GUISetState(@SW_SHOW, $Gui1)
    GUISetState(@SW_HIDE, $Gui)
$msg = $Gui1
    While 1
     $msg = GUIGetMsg()
        If $pid<>0 And ProcessExists($pid) Then
            GUICtrlSetPos($nStop, 205, 55)
        Else
            GUICtrlSetPos($nStop, 245, 55)
            $pid=0
        EndIf
     Select
        Case $msg = $nMP
            If GUICtrlRead($nMP) = 1 Then
                $trMp=1
            Else
                $trMp=0
            EndIf
        Case $msg = $nStop
            If $pid<>0 And ProcessExists($pid) Then
                ProcessClose($pid)
                $pid=0
            EndIf
        Case $msg = $nOpen
            ShellExecute($ini)
            
        Case $msg = $nPlay
            $nSi0=GUICtrlRead($nSig)
            If StringLeft($nSi0, 1)='3' And Not FileExists(StringTrimLeft($nSi0, 3)) Then
                MsgBox(0,$LngErr, $LngErrMsg2)
                ContinueLoop
            EndIf
            Switch StringLeft($nSi0, 1)
                Case 1
                 Beep(500, 1000)
                Case 2
                    _melodia()
                Case 3
                    If GUICtrlRead($nMP) = 1 And StringInStr(';mp3;wav;wma;',';'&StringRegExpReplace($nSi0, '.*\.(\S+)', '\1')&';')<>0 Then
                        _MP($nSi0)
                    Else
                        _StartFile($nSi0)
                    EndIf
            EndSwitch

        Case $msg = $nSection
            $nSection0=GUICtrlRead($nSection)
            $combotmp=''
            For $i = 1 to UBound($aIniText) - 1
                If StringRegExpReplace ($aIniText[$i],'(.*?)\|(.*)','\1')=$nSection0 Then
                    $combotmp=StringSplit($aIniText[$i], '|')
                    GUICtrlSetData($nHour, $combotmp[2])
                    GUICtrlSetData($nMin, $combotmp[3])
                    GUICtrlSetData($nSec, $combotmp[4])
                    GUICtrlSetData($nSig, $combotmp[5])
                EndIf
            Next
            If StringLeft($combotmp[5], 1)='3' And Not FileExists(StringTrimLeft($combotmp[5], 3)) Then MsgBox(0, $LngErr,$LngErrMsg2)
            
        Case $msg = $nSave
            $nSection0=GUICtrlRead($nSection)
            $nHour0=GUICtrlRead($nHour)
            $nMin0=GUICtrlRead($nMin)
            $nSec0=GUICtrlRead($nSec)
            $nSi0=GUICtrlRead($nSig)
            If $nHour0+$nMin0+$nSec0 = 0 or StringInStr($nSection0,'|')<>0 or $nSection0='' Then
                MsgBox(0, $LngErr, $LngErrMsg)
                ContinueLoop
            EndIf
            If StringLeft($nSi0, 1)='3' And Not FileExists(StringTrimLeft($nSi0, 3)) Then
                MsgBox(0, $LngErr,$LngErrMsg2)
                ContinueLoop
            EndIf
            If StringInStr($IniText, $nSection0&'|')<>0 Then
                MsgBox(0, $LngErr, $LngErrMsg3)
                ContinueLoop
            EndIf
            $ReadTmp=$nSection0&'|'&$nHour0&'|'&$nMin0&'|'&$nSec0&'|'&$nSi0&@CRLF
            ;If StringRegExp($IniText, '(?s)(^.*)\n$', 0)=0 Then $ReadTmp&=@CRLF&$ReadTmp
            $file = FileOpen($ini,1)
            FileWrite($file, $ReadTmp)
            $IniText&=$ReadTmp
            FileClose($file)
            _IniText()
            If StringLeft($nSi0, 1)='3' Then GUICtrlSetData($nSig,$nSi0,$nSi0)
            GUICtrlSetData($nSection,$nSection0,$nSection0)
            GUICtrlSetPos($nOpen, 205, 113)

        Case $msg = $nCancel
            $s=0
            GUICtrlSetData($hSg,'')
            $msg = $Gui
            $GuiPos = WinGetPos($Gui1)
            GUIDelete($Gui1)
            WinMove($Gui, "", $GuiPos[0], $GuiPos[1])
            GUISetState(@SW_SHOW, $Gui)
            ExitLoop
        Case $msg = $nFolder
            $tmp = FileOpenDialog($LngSl, @WorkingDir & "", $LngType&" (*.*)", 1 + 4)
            If @error Then ContinueLoop
            GUICtrlSendMsg($nSig, 0x14B, 0, 0)
            $combo="3. "&$tmp
            GUICtrlSetData($nSig,$LngSpk&'|'&$LngMSpk&'|'&$combo, $combo)

        Case $msg = $nOK
            $s=1
            $nHour0=GUICtrlRead($nHour)
            $nMin0=GUICtrlRead($nMin)
            $nSec0=GUICtrlRead($nSec)
            $nSig0=GUICtrlRead($nSig)
            If $nHour0+$nMin0+$nSec0 = 0 Then
                MsgBox(0, $LngErr, $LngErrMsg4)
                ContinueLoop
            EndIf
            $iTimeSig=$nHour0*3600+$nMin0*60+$nSec0
            If $nHour0 < 10 Then $nHour0='0'&$nHour0
            If $nMin0 < 10 Then $nMin0='0'&$nMin0
            If $nSec0 < 10 Then $nSec0='0'&$nSec0
            GUICtrlSetData($hSg,'Sg - '&$nHour0&':'&$nMin0&':'&$nSec0&'.0')
            _Reset()
            _Start()
            ContinueCase
        Case $msg = -3
            $msg = $Gui
            $GuiPos = WinGetPos($Gui1)
            GUIDelete($Gui1)
            WinMove($Gui, "", $GuiPos[0], $GuiPos[1])
            GUISetState(@SW_SHOW, $Gui)
            ExitLoop
        EndSelect
WEnd
EndFunc

Func _IniText()
    If $IniText<>'' Then
        ;UDF File.au3
        If StringInStr($IniText, @LF) Then
            $aIniText = StringSplit(StringStripCR($IniText), @LF)
        ElseIf StringInStr($IniText, @CR) Then
            $aIniText = StringSplit($IniText, @CR)
        Else
            If StringLen($IniText) Then
                Dim $aIniText[2] = [1, $IniText]
            Else
                MsgBox(0, $LngErr, "Error ini")
                Exit
            EndIf
        EndIf
    EndIf
EndFunc

Func _bk()
GUICtrlSetFont(-1, 20, $Bold, -1, 'Arial')
GUICtrlSetColor(-1, 0xc03d3a)
GUICtrlSetBkColor(-1, 0xffffff)
EndFunc

Func _Start()
    If $Tr2 = 1 Then Return
    If $Tr1 = 0 Then
        $Tr1 = 1
        $Tr3 = 1
        $L=0
        GUICtrlSetData($Start, $LngSp)
        GUICtrlSetState($Pause0,64)
        $iStart = TimerInit()
    Else
        $Tr1 = 0
        $Tr3 = 0
        GUICtrlSetData($Start, $LngStart)
        GUICtrlSetState($Pause0,128)
    EndIf
EndFunc

Func _Reset()
    $sLabel=' 00:00:00.0'
    $Tr1 = 0
    $Tr2 = 0
    $Tr3 = 0
    $iTime=0
    $L=0
    GUICtrlSetData($hLabel1, ' 00')
    GUICtrlSetData($hLabel2, '00')
    GUICtrlSetData($hLabel3, '00')
    GUICtrlSetData($hLabel4, '0')
    For $n = 1 to 5
        GUICtrlSetColor(Eval("hM"&$n), 0x000000)
        GUICtrlSetData(Eval("hM"&$n), 'M'&$n&' - 00:00:00.0')
    Next
    $n = 1
    GUICtrlSetData($Start, $LngStart)
    GUICtrlSetState($Start,64)
    GUICtrlSetData($Pause0, $LngPs)
    GUICtrlSetState($Pause0,128)
EndFunc

Func _MP($nSi2)
$nSi2=StringTrimLeft($nSi2, 3)
$melod= '#NoTrayIcon' & @CRLF & _
'SoundPlay("'&$nSi2&'", 0)' & @CRLF & _
'MsgBox(0, "Message", "Stop?")'
$file = FileOpen(@TempDir&'\Beepfile.au3',2)
FileWrite($file, $melod)
FileClose($file)
$pid=Run(@AutoItExe&' /AutoIt3ExecuteScript "'&@TempDir&'\Beepfile.au3"', '', @SW_HIDE)
EndFunc

Func _StartFile($nSi2)
    $type=StringRegExpReplace($nSi2, '.*\.(\S+)', '\1')
    $astype = RegRead('HKEY_CLASSES_ROOT\.' & $type, "")
    $astype = RegRead('HKEY_CLASSES_ROOT\' & $astype & '\shell\open\command', "")
    $nSi2=StringTrimLeft($nSi2, 3)
    If @error = 1 Then
        ShellExecute($nSi2)
        Return
    EndIf
    $aPathexe=StringRegExpReplace($astype, '(^.*)exe(.*)$', '\1')
    If @error = 1 Then
        ShellExecute($nSi2)
        Return
    EndIf
    $aPathexe = StringReplace($aPathexe, '"', '')
    If FileExists($aPathexe & 'exe') Then
        $filename=StringRegExpReplace($aPathexe & 'exe', '(^.*)\\(.*)$', '\2')
        If ProcessExists($filename) Then
            $aProsname=ProcessList ($filename)
            $pid=$aProsname[1][1]
            Run('"'&$aPathexe&'exe" "'&$nSi2&'"')
        Else
            $pid=Run('"'&$aPathexe&'exe" "'&$nSi2&'"')
        EndIf
    Else
        ShellExecute($nSi2)
        Return
    EndIf
EndFunc

Func _melodia()
$melod= '#NoTrayIcon' & @CRLF & _
'Global $nTempo=0.8'&@CRLF&'Global $iTone=0'&@CRLF&'HotKeySet("{ESC}", "_Quit")'&@CRLF&'_Beep(8,4,100)' & @CRLF & _
'_Beep(7,4,100)'&@CRLF&'_Beep(8,4,100)'&@CRLF&'_Beep(9,4,100)'&@CRLF&'_Beep(8,4,100,100)' & @CRLF & _
'_Beep(1,5,100,100)'&@CRLF&'_Beep(8,4,100)'&@CRLF&'_Beep(7,4,100)'&@CRLF&'_Beep(8,4,100)' & @CRLF & _
'_Beep(9,4,100)'&@CRLF&'_Beep(8,4,100,100)'&@CRLF&'_Beep(12,4,100,100)'&@CRLF&'_Beep(8,4,100)' & @CRLF & _
'_Beep(7,4,100)'&@CRLF&'_Beep(8,4,100)'&@CRLF&'_Beep(9,4,100)'&@CRLF&'_Beep(8,4,100)' & @CRLF & _
'_Beep(6,5,100)'&@CRLF&'_Beep(3,5,100)'&@CRLF&'_Beep(12,4,100)'&@CRLF&'_Beep(8,4,100)' & @CRLF & _
'_Beep(6,4,100)'&@CRLF&'_Beep(5,4,100)'&@CRLF&'_Beep(4,4,200,300)'&@CRLF&'_Beep(1,5,100)' & @CRLF & _
'_Beep(12,4,100)'&@CRLF&'_Beep(11,4,100)'&@CRLF&'_Beep(9,4,100)'&@CRLF&'_Beep(1,5,100,100)' & @CRLF & _
'_Beep(6,5,100,100)'&@CRLF&'_Beep(4,5,100)'&@CRLF&'_Beep(3,5,100)'&@CRLF&'_Beep(1,5,100)' & @CRLF & _
'_Beep(8,4,100)'&@CRLF&'_Beep(1,5,100,100)'&@CRLF&'_Beep(4,5,100,100)'&@CRLF&'_Beep(4,5,100)' & @CRLF & _
'_Beep(3,5,100)'&@CRLF&'_Beep(1,5,100)'&@CRLF&'_Beep(3,5,100)'&@CRLF&'_Beep(3,4,100)' & @CRLF & _
'_Beep(7,4,100)'&@CRLF&'_Beep(10,4,100)'&@CRLF&'_Beep(1,5,100)'&@CRLF&'_Beep(4,5,100)' & @CRLF & _
'_Beep(3,5,100)'&@CRLF&'_Beep(1,5,100)'&@CRLF&'_Beep(3,5,250,250)'&@CRLF&'_Beep(8,4,100)' & @CRLF & _
'_Beep(7,4,100)'&@CRLF&'_Beep(8,4,100)'&@CRLF&'_Beep(9,4,100)'&@CRLF&'_Beep(8,4,100,100)' & @CRLF & _
'_Beep(1,5,100,100)'&@CRLF&'_Beep(8,4,100)'&@CRLF&'_Beep(7,4,100)'&@CRLF&'_Beep(8,4,100)' & @CRLF & _
'_Beep(9,4,100)'&@CRLF&'_Beep(8,4,100,100)'&@CRLF&'_Beep(12,4,100,100)'&@CRLF&'_Beep(8,4,100)' & @CRLF & _
'_Beep(7,4,100)'&@CRLF&'_Beep(8,4,100)'&@CRLF&'_Beep(9,4,100)'&@CRLF&'_Beep(8,4,100)' & @CRLF & _
'_Beep(6,5,100)'&@CRLF&'_Beep(3,5,100)'&@CRLF&'_Beep(12,4,100)'&@CRLF&'_Beep(8,4,100)' & @CRLF & _
'_Beep(6,4,100)'&@CRLF&'_Beep(5,4,100)'&@CRLF&'_Beep(4,4,200,300)'&@CRLF&'_Beep(1,5,100)' & @CRLF & _
'_Beep(12,4,100)'&@CRLF&'_Beep(11,4,100)'&@CRLF&'_Beep(9,4,100)'&@CRLF&'_Beep(1,5,100,100)' & @CRLF & _
'_Beep(6,5,100,100)'&@CRLF&'_Beep(4,5,100)'&@CRLF&'_Beep(3,5,100)'&@CRLF&'_Beep(1,5,100)' & @CRLF & _
'_Beep(8,4,100)'&@CRLF&'_Beep(1,5,100,100)'&@CRLF&'_Beep(4,5,100,100)'&@CRLF&'_Beep(4,5,100)' & @CRLF & _
'_Beep(3,5,100)'&@CRLF&'_Beep(1,5,100)'&@CRLF&'_Beep(3,5,100)'&@CRLF&'_Beep(8,4,100)' & @CRLF & _
'_Beep(12,4,100)'&@CRLF&'_Beep(3,5,100)'&@CRLF&'_Beep(8,5,100)'&@CRLF&'_Beep(6,5,100)' & @CRLF & _
'_Beep(4,5,100)'&@CRLF&'_Beep(3,5,100)'&@CRLF&'_Beep(1,5,300,200)'&@CRLF&'_Beep(3,5,100)' & @CRLF
$melod&= _
'_Beep(1,5,100)'&@CRLF&'_Beep(12,4,100)'&@CRLF&'_Beep(11,4,100)'&@CRLF&'_Beep(4,4,100)' & @CRLF & _
'_Beep(8,4,100)'&@CRLF&'_Beep(11,4,100)'&@CRLF&'_Beep(4,4,100)'&@CRLF&'_Beep(8,4,100)' & @CRLF & _
'_Beep(11,4,100)'&@CRLF&'_Beep(12,4,100)'&@CRLF&'_Beep(1,5,150,150)'&@CRLF&'_Beep(9,4,200,100)' & @CRLF & _
'_Beep(3,5,100)'&@CRLF&'_Beep(1,5,100)'&@CRLF&'_Beep(12,4,100)'&@CRLF&'_Beep(11,4,100)' & @CRLF & _
'_Beep(3,4,100)'&@CRLF&'_Beep(6,4,100)'&@CRLF&'_Beep(11,4,100)'&@CRLF&'_Beep(3,4,100)' & @CRLF & _
'_Beep(6,4,100)'&@CRLF&'_Beep(11,4,100)'&@CRLF&'_Beep(12,4,100)'&@CRLF&'_Beep(1,5,150,150)' & @CRLF & _
'_Beep(8,4,200,100)'&@CRLF&'_Beep(4,5,100)'&@CRLF&'_Beep(3,5,100)'&@CRLF&'_Beep(6,5,100)' & @CRLF & _
'_Beep(4,5,100)'&@CRLF&'_Beep(3,5,100)'&@CRLF&'_Beep(1,5,100)'&@CRLF&'_Beep(4,5,100)' & @CRLF & _
'_Beep(3,5,100)'&@CRLF&'_Beep(1,5,100)'&@CRLF&'_Beep(11,4,100)'&@CRLF&'_Beep(3,5,150,150)' & @CRLF & _
'_Beep(11,4,300,100)'&@CRLF&'_Beep(3,5,100)'&@CRLF&'_Beep(1,5,100)'&@CRLF&'_Beep(4,5,100)' & @CRLF & _
'_Beep(3,5,100)'&@CRLF&'_Beep(1,5,100)'&@CRLF&'_Beep(11,4,100)'&@CRLF&'_Beep(3,5,100)' & @CRLF & _
'_Beep(1,5,100)'&@CRLF&'_Beep(11,4,100)'&@CRLF&'_Beep(9,4,100)'&@CRLF&'_Beep(11,4,400,100)' & @CRLF & _
'_Beep(3,5,100)'&@CRLF&'_Beep(1,5,100)'&@CRLF&'_Beep(12,4,100)'&@CRLF&'_Beep(11,4,100)' & @CRLF & _
'_Beep(4,4,100)'&@CRLF&'_Beep(8,4,100)'&@CRLF&'_Beep(11,4,100)'&@CRLF&'_Beep(4,4,100)' & @CRLF & _
'_Beep(8,4,100)'&@CRLF&'_Beep(11,4,100)'&@CRLF&'_Beep(12,4,100)'&@CRLF&'_Beep(1,5,150,150)' & @CRLF & _
'_Beep(9,4,200,100)'&@CRLF&'_Beep(3,5,100)'&@CRLF&'_Beep(1,5,100)'&@CRLF&'_Beep(12,4,100)' & @CRLF & _
'_Beep(11,4,100)'&@CRLF&'_Beep(3,4,100)'&@CRLF&'_Beep(6,4,100)'&@CRLF&'_Beep(11,4,100)' & @CRLF & _
'_Beep(3,4,100)'&@CRLF&'_Beep(6,4,100)'&@CRLF&'_Beep(11,4,100)'&@CRLF&'_Beep(12,4,100)' & @CRLF & _
'_Beep(1,5,150,150)'&@CRLF&'_Beep(8,4,150,150)'&@CRLF&'_Beep(4,5,100)'&@CRLF&'_Beep(3,5,100)' & @CRLF & _
'_Beep(2,5,100)'&@CRLF&'_Beep(1,5,100)'&@CRLF&'_Beep(12,4,100)'&@CRLF&'_Beep(1,5,100)' & @CRLF & _
'_Beep(3,5,100)'&@CRLF&'_Beep(6,5,100)'&@CRLF&'_Beep(4,5,100)'&@CRLF&'_Beep(3,5,100)' & @CRLF & _
'_Beep(1,5,100)'&@CRLF&'_Beep(4,5,100)'&@CRLF&'_Beep(11,4,100)'&@CRLF&'_Beep(4,5,100)' & @CRLF & _
'_Beep(8,5,100)'&@CRLF&'_Beep(11,5,100)'&@CRLF&'_Beep(10,5,100)'&@CRLF&'_Beep(9,5,100)' & @CRLF & _
'_Beep(8,5,100)'&@CRLF&'_Beep(6,5,100)'&@CRLF&'_Beep(4,5,100)'&@CRLF&'_Beep(3,5,100)' & @CRLF & _
'_Beep(1,5,100)'&@CRLF&'_Beep(11,4,100)'&@CRLF&'_Beep(9,4,100)'&@CRLF&'_Beep(8,4,100)' & @CRLF & _
'_Beep(6,4,100)'&@CRLF&'_Beep(4,4,200)' & @CRLF & _
'Func _Beep($iNote,$iOctave=4,$iDuration=200,$iPause=0)' & @CRLF & _
'    $iFrequency=440*2^(($iNote+$iTone)/12+$iOctave+1/6-4)' & @CRLF & _
'    Beep($iFrequency, $iDuration/$nTempo)' & @CRLF & _
'    If $iPause<>0 Then Sleep($iPause/$nTempo)' & @CRLF & _
'EndFunc' & @CRLF & _
'Func _Quit()' & @CRLF & _
' Exit' & @CRLF & _
'EndFunc'
$file = FileOpen(@TempDir&'\Beepfile.au3',2)
FileWrite($file, $melod)
FileClose($file)
$pid=Run(@AutoItExe&' /AutoIt3ExecuteScript "'&@TempDir&'\Beepfile.au3"', '', @SW_HIDE)
EndFunc

Func _About()
$GuiPos = WinGetPos($Gui)
GUISetState(@SW_HIDE, $Gui)
$font="Arial"
$Gui1 = GUICreate($LngAbout, 270, 180,$GuiPos[0], $GuiPos[1], -1, 0x00000080)
    GUISetBkColor (0xf8c848)
    GUICtrlCreateLabel($LngTitle, 0, 20, 270, 33, 0x01)
    GUICtrlSetFont (-1,15, 600, -1, $font)
    GUICtrlSetColor(-1,0xa21a10)
    GUISetFont (9, 600, -1, $font)
    GUICtrlCreateLabel($LngVer&' 0.5 2.09.2010', 55, 100, 210, 17)
    GUICtrlCreateLabel($LngSite&':', 55, 115, 40, 17)
    $url=GUICtrlCreateLabel('http://azjio.ucoz.ru', 92, 115, 170, 17)
    GUICtrlSetCursor(-1, 0)
    GUICtrlSetColor(-1, 0x0000ff)
    GUICtrlCreateLabel('WebMoney: R939163939152', 55, 130, 210, 17)
    GUICtrlCreateLabel('Copyright AZJIO © 2010', 55, 145, 210, 17)
    GUISetState(@SW_SHOW, $Gui1)
$msg = $Gui1
    While 1
     $msg = GUIGetMsg()
     Select
        Case $msg = $url
            ShellExecute ('http://azjio.ucoz.ru')
        Case $msg = -3
            $msg = $Gui
            GUIDelete($Gui1)
            GUISetState(@SW_SHOW, $Gui)
            ExitLoop
        EndSelect
WEnd
EndFunc
Автор: guardberc
Дата сообщения: 11.07.2010 00:22
Подскажите, как отправить письмо с вложением средствами autoit?

PS поиск юзал. если пропустил что-то, то ткните носом.
Пробую этот пример http://www.autoitscript.com/forum/index.php?showtopic=23860&st=320

Код: #Include <file.au3>
;##################################
; INI
;##################################
$var1 = IniRead("H:\Bureaublad\config.ini", "config", "SMTP", "")
$var2 = IniRead("H:\Bureaublad\config.ini", "opmaak", "NAAM", "")
$var3 = IniRead("H:\Bureaublad\config.ini", "config", "VAN-EMAIL", "")
$var4 = IniRead("H:\Bureaublad\config.ini", "opmaak", "NAAR-EMAIL", "")
$var5 = IniRead("H:\Bureaublad\config.ini", "opmaak", "ONDERWERP", "")
$var6 = IniRead("H:\Bureaublad\config.ini", "opmaak", "BODY", "")
$var7 = IniRead("H:\Bureaublad\config.ini", "opmaak", "ATTACHMENT", "")
$var8 = IniRead("H:\Bureaublad\config.ini", "opmaak", "CC", "")
$var9 = IniRead("H:\Bureaublad\config.ini", "opmaak", "BCC", "")
$var10 = IniRead("H:\Bureaublad\config.ini", "config", "PRIORITY", "Normal")
$var11 = IniRead("H:\Bureaublad\config.ini", "config", "USERNAME", "")
$var12 = IniRead("H:\Bureaublad\config.ini", "config", "PASSWORD", "")
$var13 = IniRead("H:\Bureaublad\config.ini", "config", "IPPORT", "25")

;##################################
; Variables
;##################################
$SmtpServer = $var1 ; address for the smtp-server to use - REQUIRED
$FromName = $var2 ; name from who the email was sent
$FromAddress = $var3 ; address from where the mail should come
$ToAddress = $var4 ; destination address of the email - REQUIRED
$Subject = $var5 ; subject from the email - can be anything you want it to be
$Body = $var6 ; the messagebody from the mail - can be left blank but then you get a blank mail
$AttachFiles = $var7 ; the file(s) you want to attach seperated with a ; (Semicolon) - leave blank if not needed
$CcAddress = $var8 ; address for cc - leave blank if not needed
$BccAddress = $var9 ; address for bcc - leave blank if not needed
$Importance = $var10 ; Send message priority: "High", "Normal", "Low"
$Username = $var11 ; username for the account used from where the mail gets sent - REQUIRED
$Password = $var12 ; password for the account used from where the mail gets sent - REQUIRED
$IPPort = $var13 ; port used for sending the mail
$ssl = 0 ; enables/disables secure socket layer sending - put to 1 if using httpS

;##################################
; Script
;##################################
Global $oMyRet[2]
Global $oMyError = ObjEvent("AutoIt.Error", "MyErrFunc")
$rc = _INetSmtpMailCom($SmtpServer, $FromName, $FromAddress, $ToAddress, $Subject, $Body, $AttachFiles, $CcAddress, $BccAddress, $Importance, $Username, $Password, $IPPort, $ssl)
If @error Then
MsgBox(0, "Error sending message", "Error code:" & @error & " Description:" & $rc)
EndIf
;
; The UDF
Func _INetSmtpMailCom($s_SmtpServer, $s_FromName, $s_FromAddress, $s_ToAddress, $s_Subject = "", $as_Body = "", $s_AttachFiles = "", $s_CcAddress = "", $s_BccAddress = "", $s_Importance="Normal", $s_Username = "", $s_Password = "", $IPPort = 25, $ssl = 0)
Local $objEmail = ObjCreate("CDO.Message")
$objEmail.From = '"' & $s_FromName & '" <' & $s_FromAddress & '>'
$objEmail.To = $s_ToAddress
Local $i_Error = 0
Local $i_Error_desciption = ""
If $s_CcAddress <> "" Then $objEmail.Cc = $s_CcAddress
If $s_BccAddress <> "" Then $objEmail.Bcc = $s_BccAddress
$objEmail.Subject = $s_Subject
If StringInStr($as_Body, "<") And StringInStr($as_Body, ">") Then
$objEmail.HTMLBody = $as_Body
Else
$objEmail.Textbody = $as_Body & @CRLF
EndIf
If $s_AttachFiles <> "" Then
Local $S_Files2Attach = StringSplit($s_AttachFiles, ";")
For $x = 1 To $S_Files2Attach[0]
$S_Files2Attach[$x] = _PathFull($S_Files2Attach[$x])
ConsoleWrite('@@ Debug : $S_Files2Attach[$x] = ' & $S_Files2Attach[$x] & @LF & '>Error code: ' & @error & @LF) ;### Debug Console
If FileExists ($S_Files2Attach[$x]) Then
ConsoleWrite('+> File attachment added: ' & $S_Files2Attach[$x] & @LF)
.AddAttachment($S_Files2Attach[$x])
Else
ConsoleWrite('!> File not found to attach: ' & $S_Files2Attach[$x] & @LF)
SetError(1)
Return 0
EndIf
Next
EndIf
$objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
$objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserver") = $s_SmtpServer
If Number($IPPort) = 0 then $IPPort = 25
$objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = $IPPort
;Authenticated SMTP
If $s_Username <> "" Then
$objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1
$objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendusername") = $s_Username
$objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendpassword") = $s_Password
EndIf
If $ssl Then
$objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = True
EndIf
;Update settings
$objEmail.Configuration.Fields.Update
; Set Email Importance
Switch $s_Importance
Case "High"
$objEmail.Fields.Item ("urn:schemas:mailheader:Importance") = "High"
Case "Normal"
$objEmail.Fields.Item ("urn:schemas:mailheader:Importance") = "Normal"
Case "Low"
$objEmail.Fields.Item ("urn:schemas:mailheader:Importance") = "Low"
EndSwitch
$objEmail.Fields.Update
; Sent the Message
$objEmail.Send
If @error Then
SetError(2)
Return $oMyRet[1]
EndIf
$objEmail=""
EndFunc ;==>_INetSmtpMailCom
;
;
; Com Error Handler
Func MyErrFunc()
$HexNumber = Hex($oMyError.number, 8)
$oMyRet[0] = $HexNumber
$oMyRet[1] = StringStripWS($oMyError.description, 3)
ConsoleWrite("### COM Error ! Number: " & $HexNumber & " ScriptLine: " & $oMyError.scriptline & " Description:" & $oMyRet[1] & @LF)
SetError(1); something to check for when this function returns
Return
EndFunc ;==>MyErrFunc
Автор: Orion_76
Дата сообщения: 11.07.2010 18:32
guardberc

Цитата:
но при отправке выскакивает сообщение

скрипт один в один похож на этот с оф.форума
http://www.autoitscript.com/forum/index.php?showtopic=116815&st=0&p=814757&hl=mail&fromsearch=1&#entry814757

Там же решается похожая с вашей проблема(как раз c gmail.com)
Пост №3...
Автор: AZJIO
Дата сообщения: 12.07.2010 15:36
[more=Пятнашки]
Код: #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_OutFile=Fifteen.exe
#AutoIt3Wrapper_icon=Fifteen.ico
#AutoIt3Wrapper_Compression=4
#AutoIt3Wrapper_UseAnsi=y
#AutoIt3Wrapper_Res_Comment=-
#AutoIt3Wrapper_Res_Description=Fifteen.exe
#AutoIt3Wrapper_Res_Fileversion=0.2.0.0
#AutoIt3Wrapper_Res_Fileversion_AutoIncrement=n
#AutoIt3Wrapper_Res_LegalCopyright=AZJIO
#AutoIt3Wrapper_Res_Language=1049
#AutoIt3Wrapper_Run_AU3Check=n
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
; @AZJIO 2010.07.12
; Resizing, displacement on 2-3 buttons.
#NoTrayIcon

; En
$LngTitle='Fifteen'
$LngAbout='About'
$LngSite='Site'
$LngA='Author'
$LngRe='Disturb'
$LngMsgT= 'Message'
$LngMsg= 'Excellently'

; Ru
; если есть русский в раскладках клавиатуры, то использовать его
For $i = 1 to 5
    $LngN = RegEnumVal("HKCU\Keyboard Layout\Preload", $i)
    If @error <> 0 Then ExitLoop
    If RegRead("HKCU\Keyboard Layout\Preload", $LngN) = 00000419 Then
        $LngTitle='Пятнашки'
        $LngAbout='О программе'
        $LngSite='Сайт'
        $LngA='Автор'
        $LngRe='Перемешать'
        $LngMsgT= 'Сообщение'
        $LngMsg= 'Молодец!'
        ExitLoop
    EndIf
Next

$h=58
$w=8
Global $aXY[17][4], $s
$Gui=GUICreate($LngTitle, 188, 238, -1, -1, 0x00040000)
$GuiPos = WinGetPos($Gui)
$s=Int(($GuiPos[2]-$w)/4)
WinMove($Gui, "", $GuiPos[0], $GuiPos[1], $s*4+$w, $s*4+$h)

$restart = GUICtrlCreateButton ($LngA,0,$s*4+1,$s*2, 20)
GUICtrlSetResizing(-1, 512 + 64)
$refresh = GUICtrlCreateButton ($LngRe,$s*2,$s*4+1,$s*2, 20)
GUICtrlSetResizing(-1, 512 + 64)

$y=0
$x=0
For $i = 1 to 16
    $aXY[$i][0]=$i
Switch $i
    Case 1 To 4
     $y=0
     $x=1
    Case 5 To 8
     $y=1
     $x=5
    Case 9 To 12
     $y=2
     $x=9
    Case 13 To 16
     $y=3
     $x=13
EndSwitch
    $aXY[$i][2]=($i-$x)*$s
    $aXY[$i][3]=$y*$s
    If $i < 16 Then
        GUISetFont (15, 700)
        $aXY[$i][1]=GUICtrlCreateButton ($i, $aXY[$i][2],$aXY[$i][3],$s,$s)
        GUICtrlSetResizing(-1, 1)
     EndIf
Next
$r=0
GUISetState ()
_refresh()

While 1
    $msg = GUIGetMsg()

    If $aXY[16][2]=$s*3 and $aXY[16][3]=$s*3 And $aXY[15][2]=$s*2 and $aXY[15][3]=$s*3 And $aXY[14][2]=$s and $aXY[14][3]=$s*3 And $aXY[13][2]=0 and $aXY[13][3]=$s*3 And $aXY[12][2]=$s*3 and $aXY[12][3]=$s*2 And $aXY[11][2]=$s*2 and $aXY[11][3]=$s*2 And $aXY[10][2]=$s and $aXY[10][3]=$s*2 And $aXY[9][2]=0 and $aXY[9][3]=$s*2 And $aXY[8][2]=$s*3 and $aXY[8][3]=$s And $aXY[7][2]=$s*2 and $aXY[7][3]=$s And $aXY[6][2]=$s and $aXY[6][3]=$s And $aXY[5][2]=0 and $aXY[5][3]=$s And $aXY[4][2]=$s*3 and $aXY[4][3]=0 And $aXY[3][2]=$s*2 and $aXY[3][3]=0 And $aXY[2][2]=$s and $aXY[2][3]=0 And $aXY[1][2]=0 and $aXY[1][3]=0 Then
        Sleep(500)
        MsgBox(0, $LngMsgT, $LngMsg)
        _refresh()
    EndIf
#Region ;Resizing, change the sizes window
    $r += 1
    If $r = 200 Then ; each 0,2 seconds checking the change window
        $r = 0
        $GuiPos = WinGetPos($Gui)
        If ($GuiPos[2]-$w)/4<>$s or ($GuiPos[3]-$h)/4<>$s Then
            $t=$s
            If $GuiPos[2]-$w>$GuiPos[3]-$h Then
                $s=Int(($GuiPos[2]-$w)/4)
            Else
                $s=Int(($GuiPos[3]-$h)/4)
            EndIf
            If $s < 31 Then $s = 31
            WinMove($Gui, "", $GuiPos[0], $GuiPos[1], $s*4+$w, $s*4+$h)
            For $i = 1 to 16
                $aXY[$i][2]=$aXY[$i][2]/$t*$s
                $aXY[$i][3]=$aXY[$i][3]/$t*$s
                GUICtrlSetPos($aXY[$i][1], $aXY[$i][2],$aXY[$i][3],$s,$s)
                GUICtrlSetFont ($aXY[$i][1],Int($s/2.7), 700, 2)
            Next
                GUICtrlSetPos($restart, 0,$s*4,$s*2, 20)
                GUICtrlSetPos($refresh, $s*2,$s*4,$s*2, 20)
        EndIf
    EndIf
#EndRegion

    For $i = 1 to 15
        If $msg = $aXY[$i][1] Then
            If ($aXY[$i][2]=$aXY[16][2] And ($aXY[$i][3]=$aXY[16][3]+$s Or $aXY[$i][3]=$aXY[16][3]-$s)) Or ($aXY[$i][3]=$aXY[16][3] And ($aXY[$i][2]=$aXY[16][2]+$s Or $aXY[$i][2]=$aXY[16][2]-$s)) Then _reButton($i)
            
; displacement on 2-3 buttons.

            ;from below upwards
            If $aXY[$i][2]=$aXY[16][2] And $aXY[$i][3]=$aXY[16][3]+$s*2 Then
                _reArr(0,1)
                _reArr(0,1)
                ExitLoop
            EndIf
            
            If $aXY[$i][2]=$aXY[16][2] And $aXY[$i][3]=$aXY[16][3]+$s*3 Then
                _reArr(0,1)
                _reArr(0,1)
                _reArr(0,1)
                ExitLoop
            EndIf
            
            ;from top to bottom
            If $aXY[$i][2]=$aXY[16][2] And $aXY[$i][3]=$aXY[16][3]-$s*2 Then
                _reArr(0,-1)
                _reArr(0,-1)
                ExitLoop
            EndIf
            
            If $aXY[$i][2]=$aXY[16][2] And $aXY[$i][3]=$aXY[16][3]-$s*3 Then
                _reArr(0,-1)
                _reArr(0,-1)
                _reArr(0,-1)
                ExitLoop
            EndIf
            
            ; right to left
            If $aXY[$i][2]=$aXY[16][2]+$s*2 And $aXY[$i][3]=$aXY[16][3] Then
                _reArr(1,0)
                _reArr(1,0)
                ExitLoop
            EndIf
            
            If $aXY[$i][2]=$aXY[16][2]+$s*3 And $aXY[$i][3]=$aXY[16][3] Then
                _reArr(1,0)
                _reArr(1,0)
                _reArr(1,0)
                ExitLoop
            EndIf
            
            ; left to right
            If $aXY[$i][2]=$aXY[16][2]-$s*2 And $aXY[$i][3]=$aXY[16][3] Then
                _reArr(-1,0)
                _reArr(-1,0)
                ExitLoop
            EndIf
            
            If $aXY[$i][2]=$aXY[16][2]-$s*3 And $aXY[$i][3]=$aXY[16][3] Then
                _reArr(-1,0)
                _reArr(-1,0)
                _reArr(-1,0)
                ExitLoop
            EndIf

        EndIf
    Next
    
    
    Select
        Case $msg = $refresh
            _refresh()
        Case $msg = $restart
            _About()
        Case $msg = -3
            ExitLoop
    EndSelect
WEnd

; we change places a button with paleholder by rand in 4-h directions
Func _refresh()
    For $u = 1 to 500
    ;Sleep(100)
Switch Random(1,4,1)
    Case 1
        For $i = 1 to 16
            If $aXY[$i][2]=$aXY[16][2]+$s And $aXY[$i][3]=$aXY[16][3] Then _reButton($i)
        Next
    Case 2
        For $i = 1 to 16
            If $aXY[$i][2]=$aXY[16][2]-$s And $aXY[$i][3]=$aXY[16][3] Then _reButton($i)
        Next
    Case 3
        For $i = 1 to 16
            If $aXY[$i][2]=$aXY[16][2] And $aXY[$i][3]=$aXY[16][3]+$s Then _reButton($i)
        Next
    Case 4
        For $i = 1 to 16
            If $aXY[$i][2]=$aXY[16][2] And $aXY[$i][3]=$aXY[16][3]-$s Then _reButton($i)
        Next
EndSwitch
Next
EndFunc

; displacement on 2-3 buttons.
Func _reArr($o,$u)
    For $i = 1 to 16
        If $aXY[$i][2]=$aXY[16][2]+$s*$o And $aXY[$i][3]=$aXY[16][3]+$s*$u Then
            _reButton($i)
            Return
        EndIf
    Next
EndFunc

; we change places a button with paleholder
Func _reButton($i)
    GUICtrlSetPos($aXY[$i][1], $aXY[16][2],$aXY[16][3])
    $tmp2=$aXY[$i][2]
    $tmp3=$aXY[$i][3]
    $aXY[$i][2]=$aXY[16][2]
    $aXY[$i][3]=$aXY[16][3]
    $aXY[16][2]=$tmp2
    $aXY[16][3]=$tmp3
EndFunc

Func _About()
$GuiPos = WinGetPos($Gui)
GUISetState(@SW_HIDE, $Gui)
$font="Arial"
$Gui1 = GUICreate($LngAbout, 210, 180,$GuiPos[0], $GuiPos[1], -1, 0x00000080)
    GUISetBkColor (0xf8c848)
    GUICtrlCreateLabel($LngTitle, 0, 20, 210, 23, 0x01)
    GUICtrlSetFont (-1,15, 600, -1, $font)
    GUICtrlSetColor(-1,0xa21a10)
    GUISetFont (9, 600, -1, $font)
    GUICtrlCreateLabel('12.07.2010', 0, 59, 210, 46, 0x01)
    GUICtrlCreateLabel($LngSite&':', 15, 115, 40, 17)
    $url=GUICtrlCreateLabel('http://azjio.ucoz.ru', 52, 115, 170, 17)
    GUICtrlSetCursor(-1, 0)
    GUICtrlSetColor(-1, 0x0000ff)
    GUICtrlCreateLabel('WebMoney: R939163939152', 15, 130, 195, 17)
    GUICtrlCreateLabel('Copyright AZJIO © 2010', 15, 145, 195, 17)
    GUISetState(@SW_SHOW, $Gui1)
$msg = $Gui1
    While 1
     $msg = GUIGetMsg()
     Select
        Case $msg = $url
            ShellExecute ('http://azjio.ucoz.ru')
        Case $msg = -3
            $msg = $Gui
            GUIDelete($Gui1)
            GUISetState(@SW_SHOW, $Gui)
            ExitLoop
        EndSelect
WEnd
EndFunc
Автор: KiLL
Дата сообщения: 12.07.2010 22:42
Друзья, подскажите, а реально ли такое на AutoIt написать вообще?

Есть объект InternetExplorer или WebBrowser, у него есть событие FileDownload, которое срабатывает в случае скачивания какого-либо файла (появляется окно).

Проблем скачать файл нету, когда известен линк. А когда линка нету? Например как при скачивании аттачей на gmail, вроде имя файла в аттаче одно. А при клике на Scan and Download выпадает совсем другое.

Именно в этом случае хотелось бы отработать FileDownload, отменить само окно (событие позволяет), перехватить ссылку и скачать файл. Примерно так работают плагины менеджеров закачек. Участие пользователя или клики по контролам для меня не подходят, я делаю полную автоматизацию.

На VB это выглядит примерно так:

Global IE As InternetExplorer
'---------------------------------
Sub Download()
...
IE.Navigate(...)
...
End Sub
'---------------------------------
Sub FileDownloadEvent() Handles IE.FileDownload
...
End Sub

Попытки сделать что-то вроде IE.Silent ни к чему не приводят.

Итого встал вопрос, а реально ли написать такую обработку события на AutoIt?

Параллельно здесь.
Автор: Trrrbit
Дата сообщения: 13.07.2010 02:45

Цитата:
Программа просто закрывает эти окошки, ведет подсчет закрытых окошек мастера. Когда количество закрытых окон мастера сходится с количество неизвестных устройств в диспетчере задач


Проверял один раз но наткнулся на следующее:
Когда появляется мастер установки нового оборудования, то просит нажать ДАЛЕЕ для автоматического поиска драйвера. С этим скрипт справляется без проблем. (ЗА ЭТО СПАСИБО), но:
когда система сама находит, скажем, CMOS и часы она предлагает нажать ГОТОВО, а не ДАЛЕЕЕ. Вот тут я и получил из динамика системного блока ругательства, типа запала какая-нить клавиша. Благо клавиатура таки работала.... Завершил скрипт.
Это баг? или единичный случай? Или может скрипт реагирует только на активное окно и начал ругаться из-за нажатого сочетания Alt+Tab? Можно ли его заставить нажимать еще и кнопку ГОТОВО, когода это нужно?
Автор: KiLL
Дата сообщения: 13.07.2010 09:54
Trrrbit, странно....

У меня система тоже находит и CMOS и часы, и описанной ситуации не происходит. Но я не использую сборки (Zver, WPI, Xtreme и т.п.). Для установки драйверов без шума и пыли они должны быть подписаны (сертификатами). Для пущей стабильности у меня в системе нету сторонних драйверов вообще. Только Windows XP SP3. А у вам похоже что-то где-то изменено.

По теме ветки. Я делаю полную автоматизацию, направленную на максимально быстрое развертывание. Т.е. тестирование написанного проходит за чашкой кофе и втыкание в монитор, никакого внешнего воздействия не оказываю.
Автор: madmasles
Дата сообщения: 13.07.2010 11:16
KiLL
Попробуйте так:
Код: #include <IE.au3>

$sUrlDownload = ''
$sFileName = ''
$iByte = 0
$oIE = _IECreate('http://rghost.ru/2059767/private/457a05107272aea8e6ed3025e3f57ea3', 0, 0)
$oLinks = _IELinkGetCollection($oIE)
For $oLink In $oLinks
If StringInStr($oLink.title, 'Скачать') <> 0 Then
$sUrlDownload = $oLink.href
$sFileName = StringStripWS(StringReplace($oLink.title, 'Скачать', ''), 8)
_IEQuit($oIE)
ExitLoop
EndIf
Next
$iByte = InetGetSize($sUrlDownload)
MsgBox(0, '', $sUrlDownload & @CRLF & $sFileName & @CRLF & $iByte & ' b.')
$timeout = TimerInit()
ProgressOn('Progress Download', 'Download: ' & $sFileName, '0 b.')
$hDownload = InetGet($sUrlDownload, @ScriptDir & "\" & $sFileName, 1, 1)
Do
Sleep(20)
$aData = InetGetInfo($hDownload, -1)
If $aData[1] > 0 Then
ProgressSet($aData[0] / $aData[1] * 100, $aData[0] & ' b.')
EndIf
Until InetGetInfo($hDownload, 2)
If $aData[0] = $aData[1] And $aData[1] = $iByte Then
ProgressSet(100, 'Success!')
Sleep(3000)
ProgressOff()
Else
ProgressSet(100, 'Error!')
Sleep(3000)
ProgressOff()
EndIf
Автор: KiLL
Дата сообщения: 13.07.2010 12:26
madmasles, пробовал InetGet - не получается, отдает html-страницу.

Вообще у меня пишется попытка получить прайс из личного кабинета одной конторы. И если в вашем примере под кнопкой есть ссылка, которую можно скачать, то у меня есть ссылка, которая через InetGet отдает html. Я попробовал обработку событий в IE. Но как-то пока не получается, всеравно окошко выскакивает. Чего-то я не понимаю.

;here goes download IE event handling
$oEvents = ObjEvent($oIE,"IEEvent_","DWebBrowserEvents2")
_IENavigate($oIE,$sURL,0)

Sleep(20000)

Exit

Func IEEvent_FileDownload ($ActiveDocument ,$Cancel)
$Cancel = True
InetGet($sPriceURL,"D:\1.zip",0,1)
EndFunc

Func IEEvent_BeforeNavigate($pDisp,$NavigateURL,$Flags,$TargetFrameName,$PostData,$Headers,$Cancel)
$Cancel = True
$sPriceURL = $NavigateURL
EndFunc
Автор: madmasles
Дата сообщения: 13.07.2010 12:33
KiLL
Вы бы тогда пример страницы привели. Не личный кабинет конторы, а что-нибудь похожее в открытом доступе.

Попробуйте открыть Вашу страницу в IE и посмотреть все ссылки так:
Код: #include <IE.au3>

$i = 0
$oIE = _IEAttach('[Class:IEFrame]', 'embedded')
$oLinks = _IELinkGetCollection($oIE)
$iNumLinks = @extended
MsgBox(0, 'Link Info', $iNumLinks & ' links found')
For $oLink In $oLinks
$i += 1
MsgBox(0, 'Link № ' & $i, $oLink.title & @CRLF & $oLink.innertext & @CRLF & $oLink.href)
Next
Автор: KiLL
Дата сообщения: 13.07.2010 15:49
madmasles, думаю с Gmail будет что-то подобное. Вечером проверю.
Автор: DiaBlo90
Дата сообщения: 13.07.2010 18:46
Ребят, подскажите в чем косяк, почему при нажатии esc скрипт закрывается? И как от этого можно избавиться

Хот кеи на esc не ставил.

Страницы: 12345678910111213

Предыдущая тема: Проблемы с VMware Workstation (часть 4)


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