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

  • Turnier Timer

    • alpines
    • 16. März 2019 um 11:23
    Zitat von SCCSSF

    Habe zur Übersichtlichkeit die Globel zum großen Teil einzeln geschrieben.

    Das ist nur die halbe Miete, du gehst den Kern des Problems aber nicht an. Erzeuge keine GUIs in Funktionen sondern verwende nur GUISetState um die GUIs anzuzeigen!

    HIer mal ein minimales Beispiel:

    Code
    Opt("GUIOnEventMode", 1)
    
    $hGUI_1 = GUICreate("Form1", 274, 116, 192, 124)
    GUISetOnEvent(-3, _ExitApp, $hGUI_1)
    $hBtn_1 = GUICtrlCreateButton("Goto Form 2", 56, 32, 161, 41)
    GUICtrlSetOnEvent(-1, "_SwitchForm")
    
    $hGUI_2 = GUICreate("Form2", 274, 116, 192, 124)
    GUISetOnEvent(-3, _ExitApp, $hGUI_2)
    $hBtn_2 = GUICtrlCreateButton("Goto Form 1", 56, 32, 161, 41)
    GUICtrlSetOnEvent(-1, "_SwitchForm")
    
    GUISetState(@SW_SHOW, $hGUI_1)
    
    While Sleep(1000)
    WEnd
    
    Func _ExitApp()
        Exit
    EndFunc
    
    Func _SwitchForm()
        ConsoleWrite("Die GUI wird nun gewechselt." & @CRLF)
    
        Switch @GUI_CtrlId
            Case $hBtn_1
                GUISetState(@SW_HIDE, $hGUI_1)
                GUISetState(@SW_SHOW, $hGUI_2)
    
            Case $hBtn_2
                GUISetState(@SW_HIDE, $hGUI_2)
                GUISetState(@SW_SHOW, $hGUI_1)
        EndSwitch
    EndFunc
    Alles anzeigen
  • Turnier Timer

    • alpines
    • 15. März 2019 um 21:48

    Mit den Includes hat das nichts zu tun, Au3Check kann Warnungen rausschmeißen wenn du auf globale Variablen zugreifst du erst in einer Funktion deklariert werden auch wenn die Funktion vorher ausgeführt wird.

    Es ist sehr sehr schlechter Stil den man sich abgewöhnen sollte.

    Du blenst die GUI aber nicht ein und aus, du erzeugst die GUIs neu. Sofern du auf der HauptGUI keine dynamischen Elemente hast (bspw. variierende Anzahl an Labels auf der selben GUI oder ähnliches) solltest du beide vorher erstellen und nur GUISetState zum ein und ausblenden nutzen.

  • Turnier Timer

    • alpines
    • 15. März 2019 um 21:05

    Ehrlich gesagt blicke ich durch deinen Code nicht wirklich durch. Du solltest ihn auf jeden Fall umstrukturieren denn du hast einige kritische Fehler drin.

    Definiere niemals globale Variablen in Funktionen! Au3 Check rastet komplett aus und du kannst Bugs nur sehr schwierig zurückverfolgen. Du darfst dort nur den Wert setzen!

    Definiere niemals statische GUIs in Funktionen! Erzeuge das Fenster vorher und verstecke es, wenn du es brauchst setzt du die Daten und zeigst es an und versteckst das andere.

    Wenn du letzteres anwendest brauchst du auch nicht ständig neue Events zu setzen. Du kannst die Funktion einmal registrieren und dabei belassen.

    Die Zuordnung verschwindet nicht wenn du die GUI @SW_HIDEst und dann wieder @SW_SHOWst.

  • Webbrowser mit Tabs

    • alpines
    • 9. März 2019 um 15:38

    Wonach genau willst du denn z. B. suchen bzw. was soll passieren wenn du eine Suchseite offen hast? Oder geht es einfach nur darum Google anzuschmeißen mit dem Suchbegriff den du eingetippt hast?

    Beim letzteren kannst du dir auch die ganze IE.au3 klemmen und einfach deinen Browser mit einem entsprechenden Link aufmachen.

    Die IE.au3 ist teilweise mit einigen Seiten (was Darstellung angeht) inkompatibel und veraltet.

  • Webbrowser mit Tabs

    • alpines
    • 9. März 2019 um 12:55
    Zitat von Pad385

    nur um automatisierte suchvorgänge zu starten und dann gegebenenfalls mit neuen tabs weiter suchen

    Und da stellt sich mir die Frage wo du das machen möchtest, du kannst vielleicht komplett auf die IE.au3 verzichten und alles im Hintergrund laufen lassen.

  • Webbrowser mit Tabs

    • alpines
    • 9. März 2019 um 09:25

    Was soll dein Skript machen und wo willst du es am Ende denn einsetzen? Es gibt doch bestimmt ne bessere Möglichkeit als mit drei IE-Instanzen.

  • Programm Öffnen jetzt darin was Klicken etc.

    • alpines
    • 6. März 2019 um 23:25
    Zitat von Muecke

    Das muss ich von Hand ansteuern, kann man das auch Automatisieren?

    Du kannst das UAC (User Account Control - Benutzerkontensteuerung) runterschalten, so dass keine Abfrage mehr auftaucht.

    Dass man so eine Abfrage automatisieren könnte würde jeglichen Zweck dieser Abfrage komplett entfremden, da sich sonst Programme direkt Adminrechte holen können.

    Du solltest mal schauen ob der TeamViewer Installer einen cmdline switch anbietet der "silent" oder ähnlich heißt.

    Dort kann man die benötigten Parameter übergeben (Pfad, Kontextmenu erstellen etc..) und TeamViewer führt die Installation ohne weitere Nutzereingaben aus (bis auf eine UAC Abfrage wenn nötig).

    Der Grund warum du TeamViewer nicht mehr kontrollieren kannst wenn du auf "Ja" beim UAC klickst ist, dass die Installation nun höhere Rechte (eben Adminrechte) besitzt.

    Windows ist so gestrikt, dass nicht-admin Prozesse Adminprozesse nicht kontrollieren können.

    Wenn du dein Skript als Admin startest (#RequireAdmin) kannst du nach dem 1. Bestätigen des UACs für dein Skript die TeamViewer Installation starten ohne, dass noch ein UAC Fenster auftaucht.

    Die Rechte erbt der Installer von deinem Skript - ich rate dennoch zur vorhin erwähnten Silent Installation.

  • Tipp zum Setzen von Übergabeparametern ($CMDLINE) im SciTE-Editor

    • alpines
    • 6. März 2019 um 23:22

    Wer nicht auf solche Tools zurückgreifen will kann auch einfach selbst $CMDLineRaw und $CMDLine editieren, das sind keine Konstanten.

    Hier muss man allerdings auf die Splittung von Parametern mit Stringliteralen im String und Leerzeichen aufpassen, sonst wirds falsch getrennt.

    Code
    $CMDLineRaw = "bla blub asd /a /b 20"
    $CMDLine = StringSplit($CMDLineRaw, " ")
    
    For $i = 0 To UBound($CMDLine) - 1
        ConsoleWrite("$CMDLine[" & $i & "] = " & $CMDLine[$i] & @CRLF)
    Next
  • Merere Office Processe beenden

    • alpines
    • 6. März 2019 um 16:55

    Speichere die Namen der Prozesse in einem Array und gehe mit einer Schleife durch wobei du für jeden Arrayeintrag ProcessClose aufrufst.

  • CmdLine Abfrage Werte Prüfen

    • alpines
    • 5. März 2019 um 16:26
    Zitat von SCCSSF

    Habe es jetzt so umgesetzt.

    Du könntest noch statt dem Select ein Switch verwenden, dann sparst du dir in jedem Case Statement das $CMDLine.

  • CmdLine Abfrage Werte Prüfen

    • alpines
    • 4. März 2019 um 19:53

    Der Ansatz ist ja schon mal nicht schlecht, aber du solltest bei den Zugriffen auf die entsprechenden Indizes mehr aufpassen, da du vorgreifst obwohl das Feld leer sein könnte.

    Zitat von SCCSSF

    Global $iPauseCmd = Number($CmdLine[$i+1])

    Du solltest also vor dem Zugriff prüfen ob UBound($CMDLine) > $i + 2 bzw. ob $CMDLine[0] > $i ist.

  • Timer anzeigen lassen...

    • alpines
    • 4. März 2019 um 19:50
    Zitat von Ram3000

    Also wenn Server 1 ausfällt, dann möchte ich nur die erste Down + Datum/Zeit-Meldung, wann er ausgefallen ist, sehen.

    Dazu hast du doch die ServerCheck Methode, da drin kannst du die entsprechenden Sachen setzen.

    Wenn der Server nicht antwortet setzt du das Label, wenn er antwortet lässt du es einfach frei.

    Möchtest du, dass die GUI kleiner wird kannst du mit WinSetPos das Fenster kleiner machen und die anderen Meldungslabel verstecken.

    Möchtest du nur GUI Elemente verstecken kannst du das mit der GUICtrlSetState-Funktion erledigen.

  • Execute bei komplizierterem/mehrzeiligen Code

    • alpines
    • 3. März 2019 um 15:40
    Zitat von aSeCa

    Dann bleibt mir, wenn ich die GUI-Elemente nicht in einer Schleife erzeugen will (weil ich den ISN GUI Editor nutzen möchte)

    Es ist gar nicht so schwierig das zu tun, ich habe erst gestern ein Beispiel dazu gepostet, mit skalierbarer GUI bei verschiedenen Elementen.

  • Execute bei komplizierterem/mehrzeiligen Code

    • alpines
    • 3. März 2019 um 15:29

    Wenn du einen String hast (Usereingabe) $sUserString = "checkBox4", dann kannst du natürlich mit Execute("$" & $sUserString) intern die Variable $checkBox4 ansprechen, ist aber nicht zu empfehlen.

    Stattdessen solltest du einfach ein zwei dimensionales Array erzeugen und den Bezeichner mitspeichern, oder du verwendest ein Dictionary.

    Code
    GUICreate("", 381, 193, 192, 124)
    
    $inputBox1 = GUICtrlCreateInput("Input1", 168, 32, 121, 21)
    GUICtrlCreateLabel("inputBox1", 72, 32, 51, 17)
    
    $inputBox2 = GUICtrlCreateInput("Input1", 168, 104, 121, 21)
    GUICtrlCreateLabel("inputBox2", 72, 104, 51, 17)
    
    GUISetState(@SW_SHOW)
    
    Global $aControls[2][2] = [ _
        [ $inputBox1, "inputBox1" ], _
        [ $inputBox2, "inputBox2" ] _
    ]
    
    Global $dictControls = ObjCreate("Scripting.Dictionary")
    $dictControls.Add("inputBox1", $inputBox1)
    $dictControls.Add("inputBox2", $inputBox2)
    
    While Sleep(10)
        $sInput = InputBox("", "Welche Box soll beschrieben werden?", "inputBox1")
        If $sInput = "" Then Exit
    
    ;Arrayvariante
        For $i = 0 To UBound($aControls) - 1
            If $aControls[$i][1] = $sInput Then
                GUICtrlSetData($aControls[$i][0], @HOUR & ":" & @MIN & ":" & @SEC)
            EndIf
        Next
    
    ;Dictionaryvariante
        GUICtrlSetData($dictControls.Item($sInput), @HOUR & ":" & @MIN & ":" & @SEC)
    
    WEnd
    Alles anzeigen
  • Execute bei komplizierterem/mehrzeiligen Code

    • alpines
    • 3. März 2019 um 15:18
    Zitat von aSeCa

    Eval("cB" & $h + 1)

    Was soll dass denn deiner Meinung nach machen?

  • Execute bei komplizierterem/mehrzeiligen Code

    • alpines
    • 3. März 2019 um 14:42

    Execute solltest du nicht verwenden, wenn du da den Überblick verlierst kann man da Code injecten und das ist nicht sehr gut.

    Mehrzeilige Anweisungen sind über Execute sowieso nicht möglich.

    Verwende lieber Arrays dafür. Du musst einfach nur ein Array erzeugen und dort die ganzen Handles zu den Labels einspeichern.

    Anschließend rufst du eine For-Schleife auf und gehst das Array durch und setzt die Infos.

  • Timer anzeigen lassen...

    • alpines
    • 2. März 2019 um 12:20
    Zitat von Ram3000

    Und wenn die Vorgegebene Zeit (5min) abgelaufen ist, dann soll die Funktion _ServerCheck() aufgerufen werden und der Timer neu gestartet werden und natürlich wieder angezeigt werden.

    Schau dir mal AdlibRegister an, damit kannst du eine bestimmte Funktion alle x Millisekunden ausführen, und in der registrierten Funktion setzt du einfach das Label vom Timer.

    Hier ein kleines Beispiel wie man mit Arrays Inis einliest und Controls erzeugt.

    Code
    IniWrite("settings.ini", "Config", "1", "192.168.178.1:1001|Server1")
    IniWrite("settings.ini", "Config", "2", "192.168.178.2:1002|Server2")
    IniWrite("settings.ini", "Config", "3", "192.168.178.3:1003|Server3")
    IniWrite("settings.ini", "Config", "4", "192.168.178.4:1004|Server4")
    
    Local $aIni = IniReadSection("settings.ini", "Config")
    If Not UBound($aIni) Then Exit
    
    $hGUI = GUICreate("Server", 274, 24 + (UBound($aIni) - 1) * 25)
    $Label1 = GUICtrlCreateLabel("Server:", 16, 16, 38, 17)
    $Input1 = GUICtrlCreateInput("Input1", 64, 14, 121, 21)
    $Input2 = GUICtrlCreateInput("Input2", 192, 14, 65, 21)
    
    Global $aControls[UBound($aIni) - 1][3]
    
    For $i = 1 To UBound($aIni) - 1
        Local $aSplit = StringSplit($aIni[$i][1], "|", 3)
        Local $aIPPort = StringSplit($aSplit[0], ":", 3)
    
        $aControls[$i - 1][0] = GUICtrlCreateLabel($aSplit[1], 16, 16 + ($i - 1) * 25, 38, 17)
        $aControls[$i - 1][1] = GUICtrlCreateInput($aIPPort[0], 64, 14 + ($i - 1) * 25, 121, 21)
        $aControls[$i - 1][2] = GUICtrlCreateInput($aIPPort[1], 192, 14 + ($i - 1) * 25, 65, 21)
    Next
    
    GUISetState(@SW_SHOW, $hGUI)
    
    While 1
        $nMsg = GUIGetMsg()
        Switch $nMsg
            Case -3
                Exit
    
        EndSwitch
    WEnd
    Alles anzeigen
  • Timer anzeigen lassen...

    • alpines
    • 2. März 2019 um 10:29
    Zitat von Ram3000

    Das Programm macht schon soweit was es soll, aber falls einer einen Verbesserungsvorschlag hat, ist das gerne gesehen.

    Ja, benutz doch bitte Arrays statt jedes Control einzeln zu definieren, damit sparst du dir 60% des Codes.

    Zitat von Ram3000

    Nun würde ich gerne noch den Timer anzeigen lassen, weiss aber nicht wie ich das anstellen soll...

    Was soll der Timer denn anzeigen, du musst schon ein bisschen mehr Infos rausgeben.

  • Zoom in _IECreateEmbedded

    • alpines
    • 28. Februar 2019 um 21:47
    Zitat von Joschy41

    Mittlerweile aber auch statt Sleep (1000) in Zeile 17 "_IELoadWait($oIE)" verwendet.
    Wartet somit bis die Seite fertig geladen ist.

    Was absoluter Quatsch ist, wenn du den dritten Parameter von _IENavigate nicht 0 setzen würdest. Du hast dadurch einfach nur mehr Code.

  • Zoom in _IECreateEmbedded

    • alpines
    • 28. Februar 2019 um 21:26
    Zitat von Musashi

    Beides keine seriösen Optionen, oder ?

    Na na, was ist denn hiermit?

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™