Kommt drauf an wie du es schreibst !
Eins meiner Skripte braucht nichtmal 1% des Prozessors.
was willst du uns damit sagen?
Kommt drauf an wie du es schreibst !
Eins meiner Skripte braucht nichtmal 1% des Prozessors.
was willst du uns damit sagen?
Oh!
Es tut mir leid.
Ich hab wohl ein wenig verpennt, das es hier schon mehrere Seiten gibt.
Diese Antwort war auf den letzten Beitrag im ersten Thread bezogen
Danke für den Hinweis
Ich danke euch.
Man kann ja auch Screenshots erstellen und die dann per Mail versenden. Braucht es dazu Outlook Express oder ist ein Mail Client irgendwie integriert? Muss nämlich wissen, ob ich mit nLite Outlook Express aus dem Windows rausschmeissen kann.
dafür gibts ne funktion..schau mal hier:
#cs ----------------------------------------------------------------------------
[/autoit] [autoit][/autoit] [autoit]AutoIt Version: 3.3.0.0
Author: myName
Script Function:
Template AutoIt script.
#ce ----------------------------------------------------------------------------
[/autoit] [autoit][/autoit] [autoit]; Script Start - Add your code below here
[/autoit] [autoit][/autoit] [autoit]#include <INet.au3>
#include <file.au3>
$s_SmtpServer = "smtp.googlemail.com"
$s_FromName = "Mega"
$s_FromAddress = "email"
$s_ToAddress = "marci-b@hotmail.de"
$s_Subject = "My Test UDF"
$s_UName = "usernmae"
$s_PWD = "passwort"
Dim $as_Body[2]
$as_Body[0] = "Testing the new email udf"
$as_Body[1] = "Second Line"
$Response = _INetSmtpMailAuth($s_SmtpServer, $s_FromName, $s_FromAddress, $s_ToAddress, $s_UName, $s_PWD, $s_Subject, $as_Body)
;~ $Response = _INetSmtpMail ($s_SmtpServer, $s_FromName, $s_FromAddress, $s_ToAddress, $s_Subject, $as_Body)
$err = @error
If $Response = 1 Then
MsgBox(0, "Success!", "Mail sent")
Else
MsgBox(0, "Error!", "Mail failed with error code " & $err)
EndIf
;===============================================================================
;
; Function Name: _INetSmtpMailAuth()
; Description: Sends an email using SMTP over TCP IP.
; Parameter(s): $s_SmtpServer - SMTP server to be used for sending email
; $s_FromName - Name of sender
; $s_FromAddress - eMail address of sender
; $s_ToAddress - Address that email is to be sent to
; $s_Username - Username for Authentication (bernd670)
; $s_Passwd - Password for Authentication (bernd670)
; $s_Subject - Subject of eMail
; $as_Body - Single dimension array containing the body of eMail as strings
; $s_helo - Helo identifier (default @COMPUTERNAME) sometime needed by smtp server
; $s_first - send before Helo identifier (default @CRLF) sometime needed by smtp server
; $b_trace - trace on a splash window (default 0 = no trace)
; Requirement(s): None
; Return Value(s): On Success - Returns 1
; On Failure - 0 and sets
; @ERROR = 1 - Invalid Parameters
; @ERROR = 2 - Unable to start TCP
; @ERROR = 3 - Unable to resolve IP
; @ERROR = 4 - Unable to create socket
; @ERROR = 5x - Cannot open SMTP session
; @ERROR = 50x - Cannot send body
; @ERROR = 5000 - Cannot close SMTP session
; Authors: Original function to send email via TCP - Asimzameer
; Conversion to UDF - Walkabout
; Correction Helo, timeout, trace - Jpm
; Correction send before Helo - Jpm
; Include Authentication - bernd670
;
;===============================================================================
Func _INetSmtpMailAuth($s_SmtpServer, $s_FromName, $s_FromAddress, $s_ToAddress, $s_Username, $s_Passwd, $s_Subject = "", $as_Body = "", $s_helo = "", $s_first = "-1", $b_trace = 0)
Local $v_Socket
Local $s_IPAddress
Local $i_Count
Local $s_Send[9]
Local $s_ReplyCode[9];Return code from SMTP server indicating success
If $s_SmtpServer = "" Or $s_FromAddress = "" Or $s_ToAddress = "" Or $s_Username = "" Or $s_Passwd = "" Or $s_FromName = "" Or StringLen($s_FromName) > 256 Then
SetError(1)
Return 0
EndIf
If $s_helo = "" Then $s_helo = @ComputerName
If TCPStartup() = 0 Then
SetError(2)
Return 0
EndIf
StringRegExp($s_SmtpServer, "(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)")
If @extended Then
$s_IPAddress = $s_SmtpServer
Else
$s_IPAddress = TCPNameToIP($s_SmtpServer)
EndIf
If $s_IPAddress = "" Then
TCPShutdown()
SetError(3)
Return 0
EndIf
$v_Socket = TCPConnect($s_IPAddress, 25)
If $v_Socket = -1 Then
TCPShutdown()
SetError(4)
Return (0)
EndIf
$s_Send[0] = "EHLO " & $s_helo & @CRLF
;~ If StringLeft($s_helo,5) <> "EHLO " Then $s_Send[0] = "EHLO " & $s_helo & @CRLF
$s_ReplyCode[0] = "250"
$s_Send[1] = "AUTH LOGIN" & @CRLF
$s_ReplyCode[1] = "334"
$s_Send[2] = _Base64Encoding($s_Username) & @CRLF
$s_ReplyCode[2] = "334"
$s_Send[3] = _Base64Encoding($s_Passwd) & @CRLF
$s_ReplyCode[3] = "235"
$s_Send[4] = "MAIL FROM: <" & $s_FromAddress & ">" & @CRLF
$s_ReplyCode[4] = "250"
$s_Send[5] = "RCPT TO: <" & $s_ToAddress & ">" & @CRLF
$s_ReplyCode[5] = "250"
$s_Send[6] = "DATA" & @CRLF
$s_ReplyCode[6] = "354"
$s_Send[7] = "From: " & $s_FromName & " <" & $s_FromAddress & ">" & @CRLF & _
"To: " & "<" & $s_ToAddress & ">" & @CRLF & _
"Subject: " & $s_Subject & @CRLF & _
"Mime-Version: 1.0" & @CRLF & _
"Content-Type: text/plain; charset=US-ASCII" & @CRLF & _
@CRLF
$s_ReplyCode[7] = ""
$s_Send[8] = @CRLF & "." & @CRLF
$s_ReplyCode[8] = "250"
; open stmp session
If _SmtpSend ($v_Socket, $s_Send[0], $s_ReplyCode[0], $b_trace, "220", $s_first) Then
SetError(50)
Return 0
EndIf
; send header
For $i_Count = 0 To UBound($s_Send) - 2
If _SmtpSend ($v_Socket, $s_Send[$i_Count], $s_ReplyCode[$i_Count], $b_trace) Then
SetError(50 + $i_Count)
Return 0
EndIf
Next
; send body records (a record can be multiline : take care of a subline beginning with a dot should be ..)
For $i_Count = 0 To UBound($as_Body) - 1
; correct line beginning with a dot
If StringLeft($as_Body[$i_Count], 1) = "." Then $as_Body[$i_Count] = "." & $as_Body[$i_Count]
If _SmtpSend ($v_Socket, $as_Body[$i_Count] & @CRLF, "", $b_trace) Then
SetError(500 + $i_Count)
Return 0
EndIf
Next
; close the smtp session
$i_Count = UBound($s_Send) - 1
If _SmtpSend ($v_Socket, $s_Send[$i_Count], $s_ReplyCode[$i_Count], $b_trace) Then
SetError(5000)
Return 0
EndIf
TCPCloseSocket($v_Socket)
TCPShutdown()
Return 1
EndFunc ;==>_INetSmtpMailAuth
;===============================================================================
;
; Function Name: _Base64Encoding()
; Description: Kodiert eine Zeichenfolge mit dem Base64-Verfahren
; (http://de.wikipedia.org/wiki/Base64)
; Parameter(s): $String - Zeichenfolge die kodiert werden soll
; Requirement(s): None
; Return Value(s): Kodierte Zeichenfolge
; Authors: bernd670
;
;===============================================================================
Func _Base64Encoding($String)
$strUmsetzung = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
$strRetValue = ""
For $i = 1 To StringLen($String) Step 3
$strTok = StringMid($String, $i, 3)
Switch StringLen($strTok)
Case 3
$iTokVal = (Asc(StringMid($strTok, 1, 1)) * 256 + _
Asc(StringMid($strTok, 2, 1))) * 256 + _
Asc(StringMid($strTok, 3, 1))
$strTokCryt = StringMid($strUmsetzung, (BitAND($iTokVal, 63)) + 1, 1)
$iTokVal = BitShift($iTokVal, 6)
$strTokCryt = StringMid($strUmsetzung, (BitAND($iTokVal, 63)) + 1, 1) & $strTokCryt
$iTokVal = BitShift($iTokVal, 6)
$strTokCryt = StringMid($strUmsetzung, (BitAND($iTokVal, 63)) + 1, 1) & $strTokCryt
$iTokVal = BitShift($iTokVal, 6)
$strTokCryt = StringMid($strUmsetzung, (BitAND($iTokVal, 63)) + 1, 1) & $strTokCryt
$strRetValue &= $strTokCryt
Case 2
$iTokVal = (Asc(StringMid($strTok, 1, 1)) * 256 + _
Asc(StringMid($strTok, 2, 1))) * 256
$iTokVal = BitShift($iTokVal, 6)
$strTokCryt = StringMid($strUmsetzung, (BitAND($iTokVal, 63)) + 1, 1)
$iTokVal = BitShift($iTokVal, 6)
$strTokCryt = StringMid($strUmsetzung, (BitAND($iTokVal, 63)) + 1, 1) & $strTokCryt
$iTokVal = BitShift($iTokVal, 6)
$strTokCryt = StringMid($strUmsetzung, (BitAND($iTokVal, 63)) + 1, 1) & $strTokCryt
$strRetValue &= $strTokCryt & "="
Case 1
$iTokVal = Asc(StringMid($strTok, 1, 1)) * 65536
$iTokVal = BitShift($iTokVal, 12)
$strTokCryt = StringMid($strUmsetzung, (BitAND($iTokVal, 63)) + 1, 1)
$iTokVal = BitShift($iTokVal, 6)
$strTokCryt = StringMid($strUmsetzung, (BitAND($iTokVal, 63)) + 1, 1) & $strTokCryt
$strRetValue &= $strTokCryt & "=="
EndSwitch
Next
Return $strRetValue
EndFunc ;==>_Base64Encoding
emails kannst du auf mehrere arten versenden.
mit email-programmen wie Outlook, Outlook Express usw.
oder aber du nimmst einen webanbieter so wie gmx oder web und verbindest diesen mit dieser funktion: https://autoit.de/index.php?page…18247#post18247
(bin mir nicht ganz sicher ob das die funktion die ich meine, falls du probleme hast einfach melden )
Edit: link angepasst
Ich danke.
Diese Funktionen muss ich einfach in den Code einfügen und dann aufrufen, also nicht speziell eine neue .au3 Datei machen, oder? Ist ja nicht objektorientiert.
Was bedeutet eigentlich #include <INet.au3>?
Was bedeutet eigentlich #include <INet.au3>?
Bedeutet, das die INet.au3 eingebunden wird beim erstellen der Exe-Datei bzw. vor dem Starten des Scriptes. Siehe hier auch die Hilfe, die es Dir erklärt.
Was bedeutet eigentlich #include <INet.au3>?
mit include lädtst du quasi quelltext mit in deine datei.
so hast du variablen verfügbar oder verschiedene Funktionen.
für einige funktionen braucht man includes da sie (noch) nicht zu den Standartfunktionen von Autoit gehören.
Ok und wie merke ich wenn ich was includen muss?
Die oben gepostete Funktion zum E-Mail versenden kann man einfach in den Code einfgüen und dann die Funktion benutzen?
ZitatOk und wie merke ich wenn ich was includen muss?
an den funktionen die du benützt. steht in der hilfe immer dabei was du includen musst. bei funktionen die mit _ beginnen musst du egtl immer etwas includen.
noch leichter machts dieses tool: https://autoit.de/index.php?page=Thread&threadID=2659
ZitatDie oben gepostete Funktion zum E-Mail versenden kann man einfach in den Code einfgüen und dann die Funktion benutzen?
ja du kannst auch die komplette funktion einfügen.
Also bei mir brauchen die Scripte meistens so 2-3 %.
Wenn du allerdings sowas hier in dein script einbaust:
$var = 1
While 1
$var += 1
ConsoleWrite($var & @CRLF)
WEnd
dann kann es auch mal auf 100% (bei mir nur 50, wegen dualcore) hochgehen...
mit
[autoit]#include <BLABLA>
[/autoit]fügst du Dateien aus dem AutoIt-Verzeichnis ein.
[autoit]#include "BLABLA"
[/autoit]mit Anführungszeichen fügt die datei aus dem Verzeichnis, in dem auch das Skript liegt ein. Dadurch kannst du in eine Datei wichtige Konstanten schreiben, in eine andere Wichtige Funktionen und in der dritten Datei die Funktionen fürs Gui, etc. Dann muss nicht immer alles in eine Datei.
Zitatmit Anführungszeichen fügt die datei aus dem Verzeichnis, in dem auch
das Skript liegt ein. Dadurch kannst du in eine Datei wichtige
Konstanten schreiben, in eine andere Wichtige Funktionen und in der
dritten Datei die Funktionen fürs Gui, etc. Dann muss nicht immer alles
in eine Datei.
Welche Endung muss denn die Datei haben?
Eigentlich au3, aber ich glaube mit dem einfügen geht das auch mit anderen Endungen.
ZitatWelche Endung muss denn die Datei haben?
die endung ist im Prinzip egal. wichtig ist nur dass in der datei Autoit-Quelltext steht.
andere endungen machen aber wenig sinn finde ich
Ok. Soll ich denn für alle Funktionen eine seperate Datei erstellen oder alle zusammenfassen?
wie dir das am liebsten ist. es gibt viele die lieber in andere dateien auslagern um den code an sich sehr übersichtlich zu halten. mir isses eher lieber funktionen im "hauptscript" mit drin zu haben, dann kann man sie öfters mal verändern. auslagern tu ich nur bei großen projekten.
egal was von beiden du verwendest: dein programm wird dadurch nicht beeinflusst
Ich danke dir. Damit sollte das wohl beantwortet seind.
Ich habe jetzt aber noch ein paar Programmierungsfragen. Ich habe mich ein wenig eingelesen und vieles ist mir bereits klar bzw. konnte ich selber machen, AutoIt ist geil.
1. Programme öffnen weiss ich wie. In gewissen Programmen muss ich dann aber Aktionen ausführen, also wenn ich selber vor dem PC sitze, wäre das per Mausklick. Muss ich dann das mit AutoIt auch per Mausklick lösen oder geht das auch anders? Es handelt sich dabei um klicken auf Buttons, Zeilen etc.
2. Es gibt ja die Funktion
BlockInput. Wenn ich diese aktiviere dann funktionieren mit AutoIt unter Win XP Prof. Tastatureingaben und Mausklicks immer noch, oder? Nur wenn ich dann selber was eingeben oder klicken möchte, dann gehts nicht mehr. So habe ich das verstanden, das wäre nämlich genau das was ich bräuchte.
3. Ich muss zudem noch eine Webseite aufrufen, dort Code kopieren und dann in eine Textdatei einfügen und diese an einem bestimmten Ort mit einem bestimmten Namen einfügen. Wie geht das?
4. Zudem gibt es bei Programmen, die ich starte, teilweise Updates. Dann erscheint so eine Meldung und man kann auf "Ja" klicken und das Update wird automatisch installiert. Ich möchte nun, dass das klicken auf "Ja" eben nur erfolgt, wenn ein solche Fenster beim starten des Programmes erscheint. Kann man also irgendwie sowas machen, dass eine Aktion nur durchgeführt wird, wenn ein Fenster geöffnet wird? Es wird aber kein neuer Prozess geöffnet, sondern eben nur das Programmfenster und dann eben das Updatefensterlein. Da kann man doch sicher was mit if und einer Funktion machen.
5. Zudem möchte ich sicherstellen, dass eine Aktion wie z.B. das öffnen eines Programmes, zuerst beendet ist bevor AutoIt weiteren Code ausführt. Soll ich da im Code einfach eine Pause reinschreiben oder geht das auch anders?
1. da gibt es mit den control funktionen wesentlich bessere möglichkeiten
schau dir am besten die beispiele in der hilfe an (controlclick, controlsend, controlsettext, usw...)
2. weiß nich genau was du meinst aber einfach ausprobieren schadet nicht
(wenn was schief geht: bei blockinput(1) kann man immer noch Strg + Alt + Entfernen drücken und dann den process beenden)
3. oft isses am besten den quelltext der seite runterzuladen und diesen zu durchsuchen, den quelltext bekommt man mit
_INetGetSource()
4. dazu könntest du WinWait mit dem timeout parameter verwenden
5. wiederum winwait
1. Dann werde ich diese Control Funktionen benutzen. Wie würden denn die Funktionen für Mausklicks und Tastatureingaben lauten?
2. Naja ich meinte mit blockinput kann man ja keine externen Tastatur- und Mauseingaben mehr machen, oder? Also ich könnte dann mit der Maus und Tastatur nichts mehr machen. Und da habe ich mich eben gefragt, ob dann AutoIt noch Maus- und Tastatureingaben machen kann.
3. _INetGetSource() habe ich in der Hilfe nicht gefunden.
4. Und dann mit der Control Funktion den "Ja" Button betätigen?
5. Wie kann ich da winwait brauchen? Mit winwait wird ja auf ein Fenster gewartet und nicht bis eine Aktion vollständig ausgeführt wurde.