1. Dashboard
  2. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team
    4. Mitgliedersuche
  3. Forenregeln
  4. Forum
    1. Unerledigte Themen
  • Anmelden
  • Registrieren
  • Suche
Alles
  • Alles
  • Artikel
  • Seiten
  • Forum
  • Erweiterte Suche
  1. AutoIt.de - Das deutschsprachige Forum.
  2. Mitglieder
  3. MojoeB

Beiträge von MojoeB

  • Braucht es das?

    • MojoeB
    • 18. September 2023 um 11:22

    wenn du viele Funktionen hast die die selbe variable verwenden sollen aber du diese nicht in jeder Funktion extra setzten möchtest bzw. Return weil manchmal benötigt man das ja auch für True oder False , dann kannst du auch immer deine Methoden aufbauen mit byref

    dadurch wird die gewünschte eingesetzte Variable mit der Methode verarbeitet und im ganzen Skript geändert.

    hier mal ein kleines beispiel :

    AutoIt: bsp.
    Global $testwert = ''
    SetInitialValue($testwert)
    
    MsgBox(0, '', $testwert)
    
    AddToValue($testwert, 5)
    AddToValue($testwert, 5)
    AddToValue($testwert, 5)
    
    MsgBox(0, '', $testwert)
    
    Func SetInitialValue(ByRef $var)
        $var = 1
    EndFunc
    
    Func AddToValue(ByRef $var, $amount)
        $var += $amount
    EndFunc
    Alles anzeigen
  • Win10

    • MojoeB
    • 17. September 2023 um 13:13

    ich habe mal vor langer zeit eine vhd Image erstellt und Windows(7 glaub ich war es.) darauf installiert diese konnte ich auch per bei Rechner An Knopf starten.


    Vorteil wäre halt du hättest immer nur 1 Datei die gebackup´t werden müsste, geht evtl. schneller als 10000000000x einzelne Dateien, wobei ich keine Erfahrungswerte beim spiegeln habe^^.

    Das ist nur solange her, das es eine lüge wäre wenn ich noch genau wüsste wie ich das gemacht habe. Ich weiß nur noch das ich anfangs ins Installation Image noch usb 3.0 treiber mit intrigieren musste weil sonst lief keine Maus und usb Tastatur.

    und theoretisch kann man dann diese Datei auch auf anderen Systemen intrigieren ausführen / lesen /schreiben etc.


    (ich glaube das Format war vhd, kann mich auch irren, wenn ihr mehr in der Materie seid könnt ich mich gerne berichtigen. )


    Edit: mir ist grad eingefallen das war Windows 8 womit ich die Img Datei erstellt habe, sollte aber mit jeder anderen Version von Windows die jünger ist als 8 funktionieren.

    meine Erinnerung kommt etwas zurück so war es :

    Ja also als Haupt System war dann Windows 8

    Mit befehlen konnte ich das img (glaube immer noch vhd) erstellen und mit weiteren befehlen dem Rechner klar machen das er nicht win8 starten soll sondern die vhd.

    Weitere Vorteile die mir grad einfallen wäre: du hast das dein Hauptsystem das abgekoppelt von deinem Produktivstem, dadurch das du einfach die vhd mit einem älteren backup austauschen könntest und schwubs wird wieder alles genau so funktionieren wie zuvor.

  • Gibt es das? *.au3 vs. *.exe

    • MojoeB
    • 15. September 2023 um 11:28

    also ich nutze gerne isn studio zum kompilieren, da er mir sagt es sei noch etwas falsch, möchten Sie weiter kompilieren oder abbrechen.

    Wenn ich auf abbrechen drücke, dann wird mir unten in der Konsole genau angezeigt welche Zeilen er meint.

    Obwohl er beim testen nicht rummeckert hat.

    Dann versuche ich diese zu korrigieren solange bis es mit 0 Beanstandungen ist und die Kompilierung ohne Probleme durchgeführt werden kann.

    Und danach hatte ich dann nur 1 Absturz weil einmal der RAM vollgelaufen ist. Aber mit Fehlermeldung^^.
    Daran war aber der Virenscanner schuld.

    anfangs habe ich es immer mit scite gemacht, keine Fehler gefunden aber dann ab und unerklärliche abstürze mit der *exe.

  • Dialog-Elemente an Bildschirmzoom anpassen

    • MojoeB
    • 7. September 2023 um 23:10

    Kanashius :) find ich nice

  • Dialog-Elemente an Bildschirmzoom anpassen

    • MojoeB
    • 7. September 2023 um 18:39

    ich habe grad nochmal rumgetestet mit einer anderen gui und mehr Steuer Elementen und ich muss dir sagen X( das zerbricht mir echt den Kopf ^^

    als Beispiel war das irgendwie einfacher ^^.

    was du natürlich auch tun könntest deine gui in eine Methode (func) schreiben.

    Und bei Start je nach Auflösung die grad gesetzt ist das mit verschieden if-abzweigungen in der Methode starten lassen um auf die richtigen Koordinaten-Werte zu kommen, die du dann natürlich zuvor in der Methode gesetzt hast.

    Das ist mehr schreib Arbeit ist dann aber auch zuverlässig, da du die werte ja selbst gesetzt hast.

  • Dialog-Elemente an Bildschirmzoom anpassen

    • MojoeB
    • 6. September 2023 um 21:13

    hmm gerade mal rumprobiert, starte das Skript dann beende es ändere die Auflösung und sehe was passiert.
    Ich habe eigentlich immer Statische Fenster, deswegen weiß ich nicht wie man wärend das Programm läuft die Größen ändert.

    in diesem Beispiel werden die Größen von Control und Treeview proportional zur GUI-Größe festgelegt. Die Berechnungen basieren auf dem verhältnis von 70% für das Control und 20% für den Treeview, sowohl in der Breite als auch in der Höhe.


    AutoIt
    #include <GUIConstantsEx.au3>
    #include <GuiTreeView.au3>
    #include <TreeViewConstants.au3>
    
    Opt("GUIOnEventMode", 1)
    
    Global $oIE
    
    ; GUI erstellen
    Global $hMainGui = GUICreate('Konzernregelwerke', @DesktopWidth - 220, @DesktopHeight - 80, -1, -1)
    GUISetOnEvent($GUI_EVENT_CLOSE, "OnExit")
    
    ; Größenberechnung basierend auf Bildschirmauflösung und GUI-Größe
    $GUIWidth = @DesktopWidth - 220
    $GUIHeight = @DesktopHeight - 80
    
    ; Proportionale Größe für WebBrowser-Control und Treeview festlegen
    $WebBrowserWidth = $GUIWidth * 0.7
    $WebBrowserHeight = $GUIHeight * 0.8
    
    $TreeviewWidth = $GUIWidth * 0.2
    $TreeviewHeight = $GUIHeight * 0.8
    
    ; Steuerelemente erstellen
    $GUIActiveX = GUICtrlCreateObj($oIE, 10, 10, $WebBrowserWidth, $WebBrowserHeight) ; WebBrowser-Control
    Global $idTreeview = GUICtrlCreateTreeView(10 + $WebBrowserWidth, 10, $TreeviewWidth, $TreeviewHeight, $GUI_SS_DEFAULT_TREEVIEW) ; Treeview
    
    ; Einige Beispielknoten hinzufügen
    Global $idRoot = GUICtrlCreateTreeViewItem("Root", $idTreeview)
    Global $idChild1 = GUICtrlCreateTreeViewItem("Child 1", $idRoot)
    Global $idChild2 = GUICtrlCreateTreeViewItem("Child 2", $idRoot)
    
    GUISetState(@SW_SHOW)
    
    While 1
        Sleep(100)
    Wend
    
    Func OnExit()
        Exit
    EndFunc
    Alles anzeigen
  • Datei-Anzeige

    • MojoeB
    • 26. August 2023 um 10:42

    blöde frage am Rande $sSourceFolder <- ist das der richtige Pfad und auch kein '\' vergessen?

  • Outlook

    • MojoeB
    • 23. August 2023 um 13:00

    so bin immer noch am testen, ich habe nun die start_objekt()wie folgt geändert, glaube aber das wird meine endgültige Funktion dafür sein. :

    AutoIt
    Global $pid
    _PID_ID($pid, 'Outlook.exe')
    
    ;...
    
    
    While 1
    ;...
    Wend
    
    func start_objekt()
    
    Local $l_pid
    
      If Not _PID_ID($l_pid, 'Outlook.exe') Then
            Local $pid = ShellExecute("outlook.exe", '', '', '', @SW_MINIMIZE)
            Sleep(3000)
            $pid = $l_pid
            $oOutlook = ''
            $oOutlook = _OL_Open(False)
            
        Else 
        
            If $l_pid = $pid Then
                IF not IsObj($oOutlook) Then
                $oOutlook = _OL_Open(False)
                    EndIf  
            ElseIf    $l_pid <> $pid Then
                _OL_Close($oOutlook)
                $oOutlook = _OL_Open(False)            
            EndIf        
    EndIf 
        
    IF IsObj($oOutlook) Then
       ;Starte das Event das ankommende Emails abfängt.
    EndIf
    
        _OL_ErrorNotify(3, @ScriptDir& '\neuerr.txt')
    
    EndFunc   ;==>start_objekt
    
    func _PID_ID(ByRef $appPID, $appName = Default)
        Local $processList, $ok = False
        If $appName = Default Then $appName = 'OUTLOOK.exe'
    
        $processList = ProcessList()
        For $i = 1 To $processList[0][0]
            if $ok = True Then ExitLoop
            If StringInStr($processList[$i][0], $appName) Then
                $appPID = $processList[$i][1]
                $ok = True
            EndIf
        Next    
        Return $ok
    EndFunc   ;==>PID_exe
    Alles anzeigen

    EDIT:

    nun nach mehrmaligem testen dieser Funktion funktioniert es nun auch mit den unterschiedlichen Versionen von Outlook. :)

    water Beitrag #14 & #17 haben mir dabei sehr geholfen, dabei zu verstehen wie ich in meinem fall am _ol_open und _ol_close am besten einsetze.

  • Outlook

    • MojoeB
    • 22. August 2023 um 15:59

    ich kanns mir nicht erklären, habe gestern aber komische Erkenntnisse gesammelt. Denke aber es kann sein das die Funktionen etwas von Office Outlook Version unterscheiden.

    -> auf der Arbeit Office 2016

    -> zu hause Office 2021& Microsoft Outlook Version 1.2023.807.100 (Production) (testversion)

    ( die folgenden dinge sind | bei dem Event neue Mail empfangen. )

    Wenn ich zum Beispiel bei Office 2016 :

    Eventstart -> While + neuemail = 1 x Ergebnis.

    Eventstart -> While+ neuemail = 1 -> erneut starten nach Bedingung : Eventstart -> = 1 x Ergebnis

    mach ich das gleiche mit den selben Funktionen nur mit Office 2021 :

    Funktion -> Eventstart -> While+ neuemail = 1 x Ergebnis. (wie es sein soll, sowie bei 2016)

    Funktion -> Eventstart -> While+ neuemail = 1 -> erneut starten nach Bedingung : Eventstart -> 1 x Ergebnis +1 x Ergebnis (obwohl mit gleichen Parametern gestartet, wird das Event auch 2mal erkannt.)

    mach ich das gleich mit Microsoft Outlook Version 1.2023.807.100 (testversion):

    Funktion -> Eventstart -> While = ab und an mal funktioniert es beim ersten start manchmal bleibt das Resultat aber einfach immer 0.

    Das sieht für mich so aus als würde Outlook 2016 immer nur 1 gesetztes Event verwenden, wohingegen 2021 augenscheinlich mehrere gleiche Events mit Hilfe von autoit befehlen setzen, lesen &zuordnen kann?

    ~_~ das verwirrt mich so naja Hauptsache es funktioniert,

    Moombas

    Ich hoffe nicht das es Auswirkungen haben wird,
    Wenn ihr möchtet, kann ich euch das gesamte Skript zeigen sobald ich fertig bin.
    muss noch die GUI dazu einbinden und noch ein paar kleine Änderungen vornehmen.

    wird aber vielleicht erst nächste Woche fertig sein.


    water

    wäre es dann deiner Meinung nach besser so wie moombas schon gesagt hat,

    erst die pid ermitteln,

    Wenn Outlook nicht existiert dann starte es per run Befehl ?

    & falls es existiert dann starte nur _ol_open ?

  • Outlook

    • MojoeB
    • 21. August 2023 um 15:51

    hast du das mal getestet?

    Im Grunde hast du recht, aber mit _OL_Close und danach _OL_Open startet bei mir Outlook komplett neu, also auch mit Initialisierung Fentser/Vorschau etc.

    Bei meiner variante wird Outlook zwar auch gestartet, wenn es nicht an ist, aber im silent Modus, ohne die User bei der Arbeit zu stören.

    Und wenn es nicht geschlossen wurde aber trotzdem mit den Events nicht funktionieren möchte dann funktioniert es wieder nachdem das Objekt erneut gesetzt wurde.
    und da eh 24h betrieb ist macht es auch nichts, falls alle stricke reißen, 30min ohne Event ist mal vertretbar, wenn danach alle ausgebliebenen Events nachgeholt werden.

  • Outlook

    • MojoeB
    • 21. August 2023 um 14:25

    'IF IsObj($oOutlook) Then ;wenn es ein Objekt ist, mache es IMMER leer (warum?)'

    Nunja die Grund Idee war ursprünglich, das ich neu ankommende Emails über das Event unmittelbar auslösen möchte.
    Das klappt auch allerdings, wenn nun das Event aus irgendeinem Grund nicht erkannt wird, kommen die Nachrichten nicht mehr am Programm an.
    Das Objekt existiert dann noch ist aber über das Tool dann nicht mehr ansprechbar.

    Deshalb habe ich mir etwas überlegt, mit einer zweiten Methode, ungelesene Email zu checken und genau als neu ankommende zu behandeln wenn diese nicht schon über das Event erkannt wurden.

    Deshalb, habe ich alle Methoden zusammen genommen,

    jede halbe stunde wird dann das Objekt absichtlich geleert und das Event nachdem er die ungelesenen Mails durchgegangen ist wieder neu gestartet.

    Somit hab ich nun bei mehreren Tests erfolgreich Outlook abstürzen lassen um zu schauen ob er sich nachdem er die Methoden ausgeführt wieder von alleine fängt und was soll ich sagen somit funktioniert es.

    Die PC´s wo das Tool eingesetzt werden laufen zusammen mit verschieden Usern 24/7.

    Deshalb ist jede Lösung die automatisch funktioniert und erst gar keine fehleingaben durch den User zulässt zu wünschen.

  • Outlook

    • MojoeB
    • 21. August 2023 um 11:21

    Ehm ... ich hab es nun gelöst und das sehr einfach ich wusste nicht das das funktioniert, ich habe

    Code
    start_objekt()

    in einer Funktion die ich eh in einer schleife habe.

    also habe ich folgendes vorgenommen, statt nur zu prüfen ob $oOutlook kein Obj ist
    wird erst das Gegenteil gemacht, und dann wenn es zutrifft wird $oOutlook einfach überschrieben um in der nächstenzeile wieder frisch angelegt zu werden.

    Code
    func start_objekt()
    IF IsObj($oOutlook) Then
    $oOutlook = ''
    EndIf
    
    
    If Not IsObj($oOutlook) Then
    $oOutlook = _OL_Open()
    If @error <> 0 Then
    error_speichern($soerror,  "Outlook Error -> creating a connection to Outlook. @error = " & @error & ", @extended = " & @extended)
    infotexte()
    EndIf
    error_speichern($soerror,  "")
    _OL_ErrorNotify(3, @ScriptDir& '\neuerr.txt')
    EndIf
    EndFunc   ;==>start_objekt
    Alles anzeigen


    Code
    func start_call_me_mails()
        start_objekt()   
        $aFolder = _OL_FolderAccess($oOutlook, $vposteingang, $olFolderInbox)
        If @error = 1  Then
         error_speichern($soerror,  "Outlook Error -> when calling _OL_FolderAccess: @error=" & @error & ", @extended=" & @extended )
         infotexte()
        EndIf
        error_speichern($soerror,  "")
        If UBound($aFolder) > 0 Then ;pürft ob ein Array exsitiert.
            Local $oItems = $aFolder[1].Items ;Zugriff auf die Items
            If @error <> 0 Then      
                    error_speichern($soerror,  "Outlook Error -> when accessing the folder items: @error=" & @error & ", @extended=" & @extended)
                    infotexte()
            EndIf
            error_speichern($soerror,  "")
    
            ObjEvent($oItems, "oOL_") ;oOL_ItemAdd starten
    
            If @error <> 0 Then
                     error_speichern($soerror,  "Outlook Error -> when calling ObjEvent: @error=" & @error & ", @extended=" & @extended )
                    infotexte()
            EndIf
            error_speichern($soerror,  "")
            ConsoleWrite("OutlookEX UDF Example Script - waiting for new items to arrive!" & @CRLF)
        ElseIf UBound($aFolder) = 0 Then ;pürft ob ein kein Array exsitiert
            error_speichern($soerror,  "Outlook Error -> Items, prüfe ob die Angaben für den Posteingang stimmen")
            infotexte()
            Return False 
        EndIf
    EndFunc   ;==>start_call_me_mails
    Alles anzeigen

    vielen Dank an euch, falls jemand sehen will was ich noch alles im Skript habe.

    Code
    Func oOL_ItemAdd($oItem)
        Local $formattedText
        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 & @CRLF & _
                "Ankunft: " & $oItem.ReceivedTime) ; Email Daten in der Console ausgeben
    
        IF StringInStr($oItem.Subject, 'LISALINENEVENTTESTMAIL') Then
            _OL_ItemDelete($oOL, $oItem)
            Return
        Elseif StringInStr($oItem.Subject, 'Unzustellbar') Then ;Email mit Betreffzeile Unzustellbar überspringen.
            Return
    
        else
    
            $formattedText = $oItem.Body
    
            $dateiname = _CryptoNG_HashData($CNG_BCRYPT_SHA1_ALGORITHM, $oItem.EntryID)
            $dateiname = $dateiname & '.xml'
            $formattedText = formated_text($formattedText, $oItem.sendermail)
            $text = xmlvorlage('TEST1', 'TEST', $oItem.EntryID, StringRegExpReplace($oItem.CreationTime, "(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})", "$1-$2-$3 $4:$5:$6 Uhr"), $oItem.subject, $oItem.sendermail, $formattedText)
            IF FileExists(@ScriptDir & '\task\' & $dateiname) Then
                ConsoleWrite($dateiname & ' -> exsistiert bereits' & @CRLF)
            Else
                IF FileWrite(@ScriptDir & '\task\' & $dateiname, $text) = 1 Then
                    IsNewDatainTASKFolder()
                EndIf
            EndIf
        EndIf
    EndFunc   ;==>oOL_ItemAdd
    Alles anzeigen
    Code
    Func IsNewDatainTASKFolder()
        
        Local $taskFolderPath = $sGetTASK
        local $readyFolderPath = $sGetREADY
        local $fileAge, $filetime, $File,  $data
        local $socket
    
        Local $readyFiles = _FileListToArray($taskFolderPath, '*.xml', 1)
        $socket = Connect_TCP($sGetLisaIP, $sGetLisaPort)
        For $i = 1 To UBound($readyFiles) - 1 step 1
            $File = $taskFolderPath & $readyFiles[$i]
            $rfile = $readyFolderPath & $readyFiles[$i]
            
            IF FileExists($rfile) Then
                ContinueLoop
            EndIf
    
            $fileAge = FileGetTime($File, 0, 0)
    
            IF isArray($fileAge) Then
                $filetime = $fileAge[0] & '/' & $fileAge[1] & '/' & $fileAge[2] & ' ' & $fileAge[3] & ':' & $fileAge[4] & ':' & $fileAge[5]
            EndIf
    
            $currentTimestamp = _NowCalc()
            $elapsedTime = _DateDiff('s', $filetime, $currentTimestamp)
    
            If $elapsedTime < 3600 Then ; 3600 Sekunden = 1 Stunde
                $hread = FileOpen($File, 0)
                $data = FileRead($hread)
                FileClose($hread)
                ConsoleWrite('Über IP senden' & $data & @CRLF)
                TCPSend ( $socket, $data )
                FileCopy($File, $readyFolderPath)
                leere_Folders() ; ist eine datei älter als 3 Tage dann lösche diese.
            Else
                ContinueLoop
            EndIf
        Next
        CloseSocket($socket)
    start_call_me_mails()
    EndFunc   ;==>IsNewDatainTASKFolder
    Alles anzeigen
    Code
    func leere_Folders()
    
        Local $taskFolderPath = $sGetTASK
        local $readyFolderPath = $sGetREADY
        Local $aFolders[2] = [$taskFolderPath, $readyFolderPath]
        local $fileAge, $filetime, $File, $readyFiles
    
        For $a = 0 to UBound($aFolders) - 1 step 1
            $readyFiles = _FileListToArray($aFolders[$a], '*.xml', 1)
            For $b = 1 to UBound($readyFiles) - 1 step 1
                $File = $aFolders[$a] & $readyFiles[$b]
                $fileAge = FileGetTime($File, 0, 0)
                IF isArray($fileAge) Then
                    $filetime = $fileAge[0] & '/' & $fileAge[1] & '/' & $fileAge[2] & ' ' & $fileAge[3] & ':' & $fileAge[4] & ':' & $fileAge[5]
                EndIf
                $elapsedTime = _DateDiff('D', $filetime, _NowCalc())
    
                IF $elapsedTime > 3 Then
                    ConsoleWrite($File & ' - > wird gelöscht.' & @CRLF)
                    FileDelete($File)
                EndIf
            Next
        Next
    EndFunc   ;==>leere_Folders
    Alles anzeigen
    Code
    func Create_XML_with_Data()
        start_objekt()
        $array_Unread = UnreadIDs($sGetPosteingang)
        For $i = 1 To UBound($array_Unread) - 1 step 1
            $dateiname = _CryptoNG_HashData($CNG_BCRYPT_SHA1_ALGORITHM, $array_Unread[$i][0])
            $dateiname = $dateiname & '.xml'
            $formattedText = formated_text($array_Unread[$i][2], $array_Unread[$i][6])
            $text = xmlvorlage('TEST1', 'TEST', $array_Unread[$i][0], StringRegExpReplace($array_Unread[$i][3], "(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})", "$1-$2-$3 $4:$5:$6 Uhr"), $array_Unread[$i][1], $array_Unread[$i][5], $formattedText)
            IF FileExists($sGetTASK& '\' & $dateiname) Then
                ConsoleWrite($dateiname & ' -> exsistiert bereits' & @CRLF)
            Else
                FileWrite($sGetTASK& '\' & $dateiname, $text)
            EndIf
        Next
        
        IsNewDatainTASKFolder()
    EndFunc   ;==>Create_XML_with_Data
    Alles anzeigen
    Code
    func Connect_TCP($sIPAddress, $iPort)
      Local $iSocket = TCPConnect($sIPAddress, $iPort)
        If @error Then
            Local $iError = @error
             error_speichern($sPcIPerror,  'TCP-IP Verbindung konnte nicht hergestellt werden, Error Code: '&  _WinAPI_GetErrorMessage($iError))    
            infotexte()
            Return @error
        Else
            error_speichern($sPcIPerror,  "")
            Return $iSocket
        EndIf
    EndFunc 
    func CloseSocket($iSocket = '' )
           ; Schließt den Socket.
        TCPCloseSocket($iSocket)
    EndFunc 
        Func TCP_STARTup()
        TCPStartup() ; Startet den TCP Service.
        OnAutoItExitRegister("OnAutoItExit")
    EndFunc   ;==>Example
    
    Func OnAutoItExit()
        TCPShutdown() ; Beendet den TCP Service.
    EndFunc   ;==>OnAutoItExit
    Alles anzeigen
    Code
    func xmlvorlage($id, $ereignis, $entryid, $datetime, $subject, $sendermail, $body)
        IF StringInStr($subject, '&') Then
            $subject = StringReplace($subject, '&', 'und')
        EndIf
        Local $xmlContent = '<?xml version="1.0" encoding="utf-8"?>' & @CRLF & _
                '<TEST>' & @CRLF & _
                '    <VERSION>5.8</VERSION>' & @CRLF & _
                '    <MEDIUM>12</MEDIUM>' & @CRLF & _
                '    <KANAL>610</KANAL>' & @CRLF & _
                '    <SENDER>172.22.24.70</SENDER>' & @CRLF & _
                '    <ENTSTEHUNG>' & $datetime & '</ENTSTEHUNG>' & @CRLF & _
                '    <EREIGNISMELDUNG>' & @CRLF & _
                '        <OBJEKTNUMMER>' & $id & '</OBJEKTNUMMER>' & @CRLF & _
                '        <Ereignis>' & $ereignis & '</Ereignis>' & @CRLF & _
                '        <Meldung>' & $subject & '</Meldung>' & @CRLF & _
                '    </EREIGNISMELDUNG>' & @CRLF & _
                '    <Auslösung>' & @CRLF & _
                '        <entryid>' & $entryid & '</entryid>' & @CRLF & _
                '        <datetime>' & $datetime & '</datetime>' & @CRLF & _
                '        <mailsender>' & $sendermail & '</mailsender>' & @CRLF & _
                '        <subject>' & $subject & '</subject>' & @CRLF & _
                '        <body>' & $body & '</body>' & @CRLF & _
                '    </Auslösung>' & @CRLF & _
                '</TEST>'& @CRLF
        Return $xmlContent
    EndFunc   ;==>xmlvorlage
    Alles anzeigen
  • Outlook

    • MojoeB
    • 18. August 2023 um 14:13

    @Moombas:Danke, deine Idee hört sich sehr gut an,

    war auch schon fast gefühlt am Ziel habe aber alles wieder verworfen, da ich auf der Arbeit bin und hier es so mega laut ist und ich micht nicht richtig konzentrieren konnte hab somit grad alles wieder gelöscht.

    Werde es aber zuhause nochmal versuchen.

    water: Danke, habe ich auch mal schnell versucht leider nichts dabei rumgekommen.

    Ich hole mir ja schon mit der Methode die ankommenden Mails, und das funktioniert auch solange man Outlook nicht schließt.

    Aber kannst du evtl nochmal ausführlicher erklären wie ich die Event-Methode richtig verwende.

    jetzt für diesen speziellen Fall falls ein user, Outlook per mausklick schließt, damit man dann automatisch oOutlook erneuern kann, ohne das Skript neuzustarten ?

  • Outlook

    • MojoeB
    • 18. August 2023 um 11:56

    oke das versuche ich gleich,

    :) poste dann die Funktion dazu

  • Outlook

    • MojoeB
    • 18. August 2023 um 11:19

    Hay mal wieder eine Frage, die mir keine Ruhe lässt.

    Ich nutze : OutlookEX.au3 UDF

    Nun stellt sich mir die frage wenn ich folgendes als beispiel habe :
    (posteingang etc. strings sind nun nicht mit hier im code drinnen der code ist sozusagen nur als schaubild gedacht.)

    C
    #include <OutlookEX.au3>
    #include <CryptoNG.au3>
    Global $oOutlook
    
    start_objekt()
    scannwmails()
    
    While 1
        Sleep(1000) 
    Wend
    
    func start_objekt()
        If Not IsObj($oOutlook) Then
            $oOutlook = _OL_Open()
            If @error <> 0 Then
                MsgBox($MB_ICONERROR, "OutlookEX UDF", "Error creating a connection to Outlook. @error = " & @error & ", @extended = " & @extended)
                Exit
            EndIf
            _OL_ErrorNotify(3, @ScriptDir& '\neuerr.txt')
        EndIf
    EndFunc   ;==>start_objekt
    
    func scannwmails()
    
        $aFolder = _OL_FolderAccess($oOutlook, $vposteingang, $olFolderInbox)
        If @error = 1  Then
            MsgBox($MB_IconError, 'title1', "Error when calling _OL_FolderAccess: @error=" & @error & ", @extended=" & @extended & @CRLF, 10)
        EndIf
    
        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, 'title2', "Error when accessing the folder items: @error=" & @error & ", @extended=" & @extended & @CRLF, 10)
            EndIf
    
            ObjEvent($oItems, "oOL_") ;oOL_ItemAdd starten
    
            If @error <> 0 Then
                MsgBox($MB_IconError, 'title3', "Error when calling ObjEvent: @error=" & @error & ", @extended=" & @extended & @CRLF, 10)
            EndIf
    
            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, 'title', "Fehler Zugiff Items." & @CRLF & "Prüfe Sie die angeben vom Posteingang." & @CRLF, 10) ;fehler wenn Array bei 0 ist.
            Return False 
        EndIf
    EndFunc 
    
    
    Func oOL_ItemAdd($oItem)
        Local $formattedText
        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 & @CRLF & _
                "Ankunft: " & $oItem.ReceivedTime) ; Email Daten in der Console ausgeben
    
        IF StringInStr($oItem.Subject, 'LISALINENEVENTTESTMAIL') Then
            _OL_ItemDelete($oOL, $oItem)
            Return
        Elseif StringInStr($oItem.Subject, 'Unzustellbar') Then ;Email mit Betreffzeile Unzustellbar überspringen.
            Return
    
        else
    
            $dateiname = _CryptoNG_HashData($CNG_BCRYPT_SHA1_ALGORITHM, $oItem.EntryID)
            $dateiname = $dateiname & '.xml'
            IF FileExists(@ScriptDir & '\task\' & $dateiname) Then
                ConsoleWrite($dateiname & ' -> exsistiert bereits' & @CRLF)
            Else
                IF FileWrite(@ScriptDir & '\task\' & $dateiname, $text) = 1 Then
                    IsNewDatainTASKFolder()
                EndIf
            EndIf
        EndIf
    EndFunc   ;==>oOL_ItemAdd
    Alles anzeigen


    Wie zum Geier kann ich prüfen lassen ob das

    Code
    oOutlook

    noch aktuell ist?

    Manchmal schließen die Nutzer outlook und starten es neu dann passiert das das

    Code
    oOutlook

    nicht mehr ansteuerbar ist, aber wie kann ich nun das erneuern lassen ?


    Gruß mojoe

  • Mehrere Dateien umbenennen

    • MojoeB
    • 15. August 2023 um 16:55

    Ich kenne dein Skript nicht aber ich würde

    so heran gehen ohne dir jetzt eine Zeile Code vorzusetzen.

    -> GUIliste ();eigne gui erstellen

    ->> listview (so einstellen das checkboxen angezeigt werden für jeden Eintrag in der liste.)

    ->> Edit Fenster (nicht zu groß nach Geschmack, und nicht anklickbar!) (könnte man aber auch alles andere nehmen ich bevorzuge halt edit boxen.)

    ->> btn start, btnclose ,btn add paht ->FileselectFolder

    funktionen:

    ->>Daten sammeln (pfade) FileselectFolder

    -->Pfade in ein array sichern!

    ->>pfade durchsuchen nach dateien _FileListToArray

    ->daten und pfade zusammen in einem 2d Array sichern.

    (viewlist nun leeren falls noch befüllt.)

    ->>gefunden daten in die listview füllen / 2d Array = GUICtrlCreateListViewItem

    ----> diese Funktionen nun extra in einer Funktion sichern _funktionb($paths) pfade dann mit einem Parameter übergeben. (erst aber später aufrufen.)

    ->> btn add paht > pfade hinzufügen > sie in der editbox auch anzeigen oder von mir aus auch in einer ListBox(FileselectFolder)

    ->Checkboxen der gewünschten Dateien anklicken.

    -> Btn start > alle aktiven Checkboxen Ubound

    > For schleife

    _funktion zum umbenennen (dort ist auch dann die Inputbox drinnen falls nicht automatisch der Name geändert werden soll.)

    war _funktion erfolgreich dann mach den harken bei der Checkbox wieder raus.
    next

    Ist die For schleife beendet
    dann starte am ende die gebündelte _funktionb($Pfade) um die viewlist zu aktualisieren-.

    Wie du sieht das ist kein Code aber so würde ich es aufbauen, wenn es mein Projekt wäre, es ist natürlich dir überlassen wie du ans ziel kommst.


    EDIT

    Falls du mein gebrabbelt nicht verständlich ist, habe ich meinen text mal chatgpt geben
    Also hier die KI generierte Fassung meines Textes ^^:

    Ich bin nicht mit deinem genauen Skript vertraut, aber ich würde folgendermaßen vorgehen, ohne dir direkt Code vorzuschlagen:

    1. Zuerst würde ich eine GUI erstellen, indem ich die Funktion "GUIliste();" verwende, um eine eigene GUI zu erstellen.
    2. Dann würde ich eine ListView hinzufügen und sie so einstellen, dass für jeden Eintrag in der Liste Checkboxen angezeigt werden.
    3. Ein Edit-Fenster sollte erstellt werden, nicht zu groß, nach deinem Geschmack, und es sollte nicht anklickbar sein. Du könntest auch andere Elemente verwenden, aber ich persönlich bevorzuge Edit-Boxen.
    4. Außerdem würde ich Buttons hinzufügen: "Start", "Schließen" und "Pfad hinzufügen". Der Button "Pfad hinzufügen" sollte die Funktion "FileselectFolder" aufrufen.

    Folgende Funktionen wären erforderlich:

    1. "Daten sammeln": Hier würden Pfade gesammelt, indem die Funktion "FileselectFolder" verwendet wird, und die gesammelten Pfade würden in einem Array gesichert werden.
    2. Die gesammelten Pfade würden mithilfe von "_FileListToArray" nach Dateien durchsucht, und die Daten und Pfade würden in einem 2D-Array kombiniert und gesichert.
    3. Die ListView sollte geleert werden, falls sie bereits Einträge enthält.
    4. Die gefundenen Daten würden in die ListView eingefügt. Dies könnte mithilfe der Funktion "GUICtrlCreateListViewItem" geschehen. Diese Schritte könnten in einer separaten Funktion namens "_funktionb($paths)" organisiert werden, der die Pfade als Parameter übergeben werden. Diese Funktion sollte später aufgerufen werden.
    5. Über den Button "Pfad hinzufügen" könnten weitere Pfade hinzugefügt werden. Diese würden in der Edit-Box oder alternativ in einer ListBox ("FileselectFolder") angezeigt werden.
    6. Die gewünschten Dateien könnten durch Ankreuzen der Checkboxen ausgewählt werden.
    7. Wenn der "Start"-Button gedrückt wird, würden alle aktiven Checkboxen ausgewählt und durch eine "For"-Schleife verarbeitet.
    8. Innerhalb der Schleife könnte die Funktion zum Umbenennen aufgerufen werden. Hier könnte auch eine Eingabeaufforderung (Inputbox) verwendet werden, wenn der Name nicht automatisch geändert werden soll.
    9. Wenn die "_funktion" erfolgreich abgeschlossen ist, würde die entsprechende Checkbox wieder abgewählt.
    10. Die Schleife würde alle Checkboxen durchlaufen, und nach ihrem Abschluss würde die gebündelte "_funktionb($Pfade)" aufgerufen werden, um die ListView zu aktualisieren.

    So, das ist eine strukturierte Zusammenfassung deines Ansatzes, um das Projekt umzusetzen. Den genauen Code musst du noch entwickeln, aber diese Schritte sollten dir eine gute Anleitung bieten, wie du vorgehen könntest.

  • Mehrere Dateien umbenennen

    • MojoeB
    • 15. August 2023 um 15:56

    du musst keine neue gui bauen du kannst auch eine inputbox nehmen.

  • iframes Webdriver

    • MojoeB
    • 3. August 2023 um 13:59

    °^°

    Ich bin so dumm..

    warum habe ich grade die identifers, nicht gesehen auf deinem Screen-short habe ich es sofort erkannt.

    alles klar ich programmiere weiter und falls ich nicht weiter kommen sollte melde ich mich dazu nochmals.

  • iframes Webdriver

    • MojoeB
    • 3. August 2023 um 13:30

    hey gmmg,

    nein leider nicht

    1. ich hab noch nie die Demo zu zum laufen bekommen das er alle Tests ohne Fehler durchführen kann.

    2. eine Liste dieser bekomme ich seit dem neuesten update der udf auch angezeigt, aber ich hab das Problem, das ich nirgends sehen kann, außer in der For schleife auf welchem Frame ich mich gerade befinde.


    Deshalb gehe ich im Code _WD_FrameEnter($sSession, $i) die einzelnen Frames durch, um die richtigen buttons zu finden, weil solange ich auf einem Frame keinen Button finde.

    bekomme ich davon auch keine id zurück.

    Code: beispielcode
    $Capabilities_edge = SetupEdge(False)
    $oSession = _WD_CreateSession($Capabilities_edge)
    
    _WD_Navigate($oSession, $link)
    
    $btn = _WD_WaitElement($oSession, $_WD_LOCATOR_ByXPath, '//*[@id="login_submit"]', 0, 5000)
    IF @Error Then MsgBox(0, 'Error', 'error')
    
    $input_user = _WD_WaitElement($oSession, 'xpath', '//*[@id="username"]', 0, 2)
    $input_pass = _WD_WaitElement($oSession, 'xpath', '//*[@id="password"]', 0, 2)
    
    _WD_ElementAction($oSession, $input_user, 'clear')
    _WD_SetElementValue($oSession, $input_user, $login)
    _WD_ElementAction($oSession, $input_pass, 'clear')
    _WD_SetElementValue($oSession, $input_pass, $passwort)
    _WD_ElementAction($oSession, $btn, 'click')
    
    test($oSession, '//*[@id="ToolJa"]') ; diesen Btn findet er.
    
    test($oSession, '//*[@id="BtnView"]') ; diesen Btn findet er nicht.
    Alles anzeigen

    Nun habe ich das Problem, das er beim 2ten Aufruf der Methode (test, im POST 1), kein Button mehr findet.

    Aber auf welcher Frameseite befinde ich mich dann nach dem Click, im Nevada ?

    Und warum findet er danach (Click) nichts mehr.

    Es ist irgendwie schwer das zu beschreiben, bestimmt auch zum verstehen.

  • iframes Webdriver

    • MojoeB
    • 3. August 2023 um 12:17

    Ich hab mir noch nicht mal einen Account dort gemacht^^, sollte ich mal tun mein englisch ist nur Mega schlecht.

Spenden

Jeder Euro hilft uns, Euch zu helfen.

Download

AutoIt Tutorial
AutoIt Buch
Onlinehilfe
AutoIt Entwickler
  1. Datenschutzerklärung
  2. Impressum
  3. Shoutbox-Archiv
Community-Software: WoltLab Suite™