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

  • ControlSend an Textfeld

    • MojoeB
    • 29. Dezember 2022 um 00:16

    hast du WinActivate mit dem Class Namen versucht?

    dies sollte das kleine Fenster in den Vordergrund holen und kannst entweder mit send oder controlsend arbeiten.

    AutoIt
    Opt("WinTitleMatchMode", 2); Aktiviert den Titel-Abgleichmodus "substring". Dies bedeutet, dass der angegebene Fenstertitel als Teilstring des tatsächlichen Fenstertitels abgeglichen wird.
    Run("C:\Program Files (x86)\StarMoney 13 Basic\app\StartStarMoney.exe")
    While 1; Startet eine unendliche Schleife.
      ; WinActivate Prüft, ob das Fenster mit dem angegebenen Klassennamen aktiviert werden kann.
      ; Wenn das Fenster erfolgreich aktiviert wurde, wird der folgende Codeblock ausgeführt.
      If WinActivate("[CLASS:HwndWrapper[DefaultDomain'(usw)]") Then    
        ControlSend("", "Dein Passwort", "", "{Enter}"); Sendet das angegebene Passwort an das aktive Fenster und drückt die Enter-Taste.
        Exit; Beendet das Skript.
            ; Wenn das Fenster nicht aktiviert werden konnte, wird der Codeblock übersprungen und die Schleife fortgesetzt.
      endif
    Wend
    Alles anzeigen

    wobei ich mir nicht sicher bin ob man auch das so schreiben muss

    Code
    [CLASS:            ]

    oder nur so sein muss

    Code
    HwndWrapper[DefaultDomain'(usw)

    Code ist nicht getestet habe das Programm nicht, den Namen richtig anpassen und versuchen :)

    sry für die vielen Edits.

    habe grad mit einem anderen Programm getestet. bei mir hat es nicht funktioniert ^^, du kannst es natürlich auch so versuchen :

    AutoIt
    global $pid=0,$path = "C:\Program Files (x86)\StarMoney 13 Basic\app\StartStarMoney.exe"
    $pid  = run($path)
    While 1; Startet eine unendliche Schleife.
      IF $pid = 0 Then ; Wenn PID = 0 ist wird die Schleife fortgesetzt, und eine Konsolenmeldung ausgeben.
          ConsoleWrite($path&' konnte nicht gestartet werden.'&@CRLF)
      Elseif $pid <> 0 Then ;Wenn PID ungleich 0  ist wird 7sec gewartet und dann ControlSend ausgeführt.
        Sleep(7000)
        ControlSend("", "Dein Passwort", "", "{Enter}") ;Sendet das angegebene Passwort an das aktive Fenster und drückt die Enter-Taste.
        Exit ;Beendet die Schleife.
      endif
    Wend
    Alles anzeigen
  • Umfrage: Tutorial zum WebDriver Projekt ("au3WebDriver" von Danp2)

    • MojoeB
    • 26. Dezember 2022 um 20:16

    hey richtig gut :) würde mich freuen,

    irgendwann benötigt man es, ich habe nebenbei irgendwann mal im englischen form gelesen das auch Microsoft dran sein sollte den Edge freundlicher zu machen in Sachen von Programmierung. Vielleicht zukünftig so wie der beim IE damals ob, dann noch der Webdriver benötigt wird weiß ich nicht.
    Aber bis das dann wieder in autoit übersetzt ist kann sich noch hinziehen von daher immer her mit :) fände ich ein super fürs deutsche Forum.

  • MS Edge im Kioskmodus beenden

    • MojoeB
    • 16. Dezember 2022 um 11:53

    hab ich selber noch nicht hinbekommen aber es gibt den Webdriver und eine udf dafür,

    dort kannst du Edge starten lassen und auch wieder die Session beenden, damit sollte auch dein Fenster wieder zu gehen.

    Ich habe grad am Beispiel (wd_demo.au3) rumgespielt. Es tut zwar etwas aber bei mir steht immer das Fenster mit Profil Synchronisieren im Weg.

    noch nicht rausbekommen wie ich das umgehen kann, habe dann versucht im privat Modus zu starten auch ohne Erfolg.

    headless konnte ich die Instanz starten aber wahrscheinlich war da wieder das eine Fenster im weg weil weiter ging der Test ohne das darauf drücken nicht.

    vielleicht kannst du darüber den Browser wie gewünscht öffnen und auch wieder beenden lassen, wenn du nicht die selben Problem hast wie ich :D vielleicht löst du diese gleich.


    WebDriver - AutoIt Wiki (autoitscript.com)

  • doppelte Einträge, in einem bestimmten Zeitraum löschen

    • MojoeB
    • 12. Dezember 2022 um 07:32

    sry das ich mich so spät zurückmelde aber ich konnte nun endlich weiter programmieren, und AspirinJunkie :) super Arbeit jetzt verstehe ich auch die _Arraysort Funktion und den sinn dahinter dankeeee!!! :D wuhu :)

    Velted deins habe ich noch nicht getestet aber es ist gut wenn hier etwas Code drinnen steht vielleicht kann man das mal gebrauchen jetzt ist aber erstmal der Beitrag abgeschlossen :theke: danke an alle für die Hilfe.

  • doppelte Einträge, in einem bestimmten Zeitraum löschen

    • MojoeB
    • 5. Dezember 2022 um 15:10

    @AspirinJunkie :

    Es ist größtenteils dein Code, habe es in einer Funktion geparkt, :/ habe es so erweitert das es zu meinem Input File passt.

    Dort sind leider Daten drinnen die ich öffentlich nicht preisgeben darf. hier ist nun die Funktion, ich gebe das sortierte erstellte Array zurück & lasse mir danach eine csv Datei mit den den Daten des Arrays erstellen.
    Als ich dann die Datei überprüft habe, habe ich das mit der (Datum/Zeit ) Anordnung festgestellt.

    Habe danach mir das Array nach dem Return angesehen, dort war es nur zum Teil nach (Datum/Zeit ) angeordnet, ob das nur zufall ist weiß ich nicht <.< um den entgegenzuwirken habe ich dann nochmal das hier auf das Return Array

    Code
    _ArraySort($aCSV, 0, 0, 0, 1)

    angewandt, hat aber nicht sehr viel gebracht ^^, oder funktioniert das nur in mit :

    Code
    _ArraySortFlexible

    ?

    oder konnte es an der Form des Datums liegen, ich probiere gleich nochmal ^^
    habe heute leider viel anders zeug zu tun.

    Hier mal der veränderte ^^ Code :

    AutoIt
    #include <MsgBoxConstants.au3>
    #include <array.au3>
    #include <String.au3>
    #include <File.au3>
    #include <Date.au3>
    ;#include <Crypt.au3>
    #include <ArrayPlus.au3>
    
    Func Aspirin($file)
        Local $aCSV
        _FileReadToArray($file, $aCSV, 0, ";")
        For $i = 0 To UBound($aCSV) - 1
    
            $aCSV[$i][2] = _GerToCalc($aCSV[$i][2])
        ;~     $aCSV[$i][2] = StringRegExpReplace($new & ":00", "(\d\d)\/(\d\d)\/(\d{4})\h(\d\d):(\d\d):(\d\d)(.*)", "$3/$2/$1 $4:$5:$6")
            Next
            
        _ArraySortFlexible($aCSV, _myComparison)
        ; 12. Spalte hinzufügen:
        ReDim $aCSV[UBound($aCSV)][12]
        
        ; Gehe Array durch und markiere die Einträge, welche im 5 Minutenzeitfenster des aktuellen Gerätes liegen
        Local $sCurDev = $aCSV[0][4], $sCurrTime = $aCSV[0][2], $iC = 0, $iCounter = 1
        For $i = 1 To UBound($aCSV) - 1
            ; Wenn Zeitdiff < 5 Minuten, dann zum überschreiben markieren (durch Zählererhöhung):
            If $aCSV[$i][4] = $sCurDev And _DateDiff("s", $sCurrTime, $aCSV[$i][2]) <= 300 Then
                $iC += 1
                $iCounter += 1
                $aCSV[$i - $iC][11] = $iCounter
                ContinueLoop
            Else     ; neuen Geräte- und Zeitbezug
                $sCurDev = $aCSV[$i][4]
                $sCurrTime = $aCSV[$i][2]
                $iCounter = 1
                $aCSV[$i][11] = $iCounter
            EndIf
            ; Element vorverschieben um die Anzahl bereits gelöschter Elemente (somit werden diese überschrieben)
            $aCSV[$i - $iC][0] = $aCSV[$i][0]
            $aCSV[$i - $iC][1] = $aCSV[$i][1]
            $aCSV[$i - $iC][2] = $aCSV[$i][2]
            $aCSV[$i - $iC][3] = $aCSV[$i][3]
            $aCSV[$i - $iC][4] = $aCSV[$i][4]
            $aCSV[$i - $iC][5] = $aCSV[$i][5]
            $aCSV[$i - $iC][6] = $aCSV[$i][6]
            $aCSV[$i - $iC][7] = $aCSV[$i][7]
            $aCSV[$i - $iC][8] = $aCSV[$i][8]
            $aCSV[$i - $iC][9] = $aCSV[$i][9]
            $aCSV[$i - $iC][10] = $aCSV[$i][10]
            $aCSV[$i - $iC][11] = $aCSV[$i][11]
        Next
        ReDim $aCSV[UBound($aCSV) - $iC][12]
        _ArraySort($aCSV, 0, 0, 0, 1)
        _ArrayDisplay($aCSV,  '$aCSV')
    Return $aCSV
    EndFunc   ;==>Aspirin
    
    Func _myComparison(ByRef $A, ByRef $B)
        If $A[0] = $B[0] Then Return StringCompare($A[1], $B[1])
        Return StringCompare($A[0], $B[0])
    EndFunc   ;==>_myComparison
    
    
    Func _GerToCalc(ByRef $sDate)
        Return StringRegExpReplace($sDate, '(\d{2})\.(\d{2})\.(\d{4}) (.+)', '$3/$2/$1 $4')
    EndFunc   ;==>_GerToCalc
    Alles anzeigen
  • doppelte Einträge, in einem bestimmten Zeitraum löschen

    • MojoeB
    • 5. Dezember 2022 um 12:44

    So Leute habe mir am Wachende nichts mehr dazu angeschaut, es kommt immer änderst als man es sich vorstellt ^^

    Peter S. Taler

    nein leider keine festen Größen es kann sich von Tag zu Tag ändern.

    Moombas

    Danke nochmal für den versuch,

    Velted :
    danke :) ich schau es mir zuhause nochmal an auf der Arbeit habe ich noch die ältere Version von autoit


    @AspirinJunkie :
    Genau :) jetzt stimmt es habe nun auch den Code angepasst das es auch auf der großen Liste funktioniert.

    Dabei sind mir 2 Sachen aufgefallen:

    1. ab und an mal schreibt er den Counter nicht mit warum weiß ich nicht.

    2. Trotz _ArraySort($aCSV, 0, 0, 0, 1) werden nicht alle Daten nach Datum/Zeit geordnet siehe bild.

    Aber genauso in der Form habe ich es mir das vorgestellt :) danke AspirinJunkie.

    Bilder

    • ArraySort.jpg
      • 39,22 kB
      • 128 × 383
  • doppelte Einträge, in einem bestimmten Zeitraum löschen

    • MojoeB
    • 2. Dezember 2022 um 17:49

    @AspirinJunkie

    irgendwie nice, aber ich bekomm es immer noch nicht so hin wie ich möchte.

    Die csv war ja eine beispiel Datei, die die ich bearbeiten muss ist um einiges größer.

    mit mehreren spalten und Zeilen

    ; Wenn Zeitdiff < 5 Minuten, dann zum überschreiben markieren (durch Zählererhöhung):

    das ist korrekt aber ich brauch den zähler ja nur bei den gefunden doppelten innerhalb 5min das heißt

    Bsp. Gerät 1 sendet 7x innerhalb 5min.

    veranschaulicht : Row : $i| Col:0| Gerät ; Col:1| Zeit/datum ; Col:2| Anzahl

    Endergebnis : Gerät 1 ; 'zeit/datum'; 7

    Ich habe es grad etwas versucht es zu erweitern aber anscheint nutze ich etwas falsch, da mit meinen Änderungen,

    genau wieder das passiert was mir schon heute Morgen passiert ist.

    Entweder wird keine Anzahl geschrieben oder es sind wieder doppelte werte drinnen die eigentlich übersprungen wurden.


    Ich werde morgen weiter machen, aber danke für die schnellen Infos euch beiden @AspirinJunkie,  @Moombas

    @Moombas

    mit deinem Skript bekomme ich bei geänderter *csv Fehler im Array angezeigt.
    also bei dem ersten Eintrag [0][1]stand da 4:00 <- da wusste ich jetzt nicht wo ich es zuordnenden sollte war das die Zeit?

    ps: irgendwie hab ich hier ein Problem mit der Schriftform & größe ich habe alles markiert aber nur ein Teil lässt sich ändern.

  • doppelte Einträge, in einem bestimmten Zeitraum löschen

    • MojoeB
    • 2. Dezember 2022 um 13:30

    Hallo Liebes Forum :) ,

    Ich hänge leider an einem Skript und wollte fragen ob Ihr evtl mir helfen könntet.

    Ich habe eine Tabelle, habe diese hier als Beispiel erstellt : example.csv

    Ich möchte nun erst die Gerätenamen vergleichen, falls ein gleichnamiges Gerät gefunden wird soll die Entstehungszeit beider Geräte überprüft werden,

    Innerhalb von 300sekunden(5min) , sollen dann die doppelten Einträge entfernt werden.

    In der neunen Datei soll dann die Anzahl der gefunden doppelten innerhalb der l (5min grenze) gefundenen Einträge stehen.

    Hier ist mein Beispiel Skript leider habe ich es bisher noch nicht hinbekommen, das es richtig funktioniert.

    AutoIt
    #include <MsgBoxConstants.au3>
    #include <array.au3>
    #include <String.au3>
    #include <File.au3>
    #include <Date.au3>
    Global $vTemp
    $file_example = 'example.csv'
    example( $vTEMP, $file_example )
    
    Func example( byref $vArray,$file = ''  )
    Local $i_ = 0 ;anzahl an bearbeitete
    Local $date_1,  $date_2,  $iunterschied
    Local $tgereat_1, $tgereat_2,  $tage
    
    
    _FileReadToArray($file, $vArray, 0, ';')
    IF @Error Then 
        ConsoleWrite('Fehler _FileReadToArray: ' &@error& @CRLF)
        Exit  
    EndIf
    
    For $i = UBound($vArray) - 1 To 2 Step -1
    $tgereat_1= $vArray[$i][0]
    $tgereat_2= $vArray[$i -1][0]
    $date_1= $vArray[$i][1]
    $date_2= $vArray[$i -1][1]
    
        If $tgereat_1 =  $tgereat_2 Then
        $date_1= _GerToCalc($date_1)
        $date_2 = _GerToCalc($date_2)
        $iunterschied = _DateDiff('s', $date_2, $date_1)
    ;~     $tage = $iunterschied / 86400
            If $iunterschied <=  300 Then 
                $i_ = $i_ + 1
                ConsoleWrite('DIFF:'&@TAB & $iunterschied &@TAB &$tgereat_1 &'<->'&@TAB & $tgereat_2 & @CRLF & $date_1 &'-' & $date_2 & @CRLF)
                ConsoleWrite('Doppelten Eintrag inerhalb von 5min gefunden, deshalb wird dieser übersprungen.'& @CRLF)
                    
                $temp = $tgereat_1 & ';' & $date_1 & ';' & 'anzahl inerhalb 5min'& ';' & $i_ & ';'&@CRLF 
                $i -1
                FileWrite('teeeest.csv', $temp )
            EndIf                     
        ElseIf $tgereat_1 <>  $tgereat_2 Then
            $i_ = 1
            $temp = $tgereat_1 & ';' & $date_1 & ';'&'anzahl innerhalb 5min'& ';' & $i_ & ';'&@CRLF 
            FileWrite('teeeest.csv', $temp )
        EndIf 
    Next 
    endFunc
     
    Func _CalcToGer(ByRef $sDate)
        Return StringRegExpReplace($sDate, '(\d{4})/(\d{2})/(\d{2}) (.+)', '$3.$2.$1 $4')
    EndFunc   ;==>_CalcToGer
    
    Func _GerToCalc(ByRef $sDate)
        Return StringRegExpReplace($sDate, '(\d{2})\.(\d{2})\.(\d{4}) (.+)', '$3/$2/$1 $4')
    EndFunc   ;==>_GerToCalc
    Alles anzeigen
    Code
    Quelldatei : example.CSV
    
    1-G;10/10/2022 00:10:55
    2-G;10/10/2022 00:12
    3-G;10/10/2022 00:13
    1-G;10/10/2022 00:13:12
    4-G;10/10/2022 00:14
    1-G;10/10/2022 00:14:00
    5-G;10/10/2022 00:14
    6-G;10/10/2022 00:14
    7-G;10/10/2022 00:14
    1-G;10/10/2022 00:20:00
    Alles anzeigen

    So sollte das Endergebnis aussehen :

    Code
    als CSV
    
    1-G;10.10.2022 00:10:55;anzahl innerhalb 5min;3;
    7-G;10.10.2022 00:14   ;;anzahl innerhalb 5min;1;
    6-G;10.10.2022 00:14   ;anzahl innerhalb 5min;1;
    5-G;10.10.2022 00:14   ;anzahl innerhalb 5min;1;
    4-G;10.10.2022 00:14   ;anzahl innerhalb 5min;1;
    3-G;10.10.2022 00:13   ;anzahl innerhalb 5min;1;
    1-G;10.10.2022 00:20   ;anzahl innerhalb 5min;1;

    Edit : habe das Endergebnis hier angepasst,
    das zusätzliche Datum das mit drinnen stand hat hier im Beispiel irritiert, das war aus meiner Original datei.

  • Speichern von zwei verschiedenen Mousepositionen

    • MojoeB
    • 31. Oktober 2022 um 17:09

    'Programm Greenshot'

    Das ist aber kein Windows Bord mittel :) sondern ein externes Programm.

    Ich hoffe ich habe es richtig verstanden es geht um ein referenzbild oder ?

    weil wenn es um die eigentliche Funktion geht kann ich nicht viel beitragen.^^

    (davor musst du aber Greenshot ausmachen sonst klappt der shortcut nicht.)

    1.ich mache meine Desktopscreenshorts immer mit einem Tastendruck auf 'druck' (print|drucken)

    oder für nur Fenster, 'alt+druck' dann wird nur das aktiveFenster ausgewählt.

    2.dann öffne ich MSPaint zieh das weiße Kästchen ganz klein und drücke strg+v
    3.Wen ich die Koordinaten eines Screens brauch dann wähle ich in Paint 'Auswählen' aus, fahr mit dem Courser dorthin wo ich die Koordinaten brauch und dann werden die mir unten in Paintstatusleiste angezeigt.

    Obwohl ich das sehr lange nicht mehr gemacht habe weil die Autoit Windows Info immer gute Dienste geleistet hat was Koordinaten angeht.

    Aber vielleicht hast du die Probleme nicht mehr wenn du deine Bilder mit Paint erstellst statt Greenshot, vielleicht verfälscht greenshort irgendwie die größe warum auch immer?


    edit: ok glaub ich habs jetzt verstanden ...

  • Ini Write/Read zerstört nach und nach ini-File

    • MojoeB
    • 28. Oktober 2022 um 13:21

    Moombas :nun ja wenn er damit Probleme hat wollte ich ihm nur eine zweite Möglichkeit aufzeigen an der ich zufällig gestern dran gearbeitet habe.
    Außerdem bitte korrigiere mich wenn ich falsch liege zumindestens ich habe es nicht hinbekommen den ini inhalt in verschlüsselten dateien mit Iniread auszulesen.

  • Ini Write/Read zerstört nach und nach ini-File

    • MojoeB
    • 27. Oktober 2022 um 21:42

    Hallo Tueftler,

    ich glaube ich habe da was für dich, habe ich selbst erst heute geschrieben deswegen bitte verzeihe wenn es nicht so ordentlich aussieht.
    Ich wollte für mich eigentlich eine Funktion schreiben mit der ich auch in ini form Dateien auslesen kann auch wenn sie verschlüsselt sind.

    Die Option einfach setzten musst aber kein Kennwort oder sowas setzten es geht auch mit normalen Dateien egal welche Endung Hauptsache Ini Inhalt.

    _iniCyp($file = '', $iAlgID = '', $key = '', $opt = '', $katopt = -1)

    $file pfad zum file

    $iAlgID = $CALG_AES_256 ; einfach den Wert setzen oder einen andere Verschlüsslung egal es geht hier nur um die Abfrage in der Funktion,

    $key = falls du eine Datei verschlüsselt hast dann gib hier den Schlüssel ein falls nicht einfach auf '' lassen

    $opt = sind die Optionen was die Ausgeben werden lassen soll

    1 : die sectionen ohne [] zeichen

    2: alle werte in der ini vor dem =

    3: alle werte in der ini nach dem =

    4: alle werte in der ini ohne sectionen getrennt array[][]

    5. alle werte+$katopt sectionen=katopt (zahl) dann wird die ganze Sektion angezeigt aber nicht durch = getrennt

    6. wie in 5 alle werte aber getrennt je nach katopt wert.

    Achte darauf das in deiner datei (ini) keine leerstellen sind zwischen den werten.

    hier ein Beispiel ich hoffe die hilft das ^^:

    @EDIT : ich muss mich korrigieren habe nun einige ini Dateien ausprobiert manche gehen ohne Problem andere mag er nicht

    wenn ich allerdings dann den Inhalt in eine *txt Datei schreibe funktioniert der code. + ich vermute es liegt das in manchen ini Dateien am Ende 2-3 @Crlfs drinnen sind, die in der kopierten txt nicht sind da ich die nicht mit kopiere.

    Habe gerade etwas hinzugefügt

    Code
    equal_($arrays, $string)

    Damit kannst du wie bei Iniread den string davor oder dahinter abfragen.

    Es wird dir ein array zurück geben falls der wert öffter vor kommt damit du das dann gleich trennen kannst.

    Als tipp :

    Code
    $arrays = _iniCyp($file, $CALG_AES_256, '', 5, 1)

    Lass dir dein Array mit der Funktion erstellen den letzten Parameter so einstellen das er nur diese Sektion durchsucht die du auch anwählen willst und dann bei equal_ das array eintragen, das grad erstellt wurde, danach den string dann

    wird nur die eine Sektion nach dem String gesucht und nicht in der ganzen ini durchsucht.


    AutoIt
    #include <String.au3>
    #include <Array.au3>
    #include <MsgBoxConstants.au3>
    #include <Crypt.au3>
    
    ;~ $aArray = _iniCyp('da.ini', $CALG_AES_256, '', 0, 0)
    
    $datei = 'da.ini'
    
    example($datei)
    
    
    
    example2(datei)
    
    Func example($file)
    
        $arrays = _iniCyp($file, $CALG_AES_256, '', 5, 0)
        _ArrayDisplay($arrays, '1 - 0')
        $arrays = _iniCyp($file, $CALG_AES_256, '', 2, 0)
        _ArrayDisplay($arrays, '2 - 0')
        $arrays = _iniCyp($file, $CALG_AES_256, '', 3, 0)
        _ArrayDisplay($arrays, '3 - 0')
        $arrays = _iniCyp($file, $CALG_AES_256, '', 4, 0)
        _ArrayDisplay($arrays, '4 - 0')
        $arrays = _iniCyp($file, $CALG_AES_256, '', 5, 0)
        _ArrayDisplay($arrays, '5 - 0')
        $arrays = _iniCyp($file, $CALG_AES_256, '', 5, 1)
        _ArrayDisplay($arrays, '5 - 0')
        $arrays = _iniCyp($file, $CALG_AES_256, '', 5, 2)
        _ArrayDisplay($arrays, '5 - 0')
        $arrays = _iniCyp($file, $CALG_AES_256, '', 5, 3)
        _ArrayDisplay($arrays, '5 - 0')
        $arrays = _iniCyp($file, $CALG_AES_256, '', 5, 4)
    
        _ArrayDisplay($arrays, '5 - 0')
        $arrays = _iniCyp($file, $CALG_AES_256, '', 6, 0)
        _ArrayDisplay($arrays, '6 - 0')
        $arrays = _iniCyp($file, $CALG_AES_256, '', 6, 1)
        _ArrayDisplay($arrays, '6 - 1')
        $arrays = _iniCyp($file, $CALG_AES_256, '', 6, 2)
        _ArrayDisplay($arrays, '6 - 2')
        $arrays = _iniCyp($file, $CALG_AES_256, '', 6, 3)
        _ArrayDisplay($arrays, '6 - 3')
        $arrays = _iniCyp($file, $CALG_AES_256, '', 6, 4)
        _ArrayDisplay($arrays, '6')
        $arrays = _iniCyp($file, $CALG_AES_256, '', 6, 5)
        _ArrayDisplay($arrays, '5')
    EndFunc   ;==>example
    Func example2($file)
        Local $aGesucht[0]
        $arrays = _iniCyp($file, $CALG_AES_256, '', 5, 1)
        $aGesucht = equal_($arrays, 'test2')
        _ArrayDisplay($aGesucht)
    EndFunc   ;==>example2
    
    Func _iniCyp($file = '', $iAlgID = '', $key = '', $opt = '', $katopt = -1)
        Local $sFile = '', $sSTemp = '', $sKAT = '', $sTemp = '', $sString = '', $aCONs[0], $aSETT[0], $aKATs[0], $list[0], $aSec[0]
        Local $o = 1, $squal = ''
        If FileExists($file) = 1 Then
            $hFile = FileOpen($file)
            $rFile = FileRead($hFile)
            FileClose($hFile)
            $DFile = _Crypt_DecryptData($rFile, $key, $iAlgID)
            If @error Then
                ConsoleWrite(@error & ' unverschlüsselte Datei geöffnet' & @CRLF)
                $sFile = $rFile
            ElseIf Not @error Then
                $sFile = BinaryToString($DFile, 4)
                ConsoleWrite('verschlüsselte Datei geöffnet' & @CRLF)
            EndIf
            $aKATs = _StringBetween($sFile, '[', ']')
            $aSTemp = StringSplit($sFile, @CR)
    
            If $katopt = -1 Then
                ConsoleWrite('$katopt - keine option gewählt.' & @CRLF)
            ElseIf $katopt >= 0 Then
                If $katopt > UBound($aKATs) - 1 Then
                    $sub = UBound($aKATs) - 1 - $katopt
                    ConsoleWrite('Max:' & UBound($aKATs) - 1 & ', USE:' & $katopt & '|' & $sub & ' sind zu viel.' & @CRLF)
    
                ElseIf $katopt <= UBound($aKATs) Then
                    $sString = '[' & $aKATs[$katopt] & ']'
                    For $i = 0 To UBound($aSTemp) - 1 Step 1
                        $sTemp = $aSTemp[$i]
                        If StringInStr($sTemp, $sString) <> 0 Then
                            _ArrayAdd($aSec, $sTemp)
                            For $o = $i + 1 To UBound($aSTemp) - 1 Step 1
                                $sSt = $aSTemp[$o]
                                ConsoleWrite($aSTemp[$o] & ' ->' & StringInStr($sTemp, '[') & @CRLF)
                                If StringInStr($sSt, '[') <> 0 Then ExitLoop
                                _ArrayAdd($aSec, $aSTemp[$o])
                            Next
                        EndIf
                    Next
                EndIf
            EndIf
            $aTemp = _DeleteArrayElementWithStringInstr($aSTemp, '[')
            For $i = 1 To UBound($aTemp) - 1 Step 1
                $sTemp = $aTemp[$i]
                $SplittTemp = StringSplit($sTemp, '=')
                For $k = 0 To UBound($SplittTemp) - 1 Step 1
                    $sTemp2 = $SplittTemp[$k]
                    If $k = 1 Then _ArrayAdd($aCONs, $sTemp2)
                    If $k = 2 Then _ArrayAdd($aSETT, $sTemp2)
                Next
            Next
            If UBound($aCONs) = UBound($aSETT) Then
                $list = element_list($aCONs, $aSETT, '', 2)
            ElseIf UBound($aCONs) <> UBound($aSETT) Then
                Return SetError(-1)
            EndIf
        EndIf
        If $opt = 1 Then
            Return $aKATs
        EndIf
        If $opt = 2 Then
            Return $aCONs
        EndIf
        If $opt = 3 Then
            Return $aSETT
        EndIf
        If $opt = 4 Then
            Return $list
        EndIf
        If $opt = 5 Then
            Return $aSec
        EndIf
        If $opt = 6 Then
            Local $arraya[0], $arrayb[0]
            For $i = 1 To UBound($aSec) - 1 Step 1
                $aStringsplitt = StringSplit($aSec[$i], '=', 2)
                If UBound($aStringsplitt) = 2 Then
                    _ArrayAdd($arraya, $aStringsplitt[0])
                    _ArrayAdd($arrayb, $aStringsplitt[1])
                EndIf
            Next
            $list = element_list($arraya, $arrayb, '', 2)
            Return $list
        EndIf
    EndFunc   ;==>_iniCyp
    
    
    Func equal_($aArray_, $string)
        Local $sString, $sTemp, $aSplitt[0], $aRetun[0]
        For $i = 0 To UBound($aArray_) - 1 Step 1
            $sString = $aArray_[$i]
            If StringInStr($sString, $string) <> 0 Then
                $aSplitt = StringSplit($sString, '=', 2)
                For $o = 0 To UBound($aSplitt) - 1 Step 1
                    $sTemp = $aSplitt[$o]
                    If StringInStr($sTemp, $string) = 0 Then
                        _ArrayAdd($aRetun, $sTemp)
                    EndIf
                Next
            EndIf
        Next
        Return $aRetun
    EndFunc   ;==>equal_
    
    Func _DeleteArrayElementWithStringInstr($_Array, $_String)
        Local $_Item
        For $_Element In $_Array
            If StringInStr($_Element, $_String) <> 0 Then
                _ArrayDelete($_Array, $_Item)
            Else
                $_Item += 1
            EndIf
        Next
        Return ($_Array)
    EndFunc   ;==>_DeleteArrayElementWithStringInstr
    
    Func element_list($array, $aArray01, $aArray02, $iO, $aArray03 = '')
        Local $iCount = UBound($array)
        Local $a2Dresult[$iCount][$iO]
        For $i = 0 To $iCount - 1 Step 1
            $a2Dresult[$i][0] = $array[$i]
            $a2Dresult[$i][1] = $aArray01[$i]
            If IsArray($aArray02) Then
                $a2Dresult[$i][2] = $aArray02[$i]
            EndIf
            If IsArray($aArray03) Then
                $a2Dresult[$i][3] = $aArray03[$i]
            EndIf
        Next
        Return $a2Dresult
    EndFunc   ;==>element_list
    Alles anzeigen

    beispiel ini :

    Code
    [Common]
    5543=N
    5508=
    5509=D:\\vdServerArchive\vdog client setup
    5521=D:\\vdServerArchive\vdog agent setup
    5501=de
    5539=Y
    5502=Y
    5601=Y
    [config_smtp_normalmail_]
    SMTPNON_SERVER_=test2
    SMTPNON_ADRESS_=test2
    SMTPNON_USER_=test2
    SMTPNON_PASS_=test2
    SMTPNON_PORT_=test2
    SMTPNON_SSL_=test2
    SMTPNON_EMAIL_TO=test2
    SMTPNON_IMPORTANCE_=test2
    [config_mysql_]
    USER_MYSQL_NICKNAME_=test1
    USER_MYSQL_PASS_=test
    USER_MYSQL_IP_=....
    USER_MYSQL_PORT_=....
    Alles anzeigen
  • ExtMsgBox anzeigen als "Splashscreen"

    • MojoeB
    • 21. Oktober 2022 um 16:52

    hipfzwirgel

    warum schreibst du dann nicht was die Funktion tut du zeigst in deinem Beispiel nur wie du es die Funktion aufrufst aber nicht wie die Funktion aussieht.

    AutoIt3/ExtMsgBox.au3 at master · dbkaynor/AutoIt3 · GitHub <- ist das diese die du meinst vielleicht hier drin ?

    oder zeig doch einfach mal die Funktion. Dann kann dir bestimmt besser geholfen werden von den usern .

    @Musashi warst schneller ^^

  • Programm Maussteuerung

    • MojoeB
    • 15. September 2022 um 16:04

    Bitnugger

    das stimmt. aber die eigene mause sollte man bei mousemove dennoch nicht bedient werden sonst kommt es zu fehleingaben auch bei 0 kann das passieren.
    Der Mauszeiger wird kurz unsichtbar und 'telepotiert' sich augenscheinlich, aber in Wirklichkeit bewegt er sich.(glaub ich zumindest :))
    Dann muss man mit BlockInput arbeiten. Mir ist nicht bekannt das mausklicks mit Programmen die im hide(modus/hintergrund) laufen funktionieren, so hab ich es zu mindestens verstanden.(ich glaub ich habe da zu viel reininterpretiert ^^)

  • Programm Maussteuerung

    • MojoeB
    • 15. September 2022 um 13:34

    nene

    MouseClick ( "button" [, x, y [, clicks = 1 [, speed = 10]]] )

    button : links oder rechts (left or right)

    dann die Koords

    Dann wie viele klicks

    dann der speed.

    Mouseclick('right', 83, 10, 1, 0)


    edit:

    ältere Applikationen kann man oft, aber leider nicht immer mit dem AutoIt Window Info auslesen, wenn du unter :

    >>>> Control <<<<

    alles auslesen kannst dann könntest du sofort mit Controlclick arbeiten, das ist genauer und unabhängig von der Größe des Fensters.


    Zitat

    Apropos der von dir genanten UDF, was heisst denn:

    you can automate all applications/programs that support ui automation and/or accesibility api from microsoft

    Zitat


    ich glaube damit kannst du sowas auch machen aber frag mich nicht wie genau das funktioniert ^^.

    :) ich weiß es nicht.

  • Programm Maussteuerung

    • MojoeB
    • 15. September 2022 um 11:58

    ich habe früher mal öfter damit gearbeitet.

    versuche es mal mit MouseClick() statt move, und hier den Speed auf 1 oder 0 stellen.

  • Programm Maussteuerung

    • MojoeB
    • 15. September 2022 um 11:14

    soweit ich weiß würde das nur mit Controlclick gehen, oder mit bestimmten udfs:

    (IUIAutomation MS framework automate chrome, FF, IE, .... - AutoIt Example Scripts - AutoIt Forums (autoitscript.com))
    ich glaube damit kannst du sowas auch machen aber frag mich nicht wie genau das funktioniert ^^.

  • Programm Maussteuerung

    • MojoeB
    • 14. September 2022 um 16:39

    meinst du Maus Klicks im Programm ?
    Wenn du das meinst und die Button nicht ansteuern kannst mit Controlclick.
    Aktiviere die Option :

    AutoIt
    Opt("MouseCoordMode", 2);2=client


    Dann kannst du versuchen dir das Fenster hochzuholen:

    AutoIt
    Opt("MouseCoordMode", 2)
    $pid=run('notepad.exe')
    $hWnd = WinWait("[CLASS:Notepad]", "", 10)
    MouseMove(274, 83, 10)

    Nun wirst du sehen das der Maus Cursor immer nur im innerhalb des $hWnd rumschwirrt solange du die Koordinaten nicht außerhalb der Größe des Fensters setzt.

    Vielleicht kannst du ja auch noch auf eine gewünschte Größe dein Programmfenster anpassen lassen.

    Damit du dann auch immer die gleichen abstände hast zu den Buttons im Programm jedes Programm macht ja gerne mal komische Sachen wo sich dinge verschieben etc.
    bei einem Starren Design geht das natürlich einfacher.

    Mit dem AutoIt Window Info kannst du den Cursor setzen und dann diese ControlClick Coords: dafür nehmen. Dann solltest du immer die richtigen Positionen der Buttons treffen.

    Aber vielleicht meinst du auch was ganz anderes ;D

  • Editbox/_GUICtrlRichEdit_Create keine Sondertasten möglich

    • MojoeB
    • 13. September 2022 um 12:16

    oke hat sich erledigt :)

    habe anstatt meheren While´s nun einfach

    func

    Switch
    ....
    EndSwitch

    endfunc

    und diese dann in die Hauptschleife eingebaut.
    falls wieder so etwas auftritt melde mich nochmals aber bisher ruhig. :)

    erstmal auf erledigt setzten.

  • Editbox/_GUICtrlRichEdit_Create keine Sondertasten möglich

    • MojoeB
    • 31. August 2022 um 15:22

    @hallo Bugfix,

    Das Design ist nicht das Problem, wie du sieht funktioniert mein beispiel.... warum auch immer?

    Aber du hast recht fürs erste sieht das Chaotische aus, aber mehrere einzelne Test zeigen mir das dies für mich funktioniert.

    Das meiste ist in der 1ten Schleife.

    Er Unterbricht nur die schleife 1 erstellt dann eine neue schleife, und löscht diese auch wieder nachdem das Fenster geschlossen wurde.
    Das habe ich im Grunde nur gemacht weil ich eine Installation Routine mit reinprogrammiert habe wo man sich alle Parameter fürs Programm zuweisen lassen kann wenn man nicht die von mir vorgegeben

    Standardwerte nutzen möchte.
    Im Test hat das sehr gut und einfach funktioniert.

    Deshalb dachte ich es wäre eine gute Idee so weiter mit andere Schleifen einbauen zu können wenn es benötigt wird und es ist meines Erachtens auch etwas leichter zu verstehen. ist aber Ansichtssache.

    Es nervt mit halt warum ist hier in meinem Beispiel kein Fehler drin, obwohl es genau gleich aufgebaut ist wie in meinem Hauptscript.

    Ich habe in gui 1 ein IE Einbindung. liegt es vielleicht daran? Das ich meine Editbox in gui 2 nicht richtig mit der Tastatur bearbeiten kann?

    Aber dafür Disable ich ja gui 1 ~_~


  • Editbox/_GUICtrlRichEdit_Create keine Sondertasten möglich

    • MojoeB
    • 31. August 2022 um 13:21

    ich bin ein wenig verwirrt, vielleicht könnt Ihr mir helfen.

    Es geht darum, ich schreibe ein Skript mit mehreren Schaltflächen/While´s/GUIS etc.

    Es geht darum eine Haupt While schleife zu benutzen.
    Und diese zu unterbrechen, um weitere schleifen ausführen zu können.

    Dabei habe ich festgestellt es gibt Problem mit der Editbox (auch mit _GUICtrlRichEdit_Create) getestet ohne Erfolg.

    Ablauf :

    1. Script Starten

    2. Menü>GUI 2> aufrufen dabei 1 While stoppen 2 While beginnen

    3. GUI 1 Disablen & verstecken

    4. GUI 2 Editbox ausfüllen & bearbeiten.

    Ich kann zwar die Editbox auswählen und etwas rein schreiben, aber ich kann kein Backspace/Tab/entf (Sondertasten) auslösen, bis auf die Pfeiltasten für links/pfeiltasterunter und rechts/pfeiltastehoch.
    Ich habe versucht den Fehler nachzustellen.

    Unten ist ein Beispielscript, leider tritt dort der Fehler nicht auf.

    Ich bin etwas ratlos, google zeigt mir leider nicht das was ich versuche zu finden.

    Weiß jemand warum sowas passiert und wie ich diesen Fehler mit dem Control-/Editbox/ beheben kann?

    Im Grunde ist das beispiel genau so von der Logik aufgebaut wie mein Hauptscript.
    Wieso kann ich in meinem beispielscript. Gui2 & Editbox2 lassen sich beschreiben und edititeren wie ich möchte, dort gibt es keinen Fehler oO?

    C
    #include <StaticConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <GuiButton.au3>
    #include <EditConstants.au3>
    #include <GuiMenu.au3>
    #include <WinAPIShellEx.au3>
    #include <array.au3>
    
    Global $gWhile = True
    Global $start = gui_()
    Global $aMenu[3] = [$start[1][0], $start[2][0]]
    Global $aEdit[2] = [$start[3][0]]
    GUISetState(@SW_SHOW, $start[0][0])
    
    While $gWhile
        $aMsg = GUIGetMsg($GUI_EVENT_ARRAY)
        Switch $aMsg[1]
            Case $start[0][0]
                Switch $aMsg[0]
                    Case $GUI_EVENT_CLOSE
                        Exit
                    Case $aMenu[0]
                        ;nichts
                    Case $aMenu[1]
                        ;öffne While 2 + GUI
                        GUISetState(@SW_hide, $start[0][0])
                        GUISetState(@SW_DISABLE, $start[0][0])
                        $gWhile=z_While($gWhile)
    
                    Case $aEdit[0]
                EndSwitch
        EndSwitch
        If Not $gWhile = True Then ContinueLoop
    WEnd
    ;GUIS___________________________________________________________________________
    Func gui_()
        Local $array[0], $aread[0]
        _ArrayAdd($array, GUICreate("example_1", 545, 460, -1, -1, -1, -1))
        _ArrayAdd($aread, GUICtrlRead($array[0], 1))
        _ArrayAdd($array, GUICtrlCreateMenu("1"))
        _ArrayAdd($aread, GUICtrlRead($array[1], 1))
        _ArrayAdd($array, GUICtrlCreateMenuItem("2", $array[1], -1, 0))
        _ArrayAdd($aread, GUICtrlRead($array[2], 1))
        _ArrayAdd($array, GUICtrlCreateEdit("example1", 20, 162, 500, 167, -1, -1))
        _ArrayAdd($aread, GUICtrlRead($array[3], 1))
        Local $aArray[0]
        $aArray = element_list($array, $aread, '', 2)
        _ArrayDisplay($aArray, 'GUIarray')
        Return $aArray
    EndFunc   ;==>gui_
    Func gui2()
        Local $array[0], $aread[0]
        _ArrayAdd($array, GUICreate("example_2", 545, 460, -1, -1, -1, -1))
        _ArrayAdd($aread, GUICtrlRead($array[0], 1))
        _ArrayAdd($array, GUICtrlCreateEdit("example2", 20, 162, 500, 167, -1, -1))
        _ArrayAdd($aread, GUICtrlRead($array[1], 1))
    
        Local $aArray[0]
        $aArray = element_list($array, $aread, '', 2)
        _ArrayDisplay($aArray, 'GUIarray')
        Return $aArray
    EndFunc   ;==>gui2
    ;GUIS___________________________________________________________________________
    
    ;ExtraWhile______________________________________________________________________
    Func z_While($sSwitch)
        Local $switch = True
    
        Local $gui_ = gui2()
        Local $aEdit[] = [$gui_[1][0]]
    GUISetState(@SW_SHOW, $gui_[0][0])
    
        While $switch = True
            $aMsg = GUIGetMsg($GUI_EVENT_ARRAY)
            Switch $aMsg[1]
                Case $gui_[0][0]
                    Switch $aMsg[0]
                        Case $GUI_EVENT_CLOSE
                            GUISetState(@SW_ENABLE, $start[0][0])
                            GUISetState(@SW_SHOW, $start[0][0])
    
                            GUIDelete($gui_[0][0])
                            Return _switch_while($sSwitch, $switch)
                        Case $aEdit[0]
                    EndSwitch
            EndSwitch
            If Not $switch = True Then ContinueLoop
        WEnd
    EndFunc   ;==>z_While
    ;ExtraWhile______________________________________________________________________
    
    ;funktionen______________________________________________________________________
    Func _switch_while($lswitch, $gswitch)
        $gswitch = True
        $lswitch = False
        Return $gswitch
    EndFunc   ;==>_switch_while
    Func element_list($array, $aArray01, $aArray02, $iO)
        Local $iCount = UBound($array)
        Local $a2Dresult[$iCount][$iO]
        For $i = 0 To $iCount - 1 Step 1
            $a2Dresult[$i][0] = $array[$i]
            $a2Dresult[$i][1] = $aArray01[$i]
            If IsArray($aArray02) Then
                $a2Dresult[$i][2] = $aArray02[$i]
            EndIf
        Next
        Return $a2Dresult
    EndFunc   ;==>element_list
    ;funktionen______________________________________________________________________
    Alles anzeigen


    gruß mojoe

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™