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

Beiträge von alpines

  • Fenster aktivieren - Schreibweise

    • alpines
    • 22. Juni 2018 um 23:58
    Zitat von AutoMit

    => funktioniert leider nicht, in der Variablen $Fenster_aktuell ist der gleiche Inhalt wie oben in der Klammer

    Hast du das tatsächlich? Lass dir mal $Fenster_aktuell ausgeben und du wirst sehen, dass du im String die Gänsefüßchen hast.

    Die hast du nämlich beim unteren Codesnippet explizit mit einem "" vorne und hinten eingefügt.

  • Forum - AutoIt - ohne gegenleistung - Button fehlt

    • alpines
    • 22. Juni 2018 um 23:57
    Zitat von AutoMit

    Ist das ein Fehler in der Forumssoftware oder bin ich für den Bereich gesperrt?

    Nein, da fehlt tatsächlich der Button um einen neuen Thread zu starten.

    Zitat von AutoMit

    gibt es eine URL, auf der man einsehen kann, wenn das Board offline ist, dass z.B. Wartungsarbeiten etc. laufen?

    Das Forum selbst ist so gut wie nie offline, wenn dann ist es eher die Schuld des Hosters und da können die Admins auch nicht jeder kleinen Downtime hinterherlaufen und alles protokollieren.

  • Pixelsearch / alternative für Bilder

    • alpines
    • 22. Juni 2018 um 22:26
    Zitat von AutoMit

    Magst Du uns das Script als Beispiel zur Verfügung stellen?

    Das war nichts wildes, nur ein kleines Script um das Bild zu laden und die Hauptattraktion waren zwei ineinander geschachtelte For-Schleifen (Bildzeilen und Bildspalten durchgehen) und die Ausführung von _GDIPlus_BitmapGetPixel. Das Skript braucht bei 7000x7000 sowieso einige Minuten bis es durchläuft.

    Den Algorithmus wie man die Flecken findet habe ich nicht gecodet, da habe ich nur Tipps gegeben.

    Und das war nicht mehr als: Bild durchsuchen bis man einen schwarzen Pixel findet und von dort aus alle Nachbarn (und Nachbarn der Nachbarn abklappern) bis keine schwarzen Pixel mehr gefunden werden, dann hat man alle abgespeicherten Pixel als Region für den schwarzen Fleck.

    Da das natürlich sehr zeit- und rechenintensiv ist habe ich noch einen zweiten Vorschlag gemacht: Filter drüberlegen (Kontrast erhöhen, etc) und anschließend das Bild in kleine Rechtecke unterteilen und sie gleichmäßig mit Gauß blurren, dann nimmt man sich aus dem Quadrat einfach einen Pixel raus und schaut ob er über einem bestimmten Schwellwert liegt, und es sich somit um einen schwarzen Fleck handeln kann.

    Letzteres ist natürlich nicht so genau aber das ist ja unterschiedlich von Anwendungsgebiet zu Anwendungsgebiet.

  • Wenn Programm nicht gestartet dann abfrage ob starten oder nicht

    • alpines
    • 19. Juni 2018 um 14:24
    Zitat von Springstil

    Select
    Case $iMsgBoxAnswer = 1 ;Ok

    Case $iMsgBoxAnswer = 2 ;Abbrechen

    case $iMsgBoxAnswer =-1 ;Timeout

    EndSelect
    EndIf
    if $iMsgBoxAnswer = 1 or $iMsgBoxAnswer = -1 then

    Alles anzeigen

    :rofl: Warum überhaupt das Select-Statement?

  • Wenn Programm nicht gestartet dann abfrage ob starten oder nicht

    • alpines
    • 19. Juni 2018 um 13:42
    Zitat von Springstil

    Das habe ich ja durchaus verstanden. Nur weiß ich nicht wie ich ihm vorher sagen soll das er schauen soll ob der Prozess läuft oder nicht. bzw danach handeln. Also wenn er nicht läuft dann die abfrage mit IF und wenn es läuft soll er in 30 sekunden noch mal versuchen.

    Schachtel die If-Abfragen doch einfach ineinander? Wenn der Prozess nicht existiert fragst du in einer anderen If-Abfrage ab welche Antwort die MsgBox zurückgab.

  • Wenn Programm nicht gestartet dann abfrage ob starten oder nicht

    • alpines
    • 19. Juni 2018 um 12:32
    Zitat von Springstil

    Ich denke ich lasse es am besten einfach sein es zu versuchen -.-

    Mit dieser Einstellung kommst du nicht weit, du wirst mit rumprobieren nicht viel bewerkstelligen wenn du die Grundlagen der Sprache nicht beherrscht.

    Du willst den Rückgabewert einer MsgBox abfragen, das machst du mit einer If-Abfrage.

    Wie ist eine If-Abfrage aufgebaut? If <Bedingung> Then <Befehle>

    Wenn du also prüfen willst ob deine MsgBox eine 1 zurückgibt muss das in die Bedingung rein.

  • Wenn Programm nicht gestartet dann abfrage ob starten oder nicht

    • alpines
    • 19. Juni 2018 um 12:25

    Jetzt hast du das Problem, dass du den Fall für Nein bzw. Timeout in der If-Verzweigung nicht berücksichtigst.

    Da steht: Wenn Kilas nicht existiert: Wenn Kilas gestartet werden soll, starte es.

    Deine If-Abfrage generell ist falsch, wieso steht das = 1 hinter dem then?

  • Wenn Programm nicht gestartet dann abfrage ob starten oder nicht

    • alpines
    • 19. Juni 2018 um 12:00

    Das kannst auch mit einer While-Schleife, For-Schleife, Do-Until Schleife oder Switch-Verzweigung lösen.

    Aber die wohl vernünftigste Variante wäre wohl die If-Verzweigung, richtig.

  • Wenn Programm nicht gestartet dann abfrage ob starten oder nicht

    • alpines
    • 19. Juni 2018 um 11:52
    Zitat von Springstil

    verstanden habe muss ich die msgbox mit rückgabewert mit ner If abfrage behandeln. also wenn 1 dann das oder 2 dann das

    Und was die MsgBox bei welchen Flags was zurückgibt habe ich dir bereits schon in der 1. Antwort verlinkt.

  • Wenn Programm nicht gestartet dann abfrage ob starten oder nicht

    • alpines
    • 19. Juni 2018 um 11:30
    Zitat von Springstil

    Und die MSGbox soll auch nur erscheinen wenn Kilas NICHT gestartet ist

    Dann fragst du vor der Anzeige der MsgBox einfach ab ob Kilas schon läuft.

  • Firebird SQL - Problem Belegdatum

    • alpines
    • 18. Juni 2018 um 21:32
    Zitat von BugFix

    Abfrage nach Rechnungen älter als X sind kein Problem - aber wie komme ich an die jüngste?

    Kannst du die Query nicht nach der Spalte sortieren?

  • Wie kann man eine GUI vor der Displayskalierung schützen?

    • alpines
    • 18. Juni 2018 um 17:55
    Zitat von hipfzwirgel

    Bitte entschuldigt meine Dämlichkeit

    Dann bleibt nur noch eines zu tun, den Haken für [erledigt] setzen!

  • Wenn Programm nicht gestartet dann abfrage ob starten oder nicht

    • alpines
    • 18. Juni 2018 um 17:12

    Na gut, ich beiß an.

    Deine Programmstruktur schaut im Moment so aus:

    Code
    endlosschleife:
        existiert kilas?:
            existiert:
                mache nichts
        
            existiert nicht:
                starte kilas
                sleep(1800)
                winactivate
                winwaitactive
                sleep(500)
                controlclick
                sleep(3000)
    Alles anzeigen

    Du willst den selben Zweig ausführen, wie wenn Kilas gerade nicht läuft. Da du die MsgBox nur anzeigen lassen willst wenn Kilas nicht läuft, kannst du es in die Endlosschleife packen.

    Du fragst dann ab ob Ja oder Nein gedrückt wurde oder ob der Timeout eingetreten ist, bei Nein oder Timeout nutzt du Exit um das Skript zu beenden.

    Deine Endlosschleife wird logischerweise dadurch ebenfalls beendet.

    Bei ja machst du einfach nichts, denn er wird dann in der If-Abfrage die du im Moment hast automatisch in den "existiert nicht"-Zweig springen und es von selbst aus starten.

    Die Struktur wäre dann folgende:

    Code
    endlosschleife:
        msgbox abfrage (timeout=30 sekunden):
            ja:
                nichts machen (er springt in "existiert nicht" bei "existiert kilas?", da kilas ja offenbar nicht läuft)
    
            nein/timeout:
                Exit
    
        existiert kilas?:
            existiert:
                mache nichts
        
            existiert nicht:
                starte kilas
                sleep(1800)
                winactivate
                winwaitactive
                sleep(500)
                controlclick
                sleep(3000)
    
        sleep(30000)
    Alles anzeigen

    Das Problem hierbei ist aber, dass du dann alle 30 Sekunden eine MsgBox vor die Nase bekommst mit Ja/Nein/Timeout und er wird auch nur alle 30 Sekunden prüfen ob Kilas gerade läuft, da die MsgBox das Skript blockiert. Soll die MsgBox nur einmal auftauchen oder zu bestimmten Zeiten? Das hast du uns nicht verraten.

  • Wie kann man eine GUI vor der Displayskalierung schützen?

    • alpines
    • 18. Juni 2018 um 17:05

    Skalier doch alle Elemente auf deiner GUI angepasst zur DPI? Dann hast du das Problem nicht.

  • Wenn Programm nicht gestartet dann abfrage ob starten oder nicht

    • alpines
    • 18. Juni 2018 um 16:29
    Zitat von Springstil

    Und zwar wenn der Prozess nicht gestartet ist, soll er eine Abfrage starten mit ja oder nein.

    MsgBox

    Zitat von Springstil

    Jetzt kommt noch das ABER er soll 30 Sekunden warten bei der abfrage.

    MsgBox Parameter timeout.

    Zitat von Springstil

    Wenn dann noch nicht zwischen ja oder nein gewählt wurde soll er automatisch Ja drücken! Ich verstehe aber nicht wie ich das anstellen soll.

    Rückgabewert der MsgBox ist -1 wenn der Timeout überschritten wurde.


    Und los.

  • _Excel_RangeRead

    • alpines
    • 18. Juni 2018 um 13:10

    Indem du die Zeilen alle einzeln ausliest und schaust wann du die erste leere findest, das setzt natürlich voraus, dass zwischendrin keine leeren auftauchen dürfen.

    Sollten trotzdem welche auftauchen ist das auch kein Problem, googlest du nach "excel vba last filled row" dann findest du dutzende Antworten.

  • _Excel_RangeRead

    • alpines
    • 18. Juni 2018 um 12:09

    Lies doch den Bereich aus und schau welche der Zellen leer ist, dann gehst du einfach einen Index nach oben und hast die letzte beschriebene.

  • Finde Fehler nicht...

    • alpines
    • 17. Juni 2018 um 14:58

    Ich sehe grad, du verwendest ja einen anderen GUIGetMsg-Modus und da funktioniert das nicht so ganz trivial.

    Dein ganzer Code generell ist ziemlich schäbig und du hast viele Inkonsistenzen drinne, du solltest diesen mal erst richtig strukturieren.

    Wieso verwendest du überhaupt GUIGetMsg(1)? Du brauchst so zwei Switches, du hättest einfach nur GUIGetMsg() nehmen können wenn du schon auf die Extrainformationen nicht zugreifst.

    Hier mal in deinen Code eingesetzt aber ich würde auf keinen Fall den Code so stehen lassen wie er im Moment ist, wenn du zwei Wochen daran nicht arbeitest blickst du nicht merh durch.

    AutoIt
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <MsgBoxConstants.au3>
    #include <WinAPI.au3>
    #include <WindowsConstants.au3>
    #include <GuiEdit.au3>
    #include <ColorConstants.au3>
    #include <StaticConstants.au3>
    #include <File.au3>
    #include <FileConstants.au3>
    
    
    Global $loop = 5 ;~Anzahl Buttons definieren
    
    ;~ SMS-Vorlagen aus txt Datei in Array einlesen
    Global $FILE[$loop]
    Global $FileOpen[$loop]
    Global $text[$loop]
    Global $idMUSTER[$loop]
    Global $muster[$loop]
    
    For $i = 0 To $loop - 1
       $FILE[$i] = "muster" & $i & ".txt"
       $FileOpen[$i] = FileOpen($FILE[$i])
       $text[$i] = FileRead($FileOpen[$i])
       FileClose($FileOpen[$i])
    Next
    
    ;~ gui1 erstellen
    Global $hGUI1 = GUICreate("SMS Box", 600, 680)
    Global $idVORWAHL = GUICtrlCreateCombo("076", 10, 5, 50, 20)
       GUICtrlSetData(-1, "077|078|079")
    Global $idNR = GUICtrlCreateInput("", 60, 5, 60, 20, $ES_NUMBER)
       GUICtrlSetLimit(-1, 7)
    Global $idTEXT = GUICtrlCreateEdit("", 10, 60, 300, 200, $ES_MULTILINE)
       GUICtrlSetLimit(-1, 800)
    Global $idSENDEN = GUICtrlCreateButton("Senden", 30, 280, 85, 25)
    Global $idENDE = GUICtrlCreateButton("Schliessen", 130, 280, 85, 25)
    Global $idDEL = GUICtrlCreateButton("Löschen", 230, 280, 85, 25)
    Global $idLABEL1 = GUICtrlCreateLabel("<- Nr", 120, 8, 50, 20)
    Global $idCLIPBOARD = GUICtrlCreateButton("Nr. aus Clipboard einfügen", 150, 5, 145, 22)
       GUICtrlSetColor(-1, $COLOR_RED)
    Global $idLABEL6 = GUICtrlCreateLabel("Absender ->", 360, 8, 100, 20)
    Global $idABSENDER = GUICtrlCreateCombo("0442775658", 420, 5, 100, 20)
       GUICtrlSetData(-1, "0442775656")
    Global $idLABEL2 = GUICtrlCreateLabel("0", 163, 40, 30, 20)
       GUICtrlSetColor(-1, $COLOR_RED)
    Global $idLABEL3 = GUICtrlCreateLabel("Anz. Zeichen (min. 5/max. 800):", 10, 40, 152, 20)
    Global $idLABEL4 = GUICtrlCreateLabel("0", 290, 40, 30, 20)
       GUICtrlSetColor(-1, $COLOR_RED)
    Global $idLABEL5 = GUICtrlCreateLabel("Anz. SMS (max. 5):", 190, 40, 100, 20)
    Global $idLABEL6 = GUICtrlCreateLabel("SMS Vorlagen (Hover über Button für Text):", 330,65,220,20)
    GUICtrlCreateGraphic(310,60,290,1,$SS_BLACKRECT)
    
    For $i = 0 To $loop - 1
       $idMUSTER[$i] = GUICtrlCreateButton("Vorlage "& $i+1, 330, 90+($i)*30, 70, 20)
       GUICtrlSetTip(-1, $text[$i])
    Next
    
    For $i = 0 To $loop - 1
       GUICtrlCreateLabel("bearbeiten -->", 410, 93+($i)*30 , 70, 20)
    Next
    
    For $i = 0 To $loop - 1
       $muster[$i] = GUICtrlCreateButton("", 490, 90+($i)*30, 20, 20)
    Next
    
    Global $oIE = ObjCreate("Shell.Explorer.2")
    Global $GUIActiveX = GUICtrlCreateObj($oIE, 10, 330, 580, 285)
    
    ;~ gui2 erstellen
    Global $hGUI2 = GUICreate("Text bearbeiten:", 300, 250)
    Global $text_neu = GUICtrlCreateEdit("", 1, 1, 298, 198, $ES_MULTILINE)
    Global $speichern = GUICtrlCreateButton("Sichern und Schliessen", 50, 210, 200, 25)
    
    GUISetState(@SW_SHOW, $hGUI1)
    GUIRegisterMsg($WM_COMMAND, "_WM_COMMAND")
    ControlFocus("", "", 10)
    
    ;~ Abfrage Nummer, Text, Absenden des SMS
    While 1
       $msg = GUIGetMsg(1)
       Switch $msg[1]
       Case $hGUI1
          Switch $msg[0]
    
          Case $GUI_EVENT_CLOSE, $idENDE
             Exit
    
          Case $idDEL
             GUICtrlSetData($idTEXT, "")
             GUICtrlSetData($idNR, "")
    
          Case $muster[0] To $muster[$loop - 1]
                GUISetState(@SW_SHOW, $hGUI2)
                GUICtrlSetData($text_neu, $text[$msg[0] - $muster[0]])
                Global $idGUI = $msg[0] - $muster[0]
    
              Case $idMUSTER[0] To $idMUSTER[$loop - 1]
                GUICtrlSetData($idTEXT, $text[$msg[0] - $idMUSTER[0]])
    
    ;~       Nummer aus Zwischenablage auslesen, formatieren, eingeben
          Case $idCLIPBOARD
             Local $cbNR = ClipGet()
             If $cbNR = "" Then
                MsgBox($MB_OK, "Kein Inhalt", "Die Zwischenablage ist leer!")
             ElseIf StringIsDigit($cbNR) = 0 Then
                $cb = StringRegExpReplace($cbNR, '\D', '')
                If StringLen($cb) = 10 Then
                   $cbPREFIX = StringLeft($cb, 3)
                   $cbNUMBER = StringRight($cb, 7)
    
                   If StringRegExp($cbPREFIX, "07[6789]") = 0 Then
                      MsgBox($MB_OK, "Vorwahl ungültig", "Die Vorwahl " & $cbPREFIX & " ist ungültig!" & @LF & @LF & "Folgende Vorwahlen sind gültig:" & @LF & "076" & @LF & "077" & @LF & "078" & @LF & "079")
                   ElseIf StringLeft($cbNUMBER, 1) = "0" Then
                      MsgBox($MB_OK, "Nummer ungültig", "Die Telefonnummer beginnt mit 0:" & @LF & $cbPREFIX & "/" & $cbNUMBER)
                   Else
                      GUICtrlSetData($idVORWAHL, $cbPREFIX)
                      GUICtrlSetData($idNR, $cbNUMBER)
                   EndIf
                Else
                   MsgBox($MB_OK, "Nummer ungültig", "Die Nummer ist ungültig (Zu wenig/viel Zeichen)!")
                EndIf
             EndIf
    
    ;~       Nr und Textzeichenanzahl (>4) prüfen, Umlaute anpassen, URL zum Absenden aufrufen
          Case $idSENDEN
             If StringLen(GUICtrlRead($idNR)) < 7 Then
                MsgBox($MB_OK, "Nummer zu kurz", "Die eingegebene Telefonnummer enthält weniger als 7 Ziffern!")
             ElseIf StringLen(GUICtrlRead($idTEXT)) < 5 Then
                MsgBox($MB_OK, "Text zu kurz", "Der Text muss mindestens 5 Zeichen enthalten")
             Else
                $ABSENDER = GUICtrlRead($idABSENDER)
                $ABSENDER = "0041" & StringRight($ABSENDER, 9)
                $PREFIX = StringRight(GUICtrlRead($idVORWAHL), 2)
                $NR = "0041" & $PREFIX & GUICtrlRead($idNR)
                $TEXT = URLEncode(GUICtrlRead($idTEXT))
    
                If MsgBox($MB_OKCANCEL, "SMS Senden?", "Von: " & $ABSENDER & @LF & "An: " & GUICtrlRead($idVORWAHL) & GUICtrlRead($idNR) & @LF & @LF & "Text:" &@LF & GUICtrlRead($idTEXT)) = 1 Then
    ;~             If MsgBox($MB_OKCANCEL, "SMS Senden?", "An:    " & $NR & @LF & "mit folgendem Text: " & $TEXT) = 1 Then ; formatierte Nummer und Text
                   $oIE.navigate("http://www.lox24.eu/API/httpsms.php?konto=xxxx&password=xxxxx&service=xxxx&from=" & $ABSENDER & "&to=" & $NR & "&text=" & $TEXT)
                EndIf
             EndIf
          EndSwitch
    
       Case $hGUI2
          Switch $msg[0]
              Case $speichern
             $neuer_text = GUICtrlRead($text_neu)
             $datei = "muster" & $idGUI & ".txt"
             $open = FileOpen($datei, 2)
             FileSetPos($open, 0, 0)
             FileWrite($open, $neuer_text)
             FileClose($open)
             $text[$idGUI] = $neuer_text
             GUICtrlSetTip($idMUSTER[$idGUI], $neuer_text)
             GUISetState(@SW_HIDE, $hGUI2)
          EndSwitch
       EndSwitch
    WEnd
    
    ;~ Funktion für Angabe der Anzahl eingegebener Zeichen resp. Anzahl SMS
    Func _WM_COMMAND($hWnd, $iMsg, $wParam, $lParam)
        #forceref $hWnd, $iMsg
        Local $hWndFrom, $iIDFrom, $iCode, $sText, $iLen
        $hWndFrom = $lParam
        $iIDFrom = _WinAPI_LoWord($wParam)
        $iCode = _WinAPI_HiWord($wParam)
        Switch $iIDFrom
            Case $idTEXT
                Switch $iCode
                    Case $EN_CHANGE
                        $sText = GUICtrlRead($idTEXT)
                        $iLen = StringLen($sText)
                        GUICtrlSetData($idLABEL2, $iLen)
                        GUICtrlSetData($idLABEL4, Int(($iLen - 1) / 160) + 1)
                EndSwitch
            Case Else
        EndSwitch
        Return $GUI_RUNDEFMSG
     EndFunc
    
    Func URLEncode($sData)
        Local $aData = StringSplit(BinaryToString(StringToBinary($sData,4),1),"")
        Local $nChar
        $sData=""
        For $i = 1 To $aData[0]
            ; ConsoleWrite($aData[$i] & @CRLF)
            $nChar = Asc($aData[$i])
            Switch $nChar
                Case 45, 46, 48 To 57, 65 To 90, 95, 97 To 122, 126
                    $sData &= $aData[$i]
                Case 32
                    $sData &= "+"
                Case Else
                    $sData &= "%" & Hex($nChar,2)
            EndSwitch
        Next
        Return $sData
     EndFunc
    Alles anzeigen
  • Finde Fehler nicht...

    • alpines
    • 17. Juni 2018 um 14:43

    Ganz genau, hier mal ein minimalisiertes Beispiel.

    AutoIt
    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    
    $Form1 = GUICreate("Form1", 158, 175, 192, 124)
    $Input1 = GUICtrlCreateInput("Input1", 16, 16, 121, 21)
    $Button1 = GUICtrlCreateButton("Button1", 16, 48, 123, 33)
    $Button2 = GUICtrlCreateButton("Button1", 16, 88, 123, 33)
    $Button3 = GUICtrlCreateButton("Button1", 16, 128, 123, 33)
    GUISetState(@SW_SHOW)
    
    Local $aText[3] = ["Text A", "Text B", "Text C"]
    Local $aButton = [$Button1, $Button2, $Button3]
    
    While 1
        $nMsg = GUIGetMsg()
        Switch $nMsg
            Case $GUI_EVENT_CLOSE
                Exit
    
            Case $Button1 To $Button3
                GUICtrlSetData($Input1, $aText[$nMsg - $Button1])
    
        EndSwitch
    WEnd
    Alles anzeigen
  • Finde Fehler nicht...

    • alpines
    • 17. Juni 2018 um 13:31

    Ich hab dir doch direkt die Lösung gepostet. $text[$msg - $muster[0]] Das Case To kann bleiben aber du musst die For-Schleife rausnehmen und prüfen welchen Index du gerade hast.

    Da AutoIt alle Controls in einer aufsteigenden Zahlenfolger erstellt kannst du einfach die Nachricht - dem 1. Control rechnen und kriegst dann den Index 0 wenn Button 1 gedrückt wurde.

    Bei Button 5 kriegst du dann Index 4 usw.

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™