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. autoBert

Beiträge von autoBert

  • GUI reagiert nicht auf Buttons evt. wegen Schleife oder Sleep?

    • autoBert
    • 20. Februar 2020 um 16:31

    Die Adlib-Lösung funktioniert natürlich auch im OnEvent-Modus. Hier aber eine andere Lösung:

    C
    ;*****************************************
    ;ScreenHunter.au3 by DS
    ;Erstellt mit ISN AutoIt Studio v. 1.10
    ;*****************************************
    #include <StaticConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <GuiButton.au3>
    #include <ButtonConstants.au3>
    #include <ScreenCapture.au3>
    #include <MsgBoxConstants.au3>
    
    ; Wechsle in den OnEvent Modus
    Opt("GUIOnEventMode", 1)
    
    Global $bScrShot, $hTime
    
    ; Erstelle GUI
    $ScreenHunter = GUICreate("ScreenHunter", 320, 500, -1, -1, -1, -1)
    GUISetBkColor(0xFFFFFF, $ScreenHunter)
    GUISetState(@SW_SHOW, $ScreenHunter)
    
    ; Event zum schließen der GUI über X
    GUISetOnEvent($GUI_EVENT_CLOSE, "ProgrammEnde")
    
    ; Logo
    Local $idLogo = GUICtrlCreatePic("Images\logo.jpg", 10, 10, 297, 81)
    
    ; Button mit Event für den Test-Screenshot
    $BtnScreenshotTest = GUICtrlCreateButton("Screenshot Test", 10, 101, 300, 31, -1, -1)
    GUICtrlSetOnEvent($BtnScreenshotTest, "HuntingTest")
    
    ; Button mit Event für die Scrrenshot-Schleife
    $BtnProgrammStarten = GUICtrlCreateButton("Programm starten", 10, 141, 300, 31, -1, -1)
    GUICtrlSetOnEvent($BtnProgrammStarten, "Hunting")
    
    ; Statusgrafiken grün=Programm läuft rot=Programm steht
    Local $idRun = GUICtrlCreatePic("Images\run.jpg", 10, 181, 300, 40)
    GUICtrlSetState($idRun, $GUI_HIDE)
    Local $idStop = GUICtrlCreatePic("Images\stop.jpg", 10, 181, 300, 40)
    
    ; Text unten in der GUI
    GUICtrlCreateLabel("ScreenHunter v1.0", 10, 423, 300, 15, $SS_CENTER, -1)
    GUICtrlSetBkColor(-1, "-2")
    
    ; Endlosschleife um die GUI sichtbar zu machen
    While 1
        Sleep(100)
        If $bScrShot And TimerDiff($hTime) >= (5 * 60 * 1000) Then ScrShot()    
        ;es sollen ScreenShots gemacht werden UND die Zeit ist erreicht
    WEnd
    
    Func ScrShot()
        Local $hBmp
        ConsoleWrite('SC: ' & @MIN & ':' & @SEC & @CRLF)
        ; Erstellt Screenshot - kompletter Bildschirm
        $hBmp = _ScreenCapture_Capture("")
    
        ; Speichert das Bild
        _ScreenCapture_SaveImage(@MyDocumentsDir & "\screenshot.jpg", $hBmp)
        $hTime = TimerInit()    ;Timer initialisieren
    EndFunc   ;==>ScrShot
    
    ; Funktion HuntingTest - Erstellt Screenshot, speichert ihn ab und öffnet ihn
    Func HuntingTest()
        MsgBox($MB_SYSTEMMODAL, "Test-Screenshot...", "Das Programm speichert und öffnet einmalig einen Test-Screenshot")
        Local $hBmp
    
        ; Erstellt Screenshot - kompletter Bildschirm
        $hBmp = _ScreenCapture_Capture("")
    
        ; Speichert das Bild
        _ScreenCapture_SaveImage(@MyDocumentsDir & "\screenshot.jpg", $hBmp)
    
        ; Öffnet das Bild
        ShellExecute(@MyDocumentsDir & "\screenshot.jpg")
    EndFunc   ;==>HuntingTest
    
    ; Funktion Hunting - Erstellt alle 5 Minuten einen Screenshot und speichert ihn ab
    Func Hunting()
        MsgBox($MB_SYSTEMMODAL, "Programm wird gestartet...", "Das Programm wird gestartet und speichert alle 5 Minuten einen Screenshot ab")
        $bScrShot = True
        GUICtrlSetState($BtnProgrammStarten, $GUI_DISABLE)
        GUICtrlSetState($BtnScreenshotTest, $GUI_DISABLE)
        GUICtrlSetState($idStop, $GUI_HIDE)
        GUICtrlSetState($idRun, $GUI_SHOW)
        ScrShot()
    EndFunc   ;==>Hunting
    
    ; Funktion ProgrammEnde - Beendet das Programm
    Func ProgrammEnde()
        If @GUI_WinHandle = $ScreenHunter Then
            MsgBox($MB_SYSTEMMODAL, "Programm wird beendet...", "Das Programm wird beendet und es werden keine Screenshots mehr abgespeichert")
            Exit
        EndIf
    EndFunc   ;==>ProgrammEnde
    Alles anzeigen
  • GUI reagiert nicht auf Buttons evt. wegen Schleife oder Sleep?

    • autoBert
    • 20. Februar 2020 um 14:24
    Zitat von alpines

    Ich rate dir dringend zum OnEventModus, dann hast du das Problem nicht mehr.

    Der OnEventModus ist auch nicht die einzige Lösung, denn auch hier:

    Zitat von alpines

    Solltest aber aufpassen, dass du dabei nicht eine Funktion mehrfach betrittst und in While-Schleifen stecken bleibst.

    wie du ja schon selbst anmerkst.

    elysium: Das Problem kann man auf verschiedenste Arten lösen. Die einfachste dürfte Adlibregister sein, dazu muss nur die

    Code: Func Hunting
    Func Hunting()
        AdlibUnRegister('Hunting')
            ; Erstellt Screenshot - kompletter Bildschirm
            $hBmp = _ScreenCapture_Capture("")
    
            ; Speichert das Bild
            _ScreenCapture_SaveImage(@MyDocumentsDir & "\screenshot.jpg", $hBmp)
        AdlibRegister('Hunting', 5*60*1000)
    EndFunc   ;==>EndeHunting


    angepasst werden.

    mfg (auto-)Bert

  • Flash-Test

    • autoBert
    • 15. Februar 2020 um 12:07

    Hallo Oscar,

    schön geworden. Man bekommt mehr Infos als bei h2testw. Dieses mehr an Infos und die Tatsache, daß dein Programm grob abweichende Durchschnittswerte ermittelt, verwirren mich. Eine nagelneue 2TB SSD hat lt. deinem Programm schlechtere Lese- als Schreibwerte. Mit den Daten von h2testw beurteile ich die SSD als ok, mit dem mehr an Daten bekomme ich Zweifel.

    2020_02_15__03_53_39.png

    Dateien

    2T Test.txt.txt 236 Byte – 420 Downloads 2020_02_15__03_53_39.ftr.txt 965,5 kB – 462 Downloads
  • Item ID eines TreeView Items nach Suche per _GUICtrlTreeView_GetNext

    • autoBert
    • 12. Februar 2020 um 16:07
    Zitat von r_eisner

    Ich hinterlege in TreeView Items, die per _GUICtrlTreeView_AddChild generiert werden, per _GUICtrlTreeView_SetItemParam zusätzliche Textinformation.

    In einem späteren Aufruf durchlaufe ich alle TreeView Items und möchte für die checked Items diesen Text ausgeben.

    ItemParams können keinen Text aufnehmen nur numerische Ganzzahl-Werte.

    mfg (auto-)Bert

  • Kann mein eigenes Programm nicht löschen - von Avira keine Unterstützung...

    • autoBert
    • 2. Februar 2020 um 17:31

    Mit http://lockhunter habe ich bis jetzt noch jedes File gelöscht bekommen, spätestens beim nächsten Neustart.

  • Text ersetzen in RTF mit korrekten Umlauten

    • autoBert
    • 31. Januar 2020 um 11:40
    Zitat von Schokolade

    Was genau meinst du mit Vorlage laden?

    Deine orginale RTF Datei.

    Zitat von Schokolade

    Und _GUICtrlRichEdit_ReplaceText hatte ich auch schon gefunden nur weiß nicht wie ich das nutzen soll, da gibts ja keine Parameter für "zu ersetzender Text" und "Ersatz Text"..

    ja, das müsstest du dir mit Hilfe von https://www.autoitscript.com/autoit3/docs/l…it_FindText.htm erst selbst basteln.

    dann wäre noch

    Zitat von autoBert

    Ein anderer Weg speichere deine Platzhalter im Richtextformat.

    oder benötigst du deine Platzhalter im Textformat für andere Aufgaben?

    mfg (auto-)Bert

  • Text ersetzen in RTF mit korrekten Umlauten

    • autoBert
    • 30. Januar 2020 um 16:15

    Mach ein kleines Skript in das du

    • Die Vorlage lädst
    • _GUICtrlRichEdit_ReplaceText alle Platzhalter ersetzt
    • Die Datei unter neuem Namen abspeicherst

    Ein anderer Weg speichere deine Platzhalter im Richtextformat.

    mfg (Auto-)Bert

  • ControlClick Problem

    • autoBert
    • 27. Januar 2020 um 12:18

    Hallo Windi,

    füge die dazu benötigte(n) UDF(s) ein. Diese erfährst du aus der Hilfe (F1 bei Cursor über der Funktion), z.B.:

    Zitat

    Function _WinAPI_EnumChildWindows

    #include <WinAPISysWin.au3>

    sollte die WinAPISysWin.au3 nicht ausreichen musst du dies für alle dann noch angemeckerten undefined function(s) wiederholen,

    mfg (auto)Bert

  • Kreisausschnitt mittels _GDIPlus_ und PixelCheckSum

    • autoBert
    • 20. Januar 2020 um 12:02
    Zitat von vcopsmtl

    _Gui_Plus_ Funktionen

    Die _GUI_Plus_ Funktionen sind mir gänzlich unbekannt. Solltest du aber Funktionen der GDIPlus.au3 meinen, solltest du deinen Post dahin gehend anpassen,

    mfg (auto-)Bert

  • Events bei "Tab"?

    • autoBert
    • 13. Januar 2020 um 13:55

    Hallo PSblnkd,

    wie du an folgendem Beispiel:

    Code
    #include <GUIConstantsEx.au3>
    
    Global $idTab, $idCboNmames
    
    Example()
    
    Func Example()
        Opt("GUIOnEventMode", 1) ;0=disabled, 1=OnEvent mode enabled
    
        GUICreate("My GUI Tab", 250, 150); will create a dialog box that when displayed is centered
        GUISetOnEvent($GUI_EVENT_CLOSE, "MyExit")
    
        GUISetBkColor(0x00E0FFFF)
        GUISetFont(9, 300)
    
        $idTab = GUICtrlCreateTab(10, 10, 200, 100)
        GUICtrlSetOnEvent(-1, "WichTab")
    
        GUICtrlCreateTabItem("tab0")
    
        GUICtrlCreateLabel("label0", 30, 80, 50, 20)
        GUICtrlCreateButton("OK0", 20, 50, 50, 20)
        GUICtrlCreateInput("default", 80, 50, 70, 20)
    
        GUICtrlCreateTabItem("tab----1")
        GUICtrlCreateLabel("label1", 30, 80, 50, 20)
        $idCboNmames = GUICtrlCreateCombo("", 20, 50, 60, 120)
        GUICtrlSetData(-1, "Trids|CyberSlug|Larry|Jon|Tylo|guinness", "Jon"); default Jon
        GUICtrlCreateButton("OK1", 80, 50, 50, 20)
    
        GUICtrlCreateTabItem("tab2")
        GUICtrlSetOnEvent(-1, "isItSecondTab")
        GUICtrlSetState(-1, $GUI_SHOW); will be display first
        GUICtrlCreateLabel("label2", 30, 80, 50, 20)
        GUICtrlCreateButton("OK2", 140, 50, 50)
    
        GUICtrlCreateTabItem(""); end tabitem definition
    
        GUICtrlCreateLabel("Click on tab and see the title", 20, 130, 250, 20)
    
        GUISetState(@SW_SHOW)
    
        While 1
            Sleep(10000)
        WEnd
    EndFunc   ;==>Example
    
    Func MyExit()
        Exit
    EndFunc
    
    Func wichTab()
        Local $iTab =GUICtrlRead($idTab)
        WinSetTitle($hGui,'', 'Tab: ' & $iTab & ' is active')
        Switch $iTab
            Case 1
                GUICtrlSetData($idCboNmames, "guinness")
            case Else
                ;do nnothing
        EndSwitch
    
    EndFunc
    
    Func isItSecondTab()
        MsgBox(64, 'TabItemEvent', 'Tab2 was clicked')
    EndFunc
    Alles anzeigen

    ,anhand von Tab2, siehst reagieren TabItems nicht auf ein zugeordnetes Event. Du musst also dem Tab ein Event zuordnen und mit Hilfe von GuiCtrlRead ermitteln welches TabItem aktiviert wurde. In obigem Beispiel wird guinness in der Combo beim wechseln auf Tab1 ausgewählt.

    mfg (auto-)Bert

  • abgebrochene Downloads fortsetzen

    • autoBert
    • 6. Januar 2020 um 15:58

    Hallo Musashi,

    ich habe es früher für Downloads verwendet. Gerade durch das rekursive Herunterladen ist es sehr nützlich. Nach Umzug und daher größeren Bandbreite nehme ich aber wieder Inetget,

    mfg (auto-)Bert

  • Problem beim vorbelegen eines DateControls

    • autoBert
    • 3. Januar 2020 um 19:53

    Danke, klappt

    mfg (auto-)Bert

  • Problem beim vorbelegen eines DateControls

    • autoBert
    • 3. Januar 2020 um 19:29

    Hallo @all,

    zuerst einmal ein schönes, gutes und vor allem gesundes Neues Jahr.

    Und jetzt zu meinem Problem, wie die Überschrift schon sagt scheitere ich am Vorbelegen eines Datums:

    C
    #include <GUIConstantsEx.au3>
    #include <DateTimeConstants.au3>
    
    $hMain = GUICreate("My GUI get date", 200, 200, 800, 200)
    $date = GUICtrlCreateDate('31/12' & @YEAR, 5, 5, 140, 25, $DTS_UPDOWN)
    GUICtrlSetFont(-1, 12)
    
    $DTM_SETFORMAT_ = 0x1032
    $style = "dd/MM/yyyy"
    GUICtrlSendMsg($date, $DTM_SETFORMAT_, 0, $style)
    
    GUISetState()
    GUICtrlSetData($date, '31/12' & @YEAR)
    Do
    Until GUIGetMsg() = $GUI_EVENT_CLOSE
    
    MsgBox(0, "Datum", GUICtrlRead($date))
    Alles anzeigen

    die Vorlage für obiges Script ist afaik von @Oskar. Ich bin am rätseln warum immer das aktuelle Tagesdatum angezeigt wird. Spätere Änderungen in der GUI sind aber möglich.

    mfg /auto-)Bert

  • GUI mit Tabs verändern

    • autoBert
    • 31. Dezember 2019 um 19:59

    Hallo BigRox,

    im Entwicklerforum gibt es eine UDF dafür: https://www.autoitscript.com/forum/topic/18…comment-1389908.

    Du kannst dir aber auch einmal ine Hilfe das Beispiel zu _GUIScrollBars_Init (besonders die ChildGui links unten) anschauen, vielleicht kommt di dab ja noch eine andere Idee,

    mfg (auto-) Bert

  • Error in Line output in compiled script

    • autoBert
    • 20. August 2019 um 18:59
    Zitat von Lanealine

    Ich suche nach einer Einstellung, dass mir in der Errormsg die Line ausgibt, in der das Script abgestürzt ist. (Line 8324 ist es nicht)

    Du vergisst, dass die Include-Files mit eingebunden werden! Wenn du dein Skript durch den Au3-Stripper (/mo) laufen lässt, kannst du im gestripten File die Zeilen-Nr. mit Code einsehen.

  • Exitloop wird nicht ausgeführt...

    • autoBert
    • 14. August 2019 um 17:34
    Zitat von kyloe

    Was ich immer noch nicht verstehe: Warum geht es mit dem exitloop nach dem else bei den Inputs "EAN" und "Menge", aber nicht bei Charge?

    Nach EAN wird der Cursor mit CotrolClick auf das Chargen-Input gesetzt

    Nach Menge wird die GUI gelöscht und neu aufgebaut, Cursor ist daher in EAN.

    Wenn du nach Charge den Cursor mit ControlClick auf Menge setzt funktioniert auch das.

    mfg (auto)Bert

    Dateien

    scan.au3 2,69 kB – 424 Downloads
  • Exitloop wird nicht ausgeführt...

    • autoBert
    • 14. August 2019 um 16:58

    Bin mir mittlerweile sicher das du Menge so wie Charge (dort macht du es) vorbereiten solltest:

    Code
        ControlClick("Eti-Scan", "", "[CLASS:Edit; INSTANCE:3]")
        ControlSetText("Eti-Scan", "", "[CLASS:Edit; INSTANCE:3]", "")

    Der ControlClick setzt den Eingabecursor, das leere Eingabefeld scheint erwünscht.

    mfg (auto)Bert

  • Exitloop wird nicht ausgeführt...

    • autoBert
    • 14. August 2019 um 16:20

    Dann ändere einmal zu:

    Code
         While 3
            $nMsg = GUIGetMsg()
            Switch $nMsg
                Case $GUI_EVENT_CLOSE
                    Exit
                Case $Input2
                    MsgBox(0, 'Input2', 'Eingabe erfolgt!', 5)
                    $charge = GUICtrlRead($Input2)
                    ; Erste Bedingung
                    Local $aResult = StringRegExp($charge, '[0-9]{6,6}[a-zA-Z]{2}', $STR_REGEXPARRAYMATCH)
                    If @error Then
                        MsgBox(0, 'Input2', 'Eingabe fehlerhaft!')
                        ControlSetText("Eti-Scan", "", "[CLASS:Edit; INSTANCE:2]", "")
                        ControlClick("Eti-Scan", "", "[CLASS:Edit; INSTANCE:2]")
                        ; Zweite Bedingung
                        ;If StringLen($charge)<>8 Then
                        ;ControlSetText("Eti-Scan", "", "[CLASS:Edit; INSTANCE:2]", "")
                        ;ControlClick("Eti-Scan", "", "[CLASS:Edit; INSTANCE:2]")
                    Else
                        ExitLoop
                    EndIf
            EndSwitch
        WEnd 
        MsgBox(0, 'Input2', 'Eingabe richtig = EXITLOOP!!!', 5)
    ;    ControlClick("Eti-Scan", "", "[CLASS:Edit; INSTANCE:3]")
    Alles anzeigen

    Außerdem noch die beiden aderen sleeps etfernen, da unnötig.

    Falls die MsgBox EXITLOOP erscheint sich aber trotzdem nichts tut einfach die letzte Zeile aktivieren. ContrrolClick verwendest du ja auch um in das Input für Charge zu wechseln.

    mfg (auto)Bert

  • Exitloop wird nicht ausgeführt...

    • autoBert
    • 14. August 2019 um 13:36

    Diie Analyse von:

    Code
        While 3
        $nMsg = GUIGetMsg()
        Switch $nMsg
            Case $GUI_EVENT_CLOSE
                Exit
            Case $Input2
                Sleep(500)
                $charge = GuiCtrlRead($Input2)
                ; Erste Bedingung
                Local $aResult = StringRegExp($charge, '[0-9]{6,6}[a-zA-Z]{2}', $STR_REGEXPARRAYMATCH)
                If @error Then
                    ControlSetText("Eti-Scan", "", "[CLASS:Edit; INSTANCE:2]", "")
                    ControlClick("Eti-Scan", "", "[CLASS:Edit; INSTANCE:2]")
                ; Zweite Bedingung
                ;If StringLen($charge)<>8 Then
                    ;ControlSetText("Eti-Scan", "", "[CLASS:Edit; INSTANCE:2]", "")
                    ;ControlClick("Eti-Scan", "", "[CLASS:Edit; INSTANCE:2]")
                Else
                    ExitLoop
                EndIf
        EndSwitch
        WEnd
    Alles anzeigen

    lässt nur 2 Schlüsse zu:

    1. Die Eingabe erfolgt nicht in $Input2 (unwarscheinlich, da es in den beiden anderen Inputs ja klappt)
    2. Der StringRegExp löst einen Error aus (auch unwarscheinlich, da es an 2 anderen Arbeitsplätzen klappt)

    Um das Geheimnis zu lüften kannst du zu Debugzwecken MsgBoxen einbauen:

    Code
        While 3
        $nMsg = GUIGetMsg()
        Switch $nMsg
            Case $GUI_EVENT_CLOSE
                Exit
            Case $Input2
                MsgBox(0, 'Input2', 'Eingabe erfolgt!')
                Sleep(500)
                $charge = GuiCtrlRead($Input2)
                ; Erste Bedingung
                Local $aResult = StringRegExp($charge, '[0-9]{6,6}[a-zA-Z]{2}', $STR_REGEXPARRAYMATCH)
                If @error Then
                    MsgBox(0, 'Input2', 'Eingabe fehlerhaft!')
                    ControlSetText("Eti-Scan", "", "[CLASS:Edit; INSTANCE:2]", "")
                    ControlClick("Eti-Scan", "", "[CLASS:Edit; INSTANCE:2]")
                ; Zweite Bedingung
                ;If StringLen($charge)<>8 Then
                    ;ControlSetText("Eti-Scan", "", "[CLASS:Edit; INSTANCE:2]", "")
                    ;ControlClick("Eti-Scan", "", "[CLASS:Edit; INSTANCE:2]")
                Else
                    MsgBox(0, 'Input2', 'Eingabe richtig = EXITLOOP!!!')
                    ExitLoop
                EndIf
        EndSwitch
        WEnd
    Alles anzeigen

    mfg (auto)Bert

  • Array2D Problem

    • autoBert
    • 26. Juli 2019 um 17:28
    Zitat von wuff100

    vielen Dank, Du hast den Kaffeesatz hervorragend aufgegossen und verstanden! ;)

    Danke, aber da auch

    Zitat von autoiter

    Hauptsache ist aber, dass es sich hier gar nicht um flexible Werte handelt.

    ReDim $aTMP[$imCol][2] ist immer gleich groß. Es ist immer $aTMP[UBound($aArray_Base, 2)][2]. Oder sehe ich das falsch? Wenn nicht, ist es ein Fehler, das in die Schleife zu packen. Es muss nur einmal ausgeführt werden.

    Recht hat kannst du noch zu

    Code
    #include <Array.au3>
    
    
    Local $aArray
    
    
    Local $aArray_Base[3][3] = [["Wert 1", "Wert 2", "Wert 3"], ["10", "20", "30"], ["40", "50", "60"]]
    
    ;_ArrayDisplay($aArray_Base, "2D array")
    
    $imCol = UBound($aArray_Base, 2) ;$UBOUND_Columns
    $imRow = UBound($aArray_Base, 1) ;$UBOUND_ROWS
    
    Dim $aTMP[$imCol][2]
    
    For $iRows = 1 To $imRow - 1 ;
        For $iCols = 0 To $imCol - 1
            $aTMP[$iCols][0] = $aArray_Base[0][$iCols]
            $aTMP[$iCols][1] = $aArray_Base[$iRows][$iCols]
        Next
        _ArrayDisplay($aTMP, $iRows)
    Next
    Alles anzeigen

    abändern, bingt noch einnige milliSekunden.

    mfg (auto)Bert

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™