Author und die Überschrift (ist bei #1 unbedingt nötig) aus dem Download ermitteln
Hast du schon Code getestet? Sollte eigentlich nicht so schwierig sein!
Author und die Überschrift (ist bei #1 unbedingt nötig) aus dem Download ermitteln
Hast du schon Code getestet? Sollte eigentlich nicht so schwierig sein!
autoBert: Danke für dein Feedback!
Das von dir bemängelte Fehlverhalten habe ich korrigiert und die neue Version mit den Posts aus diesem Thread getestet.
Freue mich über jede Kritik!
Gruß Ashpool
[edit] Mit den Skripten in diesem Post funktioniert es leider nicht, ich weiß aber, woran es liegt und arbeite daran.
Hi funkey,
ich finde dein Skript absolute Klasse und es hat mich angeregt, mal ein wenig rumzuprobieren.
Habe deine V2.2 beta als Grundlage genommen und dabei ist eine Erweiterung deines Skripts um folgende Fähigkeiten herausgekommen:
- Neben AutoIt-Quelltexten werden auch normale (mit dem Code-Button # eingefügte) Quelltexte ausgelesen (vor allem für ältere Posts sinnvoll).
- Der Dateiname enthält den Thread-Titel.
- Mehrere angehängte Dateien werden korrekt eingelesen.
- Download auch von Zip- und Rar-Dateien.
- Info-Tooltip über gefundene Dateien/Objekte.
- Der heruntergeladene Code enthält einen Kommentarblock mit Adresse des Beitrags und Thread-Titel.
Hab es mal als V2.3 Ashpool beta betitelt, um Verwechslungen zu vermeiden:
Neue Version im Post 37
Was halten du und die anderen AutoIt-ler davon? Sind das sinnvolle Ergänzungen oder eher nicht?
Gibts Probleme mit dem Skript?
Gruß Ashpool
Die Funktion _calc() könnte man auch bedeutend eleganter schreiben, zumal dann auch automatisch auf die eingegebene Anzahl der Teams reagiert wird:
#include <guiconstants.au3>
[/autoit] [autoit][/autoit] [autoit]$x = 10
$y = 10
$GUI = GUICreate("Teams eingeben", 200, 70)
$lbl = GUICtrlCreateLabel("Teams getrennt durch Kommas eingeben!", 5, 5, 200, 15)
$OK = GUICtrlCreateButton("OK!", 80, 48, 40, 20)
$teams = GUICtrlCreateInput("Team1,Team2", 10, 25, 180, 20)
Global $team
GUISetState(@SW_SHOW)
While 1
$guimsg = GUIGetMsg()
Switch $guimsg
Case $OK
GUISetState(@SW_HIDE)
_getvalues()
Case $GUI_EVENT_CLOSE
Exit
EndSwitch
WEnd
Func _getvalues()
$input = GUICtrlRead($teams)
$team = StringSplit($input, ",")
MsgBox(0, 0, $team[0])
_calc()
EndFunc ;==>_getvalues
Func _calc()
$ergebnis_Gui = GUICreate("Aufstellungen", 120, 200)
$exit = GUICtrlCreateButton("OK!", 40, 170, 40, 25)
For $i = 1 To $team[0] - 1
For $j = $i+1 To $team[0]
GUICtrlCreateLabel($team[$i] & " - " & $team[$j], 10, $y)
$y = $y + 12
Next
Next
GUISetState(@SW_SHOW, $ergebnis_Gui)
Sleep(10000)
Exit
EndFunc ;==>_calc
Die Message-Verarbeitung hab ich mal so gelassen, da musst du auch noch was machen.
Gruß Ashpool
Grundsätzlich würde mich interessieren, ob andere ähnliche Beobachtungen gemacht haben und ob es Möglichkeiten gibt, daß AutoIT die Programme zuverlässiger steuert - bzw. wo mein Fehler liegt.
Ich hatte anfangs auch Probleme mit 'zufälligen' Ergebnissen meiner Installationsskripte. Inzwischen habe ich mir angewöhnt, Benutzereingaben vor einer Skriptaktion zu sperren und sicher zu stellen, dass das gewünschte Fenster auch wirklich aktiv ist. Außerdem verwende ich für Controlclicks so gut wie nie Mauskoordinaten. Seitdem gibts eigentlich kaum noch Probleme.
Ich hab mal einen Ausschnitt deines FF-Skripts, in dem der Einstellungsdialog aufgerufen wird, beispielhaft in meinem Sinne geändert:
[autoit]ShellExecute('firefox.exe') ; nur für meine Testzwecke
[/autoit][autoit][/autoit][autoit]BlockInput(1) ; Benutzereingaben sperren
[/autoit][autoit][/autoit][autoit]Opt("WinTitleMatchMode", 2) ;1=vom Anfang, 2=enthält, 3=genau, 4=fortgeschritten, -1 bis -4=Groß-/Klein ignorieren
[/autoit][autoit][/autoit][autoit]$FensterTitel = "Mozilla Firefox"
[/autoit][autoit][/autoit][autoit]If WinWait($FensterTitel, "", 3) = 1 Then ; Auf das Firefox-Fenster 3s warten
If Not WinActive($FensterTitel, "") Then WinActivate($FensterTitel, "") ; wenn nicht aktiviert, dann aktivieren
If Not WinWaitActive($FensterTitel, "", 2) Then ; wenn nach 2s immer noch nicht aktiv, dann Skript abbrechen
BlockInput(0) ; Benutzereingaben freigeben
Exit
EndIf
Opt("WinTitleMatchMode", 1) ;1=vom Anfang, 2=enthält, 3=genau, 4=fortgeschritten, -1 bis -4=Groß-/Klein ignorieren
[/autoit][autoit][/autoit][autoit];Fenster maximieren
WinSetState($FensterTitel, "", @SW_MAXIMIZE)
;Einstellungen
Send("!x") ;Extras
Sleep(50)
Send("e") ;Einstellungen
; ...
[/autoit][autoit][/autoit][autoit]EndIf
[/autoit][autoit][/autoit][autoit]BlockInput(0) ; Benutzereingaben freigeben
[/autoit]Ich hoffe, das hilft ein wenig weiter.
Gruß Ashpool
will das so haben das die seite die mir im GUI angezeit wird alle 5 sec neu läd. bekomms aber irgendwie nicht hin ohne das bei mir dann alles abkackt.
Präzisiere mal "abkackt" , bei mir funktioniert das Skript ohne Änderung wie gewünscht (lädt alle 10s neu)
[autoit]Dim ... $lebewesenstart_x = Random(0, 59, 1), $lebewesenstart_y = Random(0, 89, 1)
[/autoit]
Du hast die Random-Obergrenzen für x und y vertauscht, in y-Richtung hast du nur 59 Blöcke, dein Random kann aber Werte bis 89 erzeugen.
Damit wird bei Werten über 59 deine erste For-Schleife nicht mehr durchlaufen!
Wenn du die Random-Parameter korrigierst, sollten immer Ameisen erscheinen.
Gruß Ashpool
Leider gibt es das Datum immer im Langen Format zurück
Habe mal die Zeile 157 der UDF wie folgt geändert:
[autoit]$lvDate = GUICtrlCreateDate($lvDataStart,0, 0, 1, 1, $DTS_SHORTDATEFORMAT,BitOr($WS_EX_CLIENTEDGE,$WS_EX_TOPMOST ))
[/autoit]
Damit wird dann das kurze Datum angezeigt.
Im Original stand dort:
[autoit]$lvDate = GUICtrlCreateDate($lvDataStart,0, 0, 1, 1,BitOR($GUI_SS_DEFAULT_DATE, $DTS_SHORTDATEFORMAT),BitOr($WS_EX_CLIENTEDGE,$WS_EX_TOPMOST ))
[/autoit]
und in der DateTimeConstants.au3 ist $GUI_SS_DEFAULT_DATE wie folgt definiert:
Global Const $GUI_SS_DEFAULT_DATE = $DTS_LONGDATEFORMAT
[/autoit]Warum sollte man $DTS_LONGDATEFORMAT und $DTS_SHORTDATEFORMAT verodern?
Ich hoffe, dass das das war, was du meintest
Gruß Ashpool
Ich auch, alle die über die 100 weg sind, dürften eigentlich zu den aktiveren gehören...
Uh, da muss ich wohl noch ein paar Posts nachlegen, damit ich nicht durchs Raster falle...
Gruß Ashpool
bei mir geht das nicht
Versuche mal bitte mit Folgendem davor:
MsgBox(0, "Beep Beispiel", "Dummy",1)
[/autoit]Bei mir gings dann. Und bei dir?
Gruß Ashpool
Ich hab gerade was merkwürdiges entdeckt.
Setze ich vor die Beep-Ausgabe ein
MsgBox(0, "Beep Beispiel", "Dummy",1)
[/autoit]
dann höre ich die Töne, lasse ich es weg, bleibt der Läppi stumm.
Wenn ich es einmal mit MsgBox gestartet habe, funktioniert es manchmal auch bei weiteren Versuchen ohne MsgBox, solange ich kein anderes Fenster im Vordergrund hatte.
Kann das jemand nachvollziehen und/oder erklären?
Gruß Ashpool
Schnuffel: Setze ich vor dein Skript ein
[autoit]MsgBox(0, "Beep Beispiel", "Dummy",1)
[/autoit]
kann ich die Töne hören, sonst nicht.
Hat da jemand 'ne Ahnung woran das liegt?
Gruß Ashpool
[autoit]If WinActivate("...","") Then
[/autoit]
Da hattest du dein Problem wohl etwas "unscharf" formuliert, wa?
Ich glaube, mal gelesen zu haben, dass man einen Beep-Treiber installieren muss, wenn man keinen Systemlautsprecher im Rechner hat und die Töne dann über die externen Schallwandler ausgeben will. Aber das hängt sicher auch vom Mainboard ab. Mein Laptop hat jedenfalls keinen internen Lsp, folglich höre ich da nix, aber der Große dudelt vor sich hin.
ProcessExists dürfte die Funktion deiner Wahl sein.
[Mist] War wohl zu langsam.
bei mir geht gar kein beep und ich weiß net warum
Weil du vielleicht keinen Systemlautsprecher hast?!
Probier mal MouseClickDrag
[edit] Tschuldigung, für dein Problem nicht ganz passend.
Hab noch die Abfrage des $b_DeleteDuplicates-Parameters eingebaut:
#include <File.au3>
[/autoit] [autoit][/autoit] [autoit]$srcfile = @ScriptDir & "\services"
[/autoit] [autoit][/autoit] [autoit]$replaceString = "sapmsFC1" & @TAB & "3680/tcp" & @TAB & "# SAP System Messaging Service Port"
$searchString = "sapmsFC1"
Search_And_Replace($srcfile, $searchString, $replaceString, 1) ; Ersetzen und Duplikate entfernen
;Search_And_Replace($srcfile, $searchString, $replaceString) ; Ersetzen, Duplikate behalten
;Search_And_Replace($srcfile, $searchString, $replaceString, 0) ; -- " --
Func Search_And_Replace($s_file, $s_searchString, $s_replaceString, $b_DeleteDuplicates = 0)
; $s_file = filename
; $s_searchString = string to search in file
; $s_replaceString = string to replace the searched string in file
; $b_DeleteDuplicates = flag, value 0=no (default) or 1=yes, to deletes all duplicate lines of the search string or not,
Local $stringCount = 0
$sfile = FileOpen($s_file, 0)
For $i = _FileCountLines($s_file) to 1 step -1
$readline = FileReadLine($sfile, $i)
If StringInStr($readline, $s_searchString, 2) Then
$stringCount += 1
;MsgBox(0, "String found!", "The String " & $s_searchString & " is found in line: " & $i)
If $stringCount > 1 and $b_DeleteDuplicates Then
_FileWriteToLine($s_file, $i, "", 1)
Else
_FileWriteToLine($s_file, $i, $s_replaceString, 1)
EndIf
EndIf
Next
FileClose($sfile)
EndFunc ;==>Search_And_Replace
Gruß Ashpool
ein kleines Problem noch. So wie es aussieht, werden die Einträge zwar ersetzt, allerdings werden nicht alle doppelten Einträge gelöscht.
Oh ja, wenn eine Zeile gelöscht wird, ist die nächste bearbeitete Zeile ja eigentlich erst die übernächste.
Wenn wir die Zeilen von hinten durchgehen, sollte das Problem gelöst sein.
For $i = _FileCountLines($s_file) to 1 step -1
[/autoit]Probier mal!
Gruß Ashpool
Keine Ursache, gern geschehen.
Eine Kleinigkeit ist mir noch aufgefallen, die Reservierung der Variablen $StringCount sollte besser so aussehen:
[autoit]Local $stringCount = 0
[/autoit]
um $StringCount mit dem Wert 0 zu initialisieren, sonst könnte es bei einer möglichen Erweiterung, die auf den Wert 0 testet, zu unerwarteten Problemen kommen.
Gruß Ashpool