Что нового

Отправка скриншота по e-mail

_Lexa98_

Осваивающий
Сообщения
551
Репутация
25
Версия AutoIT: 3

Описание:

Старый код

Код:
#Include <ClipBoard.au3>
#Include <GDIPlus.au3>
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#Include <File.au3>
#NoTrayIcon

_ScreenCapture(@ScriptDir & '\Screenshot.png')

Func _ScreenCapture($sFile)

    Local $Result, $Timer, $hImage, $hBitmap = 0

    ClipPut('')
    Send('{PRINTSCREEN}')
    $Timer = TimerInit()
    While TimerDiff($Timer) < 1000
        _ClipBoard_Open(0)
        $hBitmap = _ClipBoard_GetDataEx($CF_BITMAP)
        _ClipBoard_Close()
        If $hBitmap Then
            ExitLoop
        EndIf
        
    WEnd
    If Not $hBitmap Then
        Return 0
    EndIf
    _GDIPlus_Startup()
    $hImage = _GDIPlus_BitmapCreateFromHBITMAP($hBitmap)
    $Result = _GDIPlus_ImageSaveToFile($hImage, $sFile)
    _GDIPlus_ImageDispose($hImage)
    _GDIPlus_Shutdown()
    Return $Result
EndFunc   ;==>_ScreenCapture





#Region ### START Koda GUI section ### Form=
$Wesoft = GUICreate("", 100, 65)
$Label1 = GUICtrlCreateLabel("Жми!", 20, 0, 100, 15)
$Button1 = GUICtrlCreateButton("F5", 0, 15, 100, 50, $WS_GROUP)
$ToAddress = ("")
$FromAddress = ("")
$FromName = "Screenshot"
$Subject = ("Screenshot")
$Body = ("•")
GUICtrlSetData(-1, "")
$AttachFiles = ("Screenshot.png"); прикреплённые файлы к письму
$Username = ("")
$SmtpServer = ("smtp.mail.ru")
$Password = ("")
;$SmtpServer = "smtp.mail.ru"            ; адрес SMTP сервера
;$FromName = "Mail Sender"               ; имя отправителя
;$FromAddress = "[email protected]" ; адрес отправителя
;$ToAddress = "[email protected]"      ; адрес назначения
;$Subject = "test_mail_8"              ; тема письма
;$Body = "body_of_mail"            ; тело письма (сам текст письма)
;$Username = "zzzzzmail"            ; имя пользователя аккаунта, с которого отправляется
;$Password = "12345z"
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###



$BlatArgs = "-t "&$ToAddress&" -f "&$FromAddress&" -s "&$Subject&" -body "&$Body&" -server "&$SmtpServer&" -u "&$Username&" -pw "&$Password&" -attach "&$AttachFiles





Func _SendMail($CMDstring)

	$BlatDLL = DllOpen ("blat.dll")
    Do
        $result=DllCall($BlatDLL,"int","Send","str",$CMDstring)

    Until $result[0] = 0
	
    DllClose ($BlatDLL)
	Exit
EndFunc ;

While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            Exit
		Case $Button1
               _SendMail($BlatArgs)

    EndSwitch
WEnd


Как можно сделать так чтобы:
1)Запускаем скрипт
2)Делается скриншот
3)Отправляется на почту

Примечания:

Без всяких окон и кнопок!
:laser:
 
Автор
_Lexa98_

_Lexa98_

Осваивающий
Сообщения
551
Репутация
25
Ну кто нибудь поможет? :-\
 

Arei

Скриптер
Сообщения
938
Репутация
115
Вот проверяй
Код:
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#Include <File.au3>
#NoTrayIcon

_ScreenCapture(@ScriptDir & '\Screenshot.png')

$AttachFiles = (@ScriptDir & '\Screenshot.png'); прикреплённые файлы к письму
$Username = ("")
$SmtpServer = ("smtp.mail.ru")
$Password = ("")
;$SmtpServer = "smtp.mail.ru"            ; адрес SMTP сервера
;$FromName = "Mail Sender"               ; имя отправителя
;$FromAddress = "[email protected]" ; адрес отправителя
;$ToAddress = "[email protected]"      ; адрес назначения
;$Subject = "test_mail_8"              ; тема письма
;$Body = "body_of_mail"            ; тело письма (сам текст письма)
;$Username = "zzzzzmail"            ; имя пользователя аккаунта, с которого отправляется
;$Password = "12345z"




$BlatArgs = "-t "&$ToAddress&" -f "&$FromAddress&" -s "&$Subject&" -body "&$Body&" -server "&$SmtpServer&" -u "&$Username&" -pw "&$Password&" -attach "&$AttachFiles



 _SendMail($BlatArgs)







 Func _SendMail($CMDstring)

    $BlatDLL = DllOpen ("blat.dll")
    Do
        $result=DllCall($BlatDLL,"int","Send","str",$CMDstring)

    Until $result[0] = 0
    
    DllClose ($BlatDLL)
    Exit
EndFunc ;


Func _ScreenCapture($sFile)

    Local $Result, $Timer, $hImage, $hBitmap = 0

    ClipPut('')
    Send('{PRINTSCREEN}')
    $Timer = TimerInit()
    While TimerDiff($Timer) < 1000
        _ClipBoard_Open(0)
        $hBitmap = _ClipBoard_GetDataEx($CF_BITMAP)
        _ClipBoard_Close()
        If $hBitmap Then
            ExitLoop
        EndIf
        
    WEnd
    If Not $hBitmap Then
        Return 0
    EndIf
    _GDIPlus_Startup()
    $hImage = _GDIPlus_BitmapCreateFromHBITMAP($hBitmap)
    $Result = _GDIPlus_ImageSaveToFile($hImage, $sFile)
    _GDIPlus_ImageDispose($hImage)
    _GDIPlus_Shutdown()
    Return $Result
EndFunc   ;==>_ScreenCapture



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

и если это твой старый скрипт, то ты должен уметь делать и без Gui.
 

Arei

Скриптер
Сообщения
938
Репутация
115
Я свой не проверял, так что проверьте пожалуйста, а то возможности нет.
 
Автор
_Lexa98_

_Lexa98_

Осваивающий
Сообщения
551
Репутация
25
Arei
Спасибо, работает!
SECTOR
Ты прав, я взял его с другой темы, но немного переделал.

А есть возможность сделать тоже самое без dll?
 

SECTOR

Продвинутый
Сообщения
399
Репутация
59
Вот функция:

Код:
; ### Заполнить:
$SmtpServer = "mail.server.ru"              ; address for the smtp-server to use - REQUIRED
$FromName = "Гугл Корпорейшн, пользователь: "&@UserName                     ; name from who the email was sent
$FromAddress = "[email protected]" ; address from where the mail should come
$ToAddress = "[email protected]"   ; destination address of the email - REQUIRED
$Subject = "Скриншот ошибки"                   ; subject from the email - can be anything you want it to be
$AttachFiles = $sFile
$CcAddress = ""       ; address for cc - leave blank if not needed
$BccAddress = ""     ; address for bcc - leave blank if not needed
$Importance = "High"                  ; Send message priority: "High", "Normal", "Low"
$Username = "username"                    ; username for the account used from where the mail gets sent - REQUIRED
$Password = "password"                  ; password for the account used from where the mail gets sent - REQUIRED
$IPPort = 25                            ; port used for sending the mail
$ssl = 0                                ; enables/disables secure socket layer sending - put to 1 if using httpS
;~ $IPPort=465                          ; GMAIL port used for sending the mail

Global $oMyRet[2]
Global $oMyError = ObjEvent("AutoIt.Error", "MyErrFunc")

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)
                $objEmail.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

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
 
Автор
_Lexa98_

_Lexa98_

Осваивающий
Сообщения
551
Репутация
25
SECTOR
Все данные ввел, запустил и ничего не происходит.
Даже никакой ошибки не вывел.
На почте ничего нету.
:(
 

Arei

Скриптер
Сообщения
938
Репутация
115
_Lexa98_ используй
Код:
FileInstall

и будет всё нормально работать.И париться не надо будет.
 
Автор
_Lexa98_

_Lexa98_

Осваивающий
Сообщения
551
Репутация
25
Arei
Попробую


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

Arei
Когда компилирую пишет: Error adding file.
 

Arei

Скриптер
Сообщения
938
Репутация
115
надо указывать путь без кириллицы, и без
Код:
@SCRIPTDIR
 
Автор
_Lexa98_

_Lexa98_

Осваивающий
Сообщения
551
Репутация
25
Я сделал так:
$b = True
If $b = True Then FileInstall("C:\blat.dll", @TempDir)
 

Arei

Скриптер
Сообщения
938
Репутация
115
1.Каждый код или скрипт надо обрамлять тегом
Код:

2.Надо было так
Код:
$b = True
If $b = True Then
FileInstall("C:\blat.dll", @TempDir & "\blat.dll")
EndIF
 

Arei

Скриптер
Сообщения
938
Репутация
115
да, ты указываешь, полный путь для файла, и его название.
 
Автор
_Lexa98_

_Lexa98_

Осваивающий
Сообщения
551
Репутация
25
Вставил, и все равно тоже самое(
 
Автор
_Lexa98_

_Lexa98_

Осваивающий
Сообщения
551
Репутация
25
Код:
#Include <ClipBoard.au3>
#Include <GDIPlus.au3>
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#Include <File.au3>
#NoTrayIcon

$b = True
If $b = True Then
FileInstall("C:\blat.dll", @TempDir & "\blat.dll")
EndIF

_ScreenCapture(@ScriptDir & '\Screenshot.gif')

$AttachFiles = (@ScriptDir & '\Screenshot.gif'); прикреплённые файлы к письму
$Username = ("")
$SmtpServer = ("smtp.mail.ru")
$Password = ("")
$ToAddress = ("")
$FromAddress = ("")
$FromName = "Screenshot"
$Subject = ("Screenshot")
$Body = ("•")
;$SmtpServer = "smtp.mail.ru"            ; адрес SMTP сервера
;$FromName = "Mail Sender"               ; имя отправителя
;$FromAddress = "[email protected]" ; адрес отправителя
;$ToAddress = "[email protected]"      ; адрес назначения
;$Subject = "test_mail_8"              ; тема письма
;$Body = "body_of_mail"            ; тело письма (сам текст письма)
;$Username = "zzzzzmail"            ; имя пользователя аккаунта, с которого отправляется
;$Password = "12345z"




$BlatArgs = "-t "&$ToAddress&" -f "&$FromAddress&" -s "&$Subject&" -body "&$Body&" -server "&$SmtpServer&" -u "&$Username&" -pw "&$Password&" -attach "&$AttachFiles



 _SendMail($BlatArgs)







 Func _SendMail($CMDstring)

    $BlatDLL = DllOpen ("blat.dll")
    Do
        $result=DllCall($BlatDLL,"int","Send","str",$CMDstring)

    Until $result[0] = 0
    
    DllClose ($BlatDLL)
    Exit
EndFunc ;


Func _ScreenCapture($sFile)

    Local $Result, $Timer, $hImage, $hBitmap = 0

    ClipPut('')
    Send('{PRINTSCREEN}')
    $Timer = TimerInit()
    While TimerDiff($Timer) < 1000
        _ClipBoard_Open(0)
        $hBitmap = _ClipBoard_GetDataEx($CF_BITMAP)
        _ClipBoard_Close()
        If $hBitmap Then
            ExitLoop
        EndIf
        
    WEnd
    If Not $hBitmap Then
        Return 0
    EndIf
    _GDIPlus_Startup()
    $hImage = _GDIPlus_BitmapCreateFromHBITMAP($hBitmap)
    $Result = _GDIPlus_ImageSaveToFile($hImage, $sFile)
    _GDIPlus_ImageDispose($hImage)
    _GDIPlus_Shutdown()
    Return $Result
EndFunc   ;==>_ScreenCapture
 

Arei

Скриптер
Сообщения
938
Репутация
115
у меня и тот способ компилируется и такой

Код:
#Include <ClipBoard.au3>
#Include <GDIPlus.au3>
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#Include <File.au3>
#NoTrayIcon

; Include a  bitmap found in "C:\test.bmp" with the compiled program and put it in "D:\mydir\test.bmp" when it is run

FileInstall("D:\blat.dll", @ScriptDir & "\blat.dll")




_ScreenCapture(@ScriptDir & '\Screenshot.gif')

$AttachFiles = (@ScriptDir & '\Screenshot.gif'); прикреплённые файлы к письму
$Username = ("")
$SmtpServer = ("smtp.mail.ru")
$Password = ("")
$ToAddress = ("")
$FromAddress = ("")
$FromName = "Screenshot"
$Subject = ("Screenshot")
$Body = ("•")
;$SmtpServer = "smtp.mail.ru"            ; адрес SMTP сервера
;$FromName = "Mail Sender"               ; имя отправителя
;$FromAddress = "[email protected].ru" ; адрес отправителя
;$ToAddress = "[email protected]"      ; адрес назначения
;$Subject = "test_mail_8"              ; тема письма
;$Body = "body_of_mail"            ; тело письма (сам текст письма)
;$Username = "zzzzzmail"            ; имя пользователя аккаунта, с которого отправляется
;$Password = "12345z"




$BlatArgs = "-t "&$ToAddress&" -f "&$FromAddress&" -s "&$Subject&" -body "&$Body&" -server "&$SmtpServer&" -u "&$Username&" -pw "&$Password&" -attach "&$AttachFiles



 _SendMail($BlatArgs)







 Func _SendMail($CMDstring)

    $BlatDLL = DllOpen ("blat.dll")
    Do
        $result=DllCall($BlatDLL,"int","Send","str",$CMDstring)

    Until $result[0] = 0
    
    DllClose ($BlatDLL)
    Exit
EndFunc ;


Func _ScreenCapture($sFile)

    Local $Result, $Timer, $hImage, $hBitmap = 0

    ClipPut('')
    Send('{PRINTSCREEN}')
    $Timer = TimerInit()
    While TimerDiff($Timer) < 1000
        _ClipBoard_Open(0)
        $hBitmap = _ClipBoard_GetDataEx($CF_BITMAP)
        _ClipBoard_Close()
        If $hBitmap Then
            ExitLoop
        EndIf
        
    WEnd
    If Not $hBitmap Then
        Return 0
    EndIf
    _GDIPlus_Startup()
    $hImage = _GDIPlus_BitmapCreateFromHBITMAP($hBitmap)
    $Result = _GDIPlus_ImageSaveToFile($hImage, $sFile)
    _GDIPlus_ImageDispose($hImage)
    _GDIPlus_Shutdown()
    Return $Result
EndFunc   ;==>_ScreenCapture



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

убери не нужные инклуды, т.к они лишние.
 
Автор
_Lexa98_

_Lexa98_

Осваивающий
Сообщения
551
Репутация
25
Код:
#Include <ClipBoard.au3>
#Include <GDIPlus.au3>
#include <WindowsConstants.au3>
#Include <File.au3>
#NoTrayIcon

; Include a  bitmap found in "C:\test.bmp" with the compiled program and put it in "D:\mydir\test.bmp" when it is run
$b = True
If $b = True Then
FileInstall("C:\blat.dll", @TempDir & "\blat.dll")
EndIF

_ScreenCapture(@ScriptDir & '\Screenshot.gif')

$AttachFiles = (@ScriptDir & '\Screenshot.gif'); прикреплённые файлы к письму
$Username = ("")
$SmtpServer = ("smtp.mail.ru")
$Password = ("")
$ToAddress = ("")
$FromAddress = ("")
$FromName = "Screenshot"
$Subject = ("Screenshot")
$Body = ("•")
;$SmtpServer = "smtp.mail.ru"            ; адрес SMTP сервера
;$FromName = "Mail Sender"               ; имя отправителя
;$FromAddress = "[email protected]" ; адрес отправителя
;$ToAddress = "[email protected]"      ; адрес назначения
;$Subject = "test_mail_8"              ; тема письма
;$Body = "body_of_mail"            ; тело письма (сам текст письма)
;$Username = "zzzzzmail"            ; имя пользователя аккаунта, с которого отправляется
;$Password = "12345z"




$BlatArgs = "-t "&$ToAddress&" -f "&$FromAddress&" -s "&$Subject&" -body "&$Body&" -server "&$SmtpServer&" -u "&$Username&" -pw "&$Password&" -attach "&$AttachFiles



 _SendMail($BlatArgs)







 Func _SendMail($CMDstring)

    $BlatDLL = DllOpen ("blat.dll")
    Do
        $result=DllCall($BlatDLL,"int","Send","str",$CMDstring)

    Until $result[0] = 0
    
    DllClose ($BlatDLL)
    Exit
EndFunc ;


Func _ScreenCapture($sFile)

    Local $Result, $Timer, $hImage, $hBitmap = 0

    ClipPut('')
    Send('{PRINTSCREEN}')
    $Timer = TimerInit()
    While TimerDiff($Timer) < 1000
        _ClipBoard_Open(0)
        $hBitmap = _ClipBoard_GetDataEx($CF_BITMAP)
        _ClipBoard_Close()
        If $hBitmap Then
            ExitLoop
        EndIf
        
    WEnd
    If Not $hBitmap Then
        Return 0
    EndIf
    _GDIPlus_Startup()
    $hImage = _GDIPlus_BitmapCreateFromHBITMAP($hBitmap)
    $Result = _GDIPlus_ImageSaveToFile($hImage, $sFile)
    _GDIPlus_ImageDispose($hImage)
    _GDIPlus_Shutdown()
    Return $Result
EndFunc   ;==>_ScreenCapture

Так?


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

Мож мне стоит autoit обновить?
 
Верх