Beiträge von MojoeB
-
-
moin
du könntest mal dies hier versuchen :
_ImageSearchArea($findImage, $resultPosition, $x1, $y1, $right, $bottom, ByRef $x, ByRef $y, $tolerance = 0, $transparency = 0)
-> $tolerance = 0<-<-Der Wert in wie weit darf das bild abweichen.kommt von dieser : ImageSearch2015.au3
ich weiß nicht welche du verwendest.glaube aber da benötigst du noch die dll dateien.
Der Wert kann von $tolaerance= 0 - 255 sein.
-
-
über den Browser Zugang.
Wie genau machst du das hast du das evtl. mit unraid?Falls ja dann meldet sich dein windows auch nicht mit einem anderen nutzer an, oder geschweige den wird neu angemeldet.
Die Maschine läuft ja dort über den Browser normal weiter so als würde sie physisch vor dir stehen.
Das wäre ein Grund warum darüber noch alles funktioniert.
-
nun ja ich denke eher das hier die send befehle dein Problem sind.
Wenn dein PC in den stromsparmodus geht kannst du keine Send befehle benutzen du musst das anders lösen.
Denn auch wenn ich mich auf einen Rechner anwähle über Remote dann ist auf dem Monitor vom Zielpc zu sehen das sich der Benutzer abmeldet vom System, oder zu mindestens keine eingaben mehr zulässt.
der Desktop selber ist dann auch nicht mehr zu sehen nur noch der anmelde Bildschirm.Du solltest den Skript so aufbauen, das du theoretisch auf auf deinem normalen platz auch ohne Einschränkungen weiter arbeiten kannst auch wenn das Skript im Hintergrund läuft,
Wenn du eine Exceltabelle ausließt und diese dann verarbeitest muss du nicht unbedingt mit send arbeiten, das ist kompliziert und lässt den Nutzer selbst mehr Fehlerquellen offen.Ich weiß auch immer noch nicht was du mit diesem Script erreichen möchtest. macht bisher für mich 0 sinn.
-
-
ich habe nicht alles durchgelesen :I
aber habe etwas ähnliches gemacht,
GUI -> Felder die ausgefüllt werden müssen -> Inputfeld wird aktiv -> fürs scannen wird Inputfeld anvisiert -> Nun Scannt der Nutzer erst ... nachdem Inputfeld beschrieben ist mach das nächste feld frei und so weiter.
Wenn du das auch so ähnlich machen möchtest und den Inhalt dabei nicht sehen möchtest dann mach doch aus dem Inputfeld ein @ES_Password.
Um damit dann weiter zu arbeiten könntest du den Wert einfach auslesen und in einer Variable speichern, ohne ihn anschauen zu müssen.
@Edit.. du wolltest ja kein inputbox anzeigen lassen sry ...
-
bin nicht mehr auf der Arbeit konnte es deswegen nicht testen aber ist es so besser ?=)
C
Alles anzeigen;Erstellt mit ISN AutoIt Studio v. 1.14 ;***************************************** ;Make this script high DPI aware ;AutoIt3Wrapper directive for exe files, DllCall for au3/a3x files #AutoIt3Wrapper_Res_HiDpi=y If Not @Compiled Then DllCall("User32.dll", "bool", "SetProcessDPIAware") #include "UDFs\OutlookEX.au3" #include <ButtonConstants.au3> #include <EditConstants.au3> #include <GUIConstantsEx.au3> #include <StaticConstants.au3> #include <WindowsConstants.au3> #include <AutoItConstants.au3> #include <FileConstants.au3> #include <MsgBoxConstants.au3> HotKeySet("+!d", "_Exit") ; Shift-Alt-D to Exit the script #Region Globale Variabeln Global $oOL = '' ;leeres Objekt Global $hGUI, $idbtn_0, $idbtn_1, $sMailBox2Monitor, $sMailsentToAdress Global $datei = @ScriptDir & '\config\config.cfg' Global $configdir = @ScriptDir & '\config\' #EndRegion Globale Variabeln Opt("GUIOnEventMode", 1) ;Eventmode ON gui_() ;Starte GUI start_suche_config() ;Starte GUI While 1 Sleep(50) WEnd #Region funktion gui Func gui_() $hGUI = GUICreate("MailFromToOnlySubject", 410, 105, -1, -1, -1, -1) ;Programmfenster GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit") ;Beendet das Script $idbtn_0 = GUICtrlCreateButton("config", 312, 8, 83, 17) GUICtrlSetOnEvent(-1, "_FileOpenDialog") ;mit klick auf den Button 'config' läde den OpenFileDialog. $idbtn_1 = GUICtrlCreateButton("Start", 302, 73, 100, 25, -1, -1) GUICtrlSetOnEvent(-1, "Scann_NewMailEvent") ;mit klick auf den Button 'Start' startet das ScannEvent. $sMailBox2Monitor = GUICtrlCreateInput("", 12, 31, 390, 20, -1, $WS_EX_CLIENTEDGE) $sMailsentToAdress = GUICtrlCreateInput("", 12, 78, 283, 20, -1, $WS_EX_CLIENTEDGE) GUICtrlCreateLabel("weiterleiten an :", 20, 60, 275, 15, -1, -1) GUICtrlCreateLabel("Posteingang der Überwacht werden soll :", 12, 12, 226, 15, -1, -1) GUISetState(@SW_SHOW) EndFunc ;==>gui_ Func start_suche_config() Local $aConfig[2] If FileExists($datei) = 0 Then ;überprüft ob die Datei nicht vorhanden ist. DirCreate($configdir) ;erstellt nur den ordner config EndIf If FileExists($datei) = 1 Then ;überprüft ob die Datei vorhanden ist. _FileReadToArray($datei, $aConfig, 0) ;Wandelt die Datei in ein Array um If UBound($aConfig) < 2 Then ;überprüft ob die Config mindestens 2 einträge hat MsgBox($MB_IconError, 'Config ERROR', 'Bitte in die ' & @CRLF & '"' & $datei & '" bearbeiten' & @CRLF & @CRLF & 'ZEILE 1 :Box2Monitor' & @CRLF & 'ZEILE 2 :MailsentToAdress') ;hinweiß auf mind. 2 einträge ElseIf UBound($aConfig) = 2 Then ;überprüft ob die Config genau 2 einträge hat. GUICtrlSetData($sMailBox2Monitor, '') ;leere den hinhalt von $sMailBox2Monitor(input1) GUICtrlSetData($sMailsentToAdress, '') ;leere den hinhalt von $sMailsentToAdress(input2) GUICtrlSetData($sMailBox2Monitor, $aConfig[0]) ; wenn config gefunden dann beschreibe die $sMailBox2Monitor(input1) mit dem hinhalt des $aConfig[0] GUICtrlSetData($sMailsentToAdress, $aConfig[1]) ; wenn config gefunden dann beschreibe die $sMailsentToAdress(input2) mit dem hinhalt des $aConfig[1] Scann_NewMailEvent() ; Starte das Scann Event. Else _FileOpenDialog() ;öffnet das FileDialog um eine config.cfg auswählen zu können falls vorhanden. EndIf EndIf EndFunc ;==>start_suche_config Func _restart() ShellExecute(@ScriptName) Exit EndFunc ;==>_restart Func _Exit() _OL_Close($oOL) ;Outlook Objekt schließen If @error <> 0 Then MsgBox(16, "OutlookEX UDF: _OL_Close Script", "Error sending mail. @error = " & @error & ", @extended: " & @extended, 10) Exit ;Programm Exit EndFunc ;==>_Exit #EndRegion funktion gui #Region file funktionen Func _FileOpenDialog() Local $aConfig[2], $sFileDialog Local Const $sMessage = "wähle eine Config Datei aus." $sFileDialog = FileOpenDialog($sMessage, @ScriptDir & "\config\", "Config (*.cfg)", BitOR($FD_FILEMUSTEXIST, $FD_MULTISELECT)) If @error Then MsgBox($MB_SYSTEMMODAL, "", "Keine Config ausgewählt.") GUICtrlSetData($sMailBox2Monitor, 'Bitte überwachendes Verzeichnes von Outlook angeben!') ; wenn keine config ausgewählt wird beschreibe die $sMailBox2Monitor(input1) GUICtrlSetData($sMailsentToAdress, 'Bitte Emailadresse des Empfängers angeben!') ; wenn keine config ausgewählt wird beschreibe die $sMailsentToAdress(input2) FileChangeDir(@ScriptDir) Else FileChangeDir(@ScriptDir) _FileReadToArray($sFileDialog, $aConfig, 0) ;schreibt den Dateiinhalt in ein Array If UBound($aConfig) < 2 Then MsgBox($MB_IconError, 'Config ERROR', 'Bitte in die "' & $datei & '" in 2 Zeilen verfassen' & @CRLF & 'Box2Monitor' & @CRLF & @CRLF & 'MailsentToAdress') Else MsgBox(0, 0, UBound($aConfig)) GUICtrlSetData($sMailBox2Monitor, '') ;leere den hinhalt von $sMailBox2Monitor(input1) GUICtrlSetData($sMailsentToAdress, '') ;leere den hinhalt von $sMailsentToAdress(input2) GUICtrlSetData($sMailBox2Monitor, $aConfig[0]) ; wenn config gefunden dann beschreibe die $sMailBox2Monitor(input1) mit dem hinhalt des $aConfig[0] GUICtrlSetData($sMailsentToAdress, $aConfig[1]) ; wenn config gefunden dann beschreibe die $sMailsentToAdress(input2) mit dem hinhalt des $aConfig[1] Scann_NewMailEvent() ; Starte den Scann EndIf EndIf EndFunc ;==>_FileOpenDialog Func create_config() Local $sMailbox = GUICtrlRead($sMailBox2Monitor, 1) ;lese die $sMailBox2Monitor(inputbox 1) aus Local $sMailTo = GUICtrlRead($sMailsentToAdress, 1) ;lese die $sMailsentToAdress(input2) aus Local $hFile $hFile = FileOpen($datei, 2) If $hFile = -1 Then FileWrite($datei, $sMailbox & @CRLF & $sMailTo) ;schreibt eine nicht vorhande Datei neu mit den Daten von $sMailBox2Monitor(input1) $sMailsentToAdress(input2) ElseIf $hFile <> -1 Then FileWrite($hFile, $sMailbox & @CRLF & $sMailTo) ;überschreibt die Datei mit den Daten von $sMailBox2Monitor(input1) $sMailsentToAdress(input2) FileClose($hFile) ;schließt das Dateihandel EndIf EndFunc ;==>create_config #EndRegion file funktionen #Region OL_funktionen Func Scann_NewMailEvent() create_config() ; schreibt eine neue oder überschreibt die alte config datei. $oOL = _OL_Open() ; Öffne das Outlook Objekt If @error <> 0 Then MsgBox($MB_IconError, '', "Error when calling _OL_Open: @error=" & @error & ", @extended=" & @extended & @CRLF) Local $iStartExit = '' ;leeres int If GUICtrlRead($idbtn_1, 1) = 'Start' Then GUICtrlSetData($idbtn_1, 'Beenden') $iStartExit = 1 ; Scann wird gestartet ElseIf GUICtrlRead($idbtn_1, 1) = 'Script neustarten' Then $iStartExit = 0 ; legt die ivar auf 0 & setzt somit beim nächsten klick einen neustart. EndIf Local $sTitle = "OutlookEX" If $iStartExit = 1 Then GUICtrlSetData($idbtn_1, 'Script neustarten') ;setze Daten Butten 1 auf Beenden Local $sMailbox = GUICtrlRead($sMailBox2Monitor, 1) ;lese die $sMailBox2Monitor(inputbox 1) aus MsgBox($MB_IconInformation, $sTitle, "Hotkey zum Beenden des Scripts: 'Shift-Alt-D '!", 10) Local $aFolder = _OL_FolderAccess($oOL, $sMailbox, $olFolderInbox) ;Zugriff auf die Mailbox If @error <> 0 Then MsgBox($MB_IconError, $sTitle, "Error when calling _OL_FolderAccess: @error=" & @error & ", @extended=" & @extended & @CRLF, 10) If UBound($aFolder) > 0 Then ;pürft ob ein Array exsitiert. Local $oItems = $aFolder[1].Items ;Zugriff auf die Items If @error <> 0 Then MsgBox($MB_IconError, $sTitle, "Error when accessing the folder items: @error=" & @error & ", @extended=" & @extended & @CRLF, 10) Local $oTemp = ObjEvent($oItems, "oOL_") ;oOL_ItemAdd starten If @error <> 0 Then MsgBox($MB_IconError, $sTitle, "Error when calling ObjEvent: @error=" & @error & ", @extended=" & @extended & @CRLF, 10) ConsoleWrite("OutlookEX UDF Example Script - waiting for new items to arrive!" & @CRLF) ElseIf UBound($aFolder) = 0 Then ;pürft ob ein kein Array exsitiert MsgBox($MB_IconError, $sTitle, "Fehler Zugiff Items." & @CRLF & "Prüfe Sie die angeben vom Posteingang." & @CRLF, 10) ;fehler wenn Array bei 0 ist. EndIf EndIf If $iStartExit = 0 Then _restart() ;startet die das Script neu. EndIf EndFunc ;==>Scann_NewMailEvent Func oOL_ItemAdd($oItem) ConsoleWrite("OutlookEX UDF Example Script - new item has arrived!" & @CRLF) ConsoleWrite( _ "From: " & $oItem.SenderName & @CRLF & _ "Subject: " & $oItem.Subject & @CRLF & _ "Class: " & $oItem.Class & " (43=Mail, 53=MeetingRequest ...)" & @CRLF & _ "Date: " & $oItem.SentOn & @CRLF & _ "Mailadr: " & $oItem.SenderEmailAddress) ; Email Daten in der Console ausgeben If StringInStr($oItem.Subject, 'Unzustellbar') <> 0 Then ;Email mit Betreffzeile Unzustellbar überspringen. ConsoleWrite($oItem.Subject & ' wird übersprungen' & @CRLF) ElseIf StringInStr($oItem.Subject, 'Unzustellbar') = 0 Then ;Email mit nicht Betreffzeile Unzustellbar verschicken. _OL_Wrapper_SendMail($oOL, GUICtrlRead($sMailsentToAdress, 1), "", "", $oItem.Subject, "Der Text wurde aus Sicherheitsgründen entfernt.", '', $olFormatRichText, $olImportanceHigh) ;Email mit Betreffzeile verschicken. If @error <> 0 Then MsgBox(16, "OutlookEX UDF: _OutlookSendMail Wrapper Script", "Error sending mail. @error = " & @error & ", @extended: " & @extended, 10) EndIf EndFunc ;==>oOL_ItemAdd #EndRegion OL_funktionen -
So nun ist das Thema durch, erledigt.
Falls jemand das Endprodukt haben möchte :
In einer config.cfg kann man
Zeile 1 = 'Überwachter Posteingang'
Zeile 2 = 'Weiterleitung an'
Danach kann man das Programm in den Autostart nach Outlook öffnen lassen & die Aufgabe beginnt direkt.
C
Alles anzeigen;Erstellt mit ISN AutoIt Studio v. 1.14 ;***************************************** ;Make this script high DPI aware ;AutoIt3Wrapper directive for exe files, DllCall for au3/a3x files #AutoIt3Wrapper_Res_HiDpi=y If not @Compiled then DllCall("User32.dll", "bool", "SetProcessDPIAware") #include "UDFs\OutlookEX.au3" #include <ButtonConstants.au3> #include <EditConstants.au3> #include <GUIConstantsEx.au3> #include <StaticConstants.au3> #include <WindowsConstants.au3> #include <AutoItConstants.au3> #include <FileConstants.au3> #include <MsgBoxConstants.au3> HotKeySet("+!d", "_Exit") ; Shift-Alt-D to Exit the script Global $oOL = '' Opt("GUIOnEventMode", 1) ;Form - anfang $GUI = GUICreate("MailFromToOnlySubject", 410, 105, -1, -1, -1, -1) ;Programmfenster GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit") ;Form - ende ;Buttons - anfang $config_button_ = GUICtrlCreateButton("config", 312, 8, 83, 17) GUICtrlSetOnEvent(-1, "FileOpenDia") $Button_Start_ = GUICtrlCreateButton("Start", 302, 73, 100, 25, -1, -1) GUICtrlSetOnEvent(-1, "start_Outlook_scann_new_mails") ;Buttons - ende ;Inputfelder - anfang $input1 = GUICtrlCreateInput("", 12, 31, 390, 20, -1, $WS_EX_CLIENTEDGE) $input2 = GUICtrlCreateInput("", 12, 78, 283, 20, -1, $WS_EX_CLIENTEDGE) ;Inputfelder - ende ;Labels - anfang GUICtrlCreateLabel("weiterleiten an :", 20, 60, 275, 15, -1, -1) GUICtrlCreateLabel("Posteingang der Überwacht werden soll :", 12, 12, 226, 15, -1, -1) ;Labels - ende GUISetState(@SW_SHOW) start_suche_config() ;schleife - anfang While 1 Sleep(50) WEnd ;schleife - ende Func start_Outlook_scann_new_mails() $oOL = _OL_Open() If @error Then MsgBox($MB_IconError, '', "Error when calling _OL_Open: @error=" & @error & ", @extended=" & @extended & @CRLF) Local $Igo = '' If GUICtrlRead($Button_Start_, 1) = 'Start' Then GUICtrlSetData($Button_Start_, 'Beenden') $Igo = 1 ElseIf GUICtrlRead($Button_Start_, 1) = 'Beenden' Then GUICtrlSetData($Button_Start_, 'Start') $Igo = 0 EndIf Local $sTitle = "OutlookEX" If $Igo = 1 Then GUICtrlSetData($Button_Start_, 'Beenden') Local $sMailbox = GUICtrlRead($input1, 1) MsgBox($MB_IconInformation, $sTitle, "Hotkey zum Beenden des Scripts: 'Shift-Alt-D '!", 10) Local $aFolder = _OL_FolderAccess($oOL, $sMailbox, $olFolderInbox) If @error Then MsgBox($MB_IconError, $sTitle, "Error when calling _OL_FolderAccess: @error=" & @error & ", @extended=" & @extended & @CRLF, 10) Local $oItems = $aFolder[1].Items If @error Then MsgBox($MB_IconError, $sTitle, "Error when accessing the folder items: @error=" & @error & ", @extended=" & @extended & @CRLF, 10) Local $oTemp = ObjEvent($oItems, "oOL_") If @error Then MsgBox($MB_IconError, $sTitle, "Error when calling ObjEvent: @error=" & @error & ", @extended=" & @extended & @CRLF, 10) ConsoleWrite("OutlookEX UDF Example Script - waiting for new items to arrive!" & @CRLF) EndIf If $Igo = 0 Then _Exit() EndIf EndFunc ;==>start_Outlook_scann_new_mails Func send_outlookmail($OL, $ToUser, $betreff, $oItem) _OL_Wrapper_SendMail($OL, $ToUser, "", "", $betreff, "Der Text wurde aus Sicherheitsgründen entfernt.", '', $olFormatRichText, $olImportanceHigh) If @error <> 0 Then MsgBox(16, "OutlookEX UDF: _OutlookSendMail Wrapper Script", "Error sending mail. @error = " & @error & ", @extended: " & @extended, 10) EndFunc ;==>send_outlookmail Func oOL_ItemAdd($oItem) ConsoleWrite("OutlookEX UDF Example Script - new item has arrived!" & @CRLF) ConsoleWrite( _ "From: " & $oItem.SenderName & @CRLF & _ "Subject: " & $oItem.Subject & @CRLF & _ "Class: " & $oItem.Class & " (43=Mail, 53=MeetingRequest ...)" & @CRLF & _ "Date: " & $oItem.SentOn & @CRLF & _ "mailad: " & $oItem.SenderEmailAddress) If StringInStr($oItem.Subject, 'Unzustellbar') <> 0 Then ConsoleWrite($oItem.Subject & ' wird übersprungen' & @CRLF) ElseIf StringInStr($oItem.Subject, 'Unzustellbar') = 0 Then send_outlookmail($oOL, GUICtrlRead($input2, 1), $oItem.Subject, $oItem) EndIf EndFunc ;==>oOL_ItemAdd Func _Exit() _OL_Close($oOL) Exit EndFunc ;==>_Exit Func FileOpenDia() Local $filearray[2] Local Const $sMessage = "wähle eine Config Datei aus." $sFileDialog = FileOpenDialog($sMessage, @ScriptDir & "\config\", "Config (*.cfg)", BitOR($FD_FILEMUSTEXIST, $FD_MULTISELECT)) If @error Then ; Display the error message. MsgBox($MB_SYSTEMMODAL, "", "No file was selected.") FileChangeDir(@ScriptDir) Else FileChangeDir(@ScriptDir) _FileReadToArray($sFileDialog, $filearray, 0) GUICtrlSetData($input1, '') GUICtrlSetData($input2, '') GUICtrlSetData($input1, $filearray[0]) GUICtrlSetData($input2, $filearray[1]) start_Outlook_scann_new_mails() EndIf EndFunc ;==>FileOpenDia Func start_suche_config() Local $filearray[2] Local $datei = @ScriptDir & '\config\config.cfg' Local $dir = @ScriptDir & '\config\' IF FileExists($datei) = 0 Then DirCreate($dir) EndIf If FileExists($datei) = 1 Then _FileReadToArray($datei, $filearray, 0) GUICtrlSetData($input1, '') GUICtrlSetData($input2, '') GUICtrlSetData($input1, $filearray[0]) GUICtrlSetData($input2, $filearray[1]) start_Outlook_scann_new_mails() Else FileOpenDia() EndIf EndFunc ;==>start_suche_configDanke nochmal an alle & auch vorallem an Water :).
-
water :
Also ich habe nun die '_OL_Example_ItemAdd2_Event.au3' & '_OL_Wrapper_SendMail.au3'
Da es ja um ein anderes Postfach in Outlook gedacht ist.
Wenn ich die Beispiele zusammenschiebe 'augenscheinlich' genau wie in meinem Skript, dann funktioniert das ohne GUI aber mit GUI irgendwie nicht mehr.
müssen lediglich angepasst werden.
C
Alles anzeigen#include <OutlookEX.au3> #include <MsgBoxConstants.au3> ; ***************************************************************************** ; Example Script ; Handle Outlook ItemAdd event when a new mail item arrives in an Inbox. ; This example works for an Inbox of another user or a shared mailbox. ; This script loops until Shift-Alt-E is pressed to exit. ; ***************************************************************************** HotKeySet("+!e", "_Exit") ; Shift-Alt-E to Exit the script Global $sMailbox = "POSTFACH\Posteingang" ; <== replace with the mailbox you want to monitor Global $sCurrentUser = 'email@email.com' Global $sTitle = "OutlookEX UDF Example Script" MsgBox($MB_IconInformation, $sTitle, "Hotkey to exit the script: 'Shift-Alt-E'!", 10) ; Wait 10 seconds, then continue ; Start or connect to a running Outlook instance Global $oOL = _OL_Open() If @error Then Exit MsgBox($MB_IconError, $sTitle, "Error when calling _OL_Open: @error=" & @error & ", @extended=" & @extended & @CRLF) ; Access the Mailbox Global $aFolder = _OL_FolderAccess($oOL, $sMailbox, $olFolderInbox) If @error Then Exit MsgBox($MB_IconError, $sTitle, "Error when calling _OL_FolderAccess: @error=" & @error & ", @extended=" & @extended & @CRLF) ; Create a collection of the items in this mailbox Global $oItems = $aFolder[1].Items If @error Then Exit MsgBox($MB_IconError, $sTitle, "Error when accessing the folder items: @error=" & @error & ", @extended=" & @extended & @CRLF) ; Create the events for this collection. Outlook calls a function starting with "oOL_" for each event. For the ItemAdd event function oOL_ItemAdd will be called Global $oTemp = ObjEvent($oItems, "oOL_") If @error Then Exit MsgBox($MB_IconError, $sTitle, "Error when calling ObjEvent: @error=" & @error & ", @extended=" & @extended & @CRLF) ConsoleWrite("OutlookEX UDF Example Script - waiting for new items to arrive!" & @CRLF) While 1 Sleep(10) WEnd ; ItemAdd event - https://docs.microsoft.com/en-us/office/vba/api/outlook.items.itemadd Func oOL_ItemAdd($oItem) ConsoleWrite("OutlookEX UDF Example Script - new item has arrived!" & @CRLF) ConsoleWrite( _ "From: " & $oItem.SenderName & @CRLF & _ "Subject: " & $oItem.Subject & @CRLF & _ "Class: " & $oItem.Class & " (43=Mail, 53=MeetingRequest ...)" & @CRLF) _OL_Wrapper_SendMail($oOL, $sCurrentUser, "", "", $oItem.Subject , "Body<br><b>test</b> normal.", '', $olFormatHTML, $olImportanceHigh) EndFunc ;==>oOL_ItemAdd Func _Exit() _OL_Close($oOL) Exit EndFunc ;==>_ExitEDIT : water :
Ich muss zurückrudern, es war doch eine dumme Kleinigkeit. Die einzige Änderung die ich machen musste war statt Local / Global $oOL = _OL_Open
Nun funktioniert es. Muss noch bei Stopp irgentwie richtig programmieren.
C
Alles anzeigen#include "UDFs\OutlookEX.au3" #include <ButtonConstants.au3> #include <EditConstants.au3> #include <GUIConstantsEx.au3> #include <StaticConstants.au3> #include <WindowsConstants.au3> #include <AutoItConstants.au3> #include <FileConstants.au3> #include <MsgBoxConstants.au3> HotKeySet("+!d", "_Exit") ; Shift-Alt-D to Exit the script Global $oOL ='' Opt("GUIOnEventMode", 1) $Form1 = GUICreate("MailFromToOnlySubject", 410, 105, -1, -1, -1, -1) ;Programmfenster GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit") $Button_Start_ = GUICtrlCreateButton("Start", 302, 73, 100, 25, -1, -1) GUICtrlSetOnEvent(-1, "ClientStart") $input1 = GUICtrlCreateInput("", 12, 31, 390, 20, -1, $WS_EX_CLIENTEDGE) $input2 = GUICtrlCreateInput("", 12, 78, 283, 20, -1, $WS_EX_CLIENTEDGE) GUICtrlCreateLabel("weiterleiten an :", 20, 60, 275, 15, -1, -1) GUICtrlCreateLabel("Posteingang der Überwacht werden soll :", 12, 12, 226, 15, -1, -1) GUISetState(@SW_SHOW) ;~ $oOL=ClientStart() ;~ Global $oOL = _OL_Open() If @error Then MsgBox($MB_IconError, '', "Error when calling _OL_Open: @error=" & @error & ", @extended=" & @extended & @CRLF) While 1 Sleep(50) WEnd Func ClientStart() $oOL = _OL_Open() Local $Igo = '' If GUICtrlRead($Button_Start_, 1) = 'Start' Then GUICtrlSetData($Button_Start_, 'Stopp') $Igo = 1 ElseIf GUICtrlRead($Button_Start_, 1) = 'Stopp' Then GUICtrlSetData($Button_Start_, 'Start') $Igo = 0 EndIf Local $sTitle = "OutlookEX" If $Igo = 1 Then GUICtrlSetData($Button_Start_, 'Stopp') Local $sMailbox = GUICtrlRead($input1, 1) MsgBox($MB_IconInformation, $sTitle, "Hotkey zum Beenden des Scripts: 'Shift-Alt-D '!", 10) Local $aFolder = _OL_FolderAccess($oOL, $sMailbox, $olFolderInbox) If @error Then MsgBox($MB_IconError, $sTitle, "Error when calling _OL_FolderAccess: @error=" & @error & ", @extended=" & @extended & @CRLF, 10) ;~ _ArrayDisplay($aFolder) Local $oItems = $aFolder[1].Items If @error Then MsgBox($MB_IconError, $sTitle, "Error when accessing the folder items: @error=" & @error & ", @extended=" & @extended & @CRLF, 10) Local $oTemp = ObjEvent($oItems, "oOL_") If @error Then MsgBox($MB_IconError, $sTitle, "Error when calling ObjEvent: @error=" & @error & ", @extended=" & @extended & @CRLF, 10) ConsoleWrite("OutlookEX UDF Example Script - waiting for new items to arrive!" & @CRLF) EndIf If $Igo = 0 Then _OL_Close($oOL, False) EndIf Return $oOL EndFunc ;==>ClientStart Func send_outlookmail($OL, $ToUser, $betreff, $oItem) _OL_Wrapper_SendMail($OL, $ToUser, "", "", $betreff, "Der Text wurde aus Sicherheitsgründen entfernt.", '', $olFormatRichText, $olImportanceHigh) If @error <> 0 Then MsgBox(16, "OutlookEX UDF: _OutlookSendMail Wrapper Script", "Error sending mail. @error = " & @error & ", @extended: " & @extended, 10) EndFunc ;==>send_outlookmail Func oOL_ItemAdd($oItem) ConsoleWrite("OutlookEX UDF Example Script - new item has arrived!" & @CRLF) ConsoleWrite( _ "From: " & $oItem.SenderName & @CRLF & _ "Subject: " & $oItem.Subject & @CRLF & _ "Class: " & $oItem.Class & " (43=Mail, 53=MeetingRequest ...)" & @CRLF) MsgBox(0, GUICtrlRead($input2, 1), $oItem.Subject);Nur als test send_outlookmail($oOL, GUICtrlRead($input2, 1), $oItem.Subject, $oItem) EndFunc ;==>oOL_ItemAdd Func _Exit() Exit EndFunc ;==>_Exit -
fehlt die Schleife, damit das Programm nicht sofort beendet
Es beendet sich doch gar nicht sofort.
zeile 68 - 70 While
Habe eher ClientStart den Return Wert beim Starten ausgeben lassen damit dieser in der anderen Funktion direkt gefunden wird und nicht abricht da $var ist sonst nicht deklariert.
Dachte ich muss es mit Opt("GUIOnEventMode", 1) machen.
Die Msgbox zeigt er auch in der Func oOL_ItemAdd($oItem) richtig an. wenn eine Mail eingeht.
Warum sendet er dann die Mail nicht los. Oder muss ich dafür ein eigenes _OL_Open auf machen?
Änderung :
CodeGlobal $oOL ='' $Button_Start_ = GUICtrlCreateButton("Start", 302, 73, 100, 25, -1, -1) ;~ $oOL=ClientStart() While 1 Sleep(50) WEndLeider das selbe Ergebnis
C
Alles anzeigen#include "UDFs\OutlookEX.au3" #include <ButtonConstants.au3> #include <EditConstants.au3> #include <GUIConstantsEx.au3> #include <StaticConstants.au3> #include <WindowsConstants.au3> #include <AutoItConstants.au3> #include <FileConstants.au3> #include <MsgBoxConstants.au3> HotKeySet("+!d", "_Exit") ; Shift-Alt-D to Exit the script Global $oOL ='' Opt("GUIOnEventMode", 1) $Form1 = GUICreate("MailFromToOnlySubject", 410, 105, -1, -1, -1, -1) ;Programmfenster GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit") $Button_Start_ = GUICtrlCreateButton("Start", 302, 73, 100, 25, -1, -1) GUICtrlSetOnEvent(-1, "ClientStart") $input1 = GUICtrlCreateInput("", 12, 31, 390, 20, -1, $WS_EX_CLIENTEDGE) $input2 = GUICtrlCreateInput("", 12, 78, 283, 20, -1, $WS_EX_CLIENTEDGE) GUICtrlCreateLabel("weiterleiten an :", 20, 60, 275, 15, -1, -1) GUICtrlCreateLabel("Posteingang der Überwacht werden soll :", 12, 12, 226, 15, -1, -1) GUISetState(@SW_SHOW) ;~ $oOL=ClientStart() While 1 Sleep(50) WEnd Func ClientStart() Local $Igo = '' If GUICtrlRead($Button_Start_, 1) = 'Start' Then GUICtrlSetData($Button_Start_, 'Stopp') $Igo = 1 ElseIf GUICtrlRead($Button_Start_, 1) = 'Stopp' Then GUICtrlSetData($Button_Start_, 'Start') $Igo = 0 EndIf Local $sTitle = "OutlookEX" Local $oOL = _OL_Open() If @error Then MsgBox($MB_IconError, $sTitle, "Error when calling _OL_Open: @error=" & @error & ", @extended=" & @extended & @CRLF) If $Igo = 1 Then GUICtrlSetData($Button_Start_, 'Stopp') Local $sMailbox = GUICtrlRead($input1, 1) MsgBox($MB_IconInformation, $sTitle, "Hotkey zum Beenden des Scripts: 'Shift-Alt-D '!", 10) Local $aFolder = _OL_FolderAccess($oOL, $sMailbox, $olFolderInbox) If @error Then MsgBox($MB_IconError, $sTitle, "Error when calling _OL_FolderAccess: @error=" & @error & ", @extended=" & @extended & @CRLF, 10) ;~ _ArrayDisplay($aFolder) Local $oItems = $aFolder[1].Items If @error Then MsgBox($MB_IconError, $sTitle, "Error when accessing the folder items: @error=" & @error & ", @extended=" & @extended & @CRLF, 10) Local $oTemp = ObjEvent($oItems, "oOL_") If @error Then MsgBox($MB_IconError, $sTitle, "Error when calling ObjEvent: @error=" & @error & ", @extended=" & @extended & @CRLF, 10) ConsoleWrite("OutlookEX UDF Example Script - waiting for new items to arrive!" & @CRLF) EndIf If $Igo = 0 Then _OL_Close($oOL, False) EndIf Return $oOL EndFunc ;==>ClientStart Func send_outlookmail($OL, $ToUser, $betreff, $oItem) _OL_Wrapper_SendMail($OL, $ToUser, "", "", $betreff, "Der Text wurde aus Sicherheitsgründen entfernt.", '', $olFormatRichText, $olImportanceHigh) If @error <> 0 Then MsgBox(16, "OutlookEX UDF: _OutlookSendMail Wrapper Script", "Error sending mail. @error = " & @error & ", @extended: " & @extended, 10) EndFunc ;==>send_outlookmail Func oOL_ItemAdd($oItem) ConsoleWrite("OutlookEX UDF Example Script - new item has arrived!" & @CRLF) ConsoleWrite( _ "From: " & $oItem.SenderName & @CRLF & _ "Subject: " & $oItem.Subject & @CRLF & _ "Class: " & $oItem.Class & " (43=Mail, 53=MeetingRequest ...)" & @CRLF) MsgBox(0, GUICtrlRead($input2, 1), $oItem.Subject);Nur als test send_outlookmail($oOL, GUICtrlRead($input2, 1), $oItem.Subject, $oItem) EndFunc ;==>oOL_ItemAdd Func _Exit() Exit EndFunc ;==>_Exit -
water Danke für die Einweisungen.
So musste nun einige Tage hier für Kollegen einspringen deshalb hatte ich leider keine Zeit mich weiter damit intensiver zu beschäftigen.
Habe schon 1x exe kompiliert letzte Woche, die Funktioniert aber hat noch Fehler drinnen.
Leider habe ich den Code versehentlich über speichert.
nun wollte ich das ganze verbessern aber aus irgendeinem Grund schickt er nun die mail nicht los. error = 1003
Woran liegt das oO.?

Hier mal der neue Code :
C
Alles anzeigen#include "UDFs\OutlookEX.au3" #include <ButtonConstants.au3> #include <EditConstants.au3> #include <GUIConstantsEx.au3> #include <StaticConstants.au3> #include <WindowsConstants.au3> #include <AutoItConstants.au3> #include <FileConstants.au3> #include <MsgBoxConstants.au3> HotKeySet("+!d", "_Exit") ; Shift-Alt-D to Exit the script Opt("GUIOnEventMode", 1) $Form1 = GUICreate("MailFromToOnlySubject", 410, 105, -1, -1, -1, -1) GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit") $Button_Start_ = GUICtrlCreateButton("Stopp", 302, 73, 100, 25, -1, -1) GUICtrlSetOnEvent(-1, "ClientStart") $input1 = GUICtrlCreateInput("", 12, 31, 390, 20, -1, $WS_EX_CLIENTEDGE) $input2 = GUICtrlCreateInput("", 12, 78, 283, 20, -1, $WS_EX_CLIENTEDGE) GUICtrlCreateLabel("weiterleiten an :", 20, 60, 275, 15, -1, -1) GUICtrlCreateLabel("Posteingang der Überwacht werden soll :", 12, 12, 226, 15, -1, -1) GUISetState(@SW_SHOW) $oOL=ClientStart() Func ClientStart() Local $Igo = '' If GUICtrlRead($Button_Start_, 1) = 'Start' Then GUICtrlSetData($Button_Start_, 'Stopp') $Igo = 1 ElseIf GUICtrlRead($Button_Start_, 1) = 'Stopp' Then GUICtrlSetData($Button_Start_, 'Start') $Igo = 0 EndIf Local $sTitle = "OutlookEX" Local $oOL = _OL_Open() If @error Then MsgBox($MB_IconError, $sTitle, "Error when calling _OL_Open: @error=" & @error & ", @extended=" & @extended & @CRLF) If $Igo = 1 Then GUICtrlSetData($Button_Start_, 'Stopp') Local $sMailbox = GUICtrlRead($input1, 1) MsgBox($MB_IconInformation, $sTitle, "Hotkey zum Beenden des Scripts: 'Shift-Alt-D '!", 10) Local $aFolder = _OL_FolderAccess($oOL, $sMailbox, $olFolderInbox) If @error Then MsgBox($MB_IconError, $sTitle, "Error when calling _OL_FolderAccess: @error=" & @error & ", @extended=" & @extended & @CRLF, 10) ;~ _ArrayDisplay($aFolder) Local $oItems = $aFolder[1].Items If @error Then MsgBox($MB_IconError, $sTitle, "Error when accessing the folder items: @error=" & @error & ", @extended=" & @extended & @CRLF, 10) Local $oTemp = ObjEvent($oItems, "oOL_") If @error Then MsgBox($MB_IconError, $sTitle, "Error when calling ObjEvent: @error=" & @error & ", @extended=" & @extended & @CRLF, 10) ConsoleWrite("OutlookEX UDF Example Script - waiting for new items to arrive!" & @CRLF) EndIf If $Igo = 0 Then _OL_Close($oOL, False) EndIf Return $oOL EndFunc ;==>ClientStart Func send_outlookmail($OL, $ToUser, $betreff, $oItem) _OL_Wrapper_SendMail($OL, $ToUser, "", "", $betreff, "Der Text wurde aus Sicherheitsgründen entfernt.", '', $olFormatRichText, $olImportanceHigh) If @error <> 0 Then MsgBox(16, "OutlookEX UDF: _OutlookSendMail Wrapper Script", "Error sending mail. @error = " & @error & ", @extended: " & @extended, 10) EndFunc ;==>send_outlookmail While 1 Sleep(50) WEnd Func oOL_ItemAdd($oItem) ConsoleWrite("OutlookEX UDF Example Script - new item has arrived!" & @CRLF) ConsoleWrite( _ "From: " & $oItem.SenderName & @CRLF & _ "Subject: " & $oItem.Subject & @CRLF & _ "Class: " & $oItem.Class & " (43=Mail, 53=MeetingRequest ...)" & @CRLF) MsgBox(0, GUICtrlRead($input2, 1), $oItem.Subject);Nur als test send_outlookmail($oOL, GUICtrlRead($input2, 1), $oItem.Subject, $oItem) EndFunc ;==>oOL_ItemAdd Func _Exit() Exit EndFunc ;==>_Exit -
Superrrrrr
water : Danke für die Tipps es hat funktioniert.Ich hab zwar persönlich immer noch nicht richtig verstanden wie das funktioniert bsp:
$oItem.SenderName ->"Wo steht das '.SenderName'" <- woher wissen wir das man dies eingeben werden muss ?
Das habe ich generell bei Objekten so, woher weiß man sowas bzw. wo bekommt man solche Informationen genau her?
Werde morgen mal den kompletten Code posten, es gibt vielleicht noch Fehler zu entdecken, bin grad nicht mehr auf der Arbeit deshalb erst wieder morgen

-
guten morgen Water,
Ja du hast recht, habe ich geändert in der func fehler_,
Das sieht stark aus: _OL_Example_NewMailEX_Event.au3
wenn du mir nun noch verrätst wie ich die Posteingänge von dem dem anderem Exchange Konto die Benachrichtigung empfange, bei den anderen Posteingängen bekomme ich auch keine Windows Benachrichtigung angezeigt.
Habe nun gestern ein fertiges Skript erstellt , aber Voraussetzung dazu ist die Mails erst in einen bestimmten Ordner kopieren zu lassen durch eine Regel und dann diesen Ordner zu überwachen mail nur mit betreff verschicken und im anschluss löschen.
Nachteil dabei dies kann ich auch nur auf dem Hauptkonto ausführen lassen da ich für die anderen Posteingänge keine Regeln erstellen kann.
Mit dieser Methode _OL_Example_NewMailEX_Event.au3 wäre es viel einfacher wenn ich jetzt noch die anderen Posteingänge auswählen könnte.

-
-
Ich habe zum testen nun erstmal eine Regel in Outlook verfasst die besagt das alle neuen Emails automatisch in einen weiteren Ordner kopiert werden.
Nun wird in dem erstellten Ordner die Betreffzeilen ausgelesen, und dann die Betreffzeile weiter geschickt.
Nachdem Versenden möchte ich nun wieder die kopierten Emails Löschen lassen, das habe ich bisher noch nicht rausgefunden wie das funktioniert.Hier ist mal mein bisheriger Code :
C
Alles anzeigen#include "UDFs\OutlookEX.au3" #include "functions\functions.au3" #include <array.au3> test() func test() Local $Postfach = '' Local $dir = '' Local $Postfachto = '' $oOutlook = _OL_Open() Local $array= AccessFolder_OL($oOutlook, $Postfach, $dir) Local $string = '' For $i = 1 To UBound($array) -1 step 1 $string = $array[$i][0] ConsoleWrite($string & @CRLF) send_outlookmail($oOutlook, $Postfachto, $string) Next EndFuncCode
Alles anzeigen;functions.au3 Func AccessFolder_OL($OL, $UserRoot, $vDir) Local $aItems[0] If IsObj($OL) <> 1 Then fehler_('Fehler, Outlook wurde nicht als Objekt gefunden. Funktion : AccessFolder_OL') Else _OL_FolderAccess($OL, $UserRoot) IF @Error Then fehler_('Fehler, Funktion : _OL_ItemFind') $aItems = _OL_ItemFind($OL, $UserRoot & '\' & $vDir, $olMail, "", "", "", "Subject", "", 1) IF @Error Then fehler_('Fehler, Funktion : _OL_ItemFind') EndIf Return $aItems EndFunc ;==>AccessFolder_OL Func send_outlookmail($OL, $ToUser, $betreff) If IsObj($OL) <> 1 Then fehler_('Fehler, Outlook wurde nicht als Objekt gefunden. Funktion : send_outlookmail') Else _OL_Wrapper_SendMail($OL, $ToUser, "", "", $betreff, "Der Text wurde aus Sicherheitsgründen entfernt.", '', $olFormatRichText, $olImportanceHigh) If @error <> 0 Then fehler_('Fehler, Outlook konnte die Email mit dem Betreff : ' & $betreff & ' nicht an ' & $ToUser & ' senden. Funktion : send_outlookmail') EndIf EndFunc ;==>send_outlookmail Func fehler_($fehler) Local $File = 'error.txt' Local $timedate = @HOUR & ':' & @MIN & ':' & @SEC & ' - ' & @MDAY & '.' & @MON & '.' & @YEAR $oF = FileOpen($File, 1) If $oF = -1 Then FileWrite($File, '') Else FileWrite($oF, $timedate & '|' & $fehler & '|' & @CRLF) ConsoleWrite($timedate & '|' & $fehler & '|' & @CRLF) EndIf EndFunc ;==>fehler_Zu deiner Frage zurückzukommen, trifft Punkt 1 so ziemlich zu, bloß das die Mails dann aber im Posteingang unberührt bleiben müssen.
-
gmmg danke, aber das muss ich ausschließen weil es für unternehmen nicht Freeware ist.
Die summe ich keine große, aber schauen wir mal ob wir das so hinbekommen.
Ja Ich hab mir schon sowas gedacht das es über ActiveSync läuft wollte mich aber nicht blamieren
Weils nur eine Vermutung war und ich davor noch nicht viel davon gehört hatte.Müssten das dann aber dennoch nicht lösbar mit der Winhttp UDF sein oder? kann das kein https? Danke für die Erläuterung.
water ich denke ich nehme deinen Lösung Vorschlag, habe mir auch schon die UDF angeschaut und etwas rumprobiert mit den Examples die dabei sind.
Habe aber ehrlich gesagt noch nicht so ganz durchgeblickt. Werde es mir heute weiter anschauen und rumprobieren wenn ich gar nicht weiter komme melde ich mich hier noch vielleicht heute oder erst nach dem Wochenende.
Deine UDF hat es verdient benutzt zu werden da steckt ne menge Arbeit drin so wie das aussieht top
. -
danke für deine ausführliche Antwort.
Ich habe bereits ein paar udfs getestet nachdem Googlen vom funkey seinem Vorschlag.
Leider hat es nicht auf anhieb geklappt auch nicht mit privaten Mail Adressen, deshalb denke ich das dies etwas längere zeit in Anspruch nehmen wird.
Vielleicht finden wir intern noch eine einfache Lösung falls nicht komm ich noch mal auf Water zurück.

-
das habe ich nicht gesagt!

ich sagte Emails empfangen ohne Outlook! nur per Skript, ich mein man kann ja auch Emails versenden ohne Outlook warum sollte das nicht auch per Skript gehen um welche zu empfangen.
-
keine Ahnung.. es war ein langer heißer tag xD sry ich weiß nicht warum ich das so geschrieben habe...
ich meinte natürlich abgetrennt von Outlook ohne das Outlook im Hintergrund offen sein muss....