Wenn es diese Art von Programm werden soll, die ich befürchte, weiß der TE sicher schon an welcher Schraube er drehen muß damit das Programm prompt wieder startet.
Beiträge von autoBert
-
-
Ich trage mich mit dem Gedanken eine Versionsverwaltungssystem (für AutoIt-Skripte) zu schreiben. Dazu habe ich eine grundsätzliche Frage: Ist es möglich mit Hilfe eines LUA-Skriptes beim Schliessen eines Skriptfiles in Scite ein Event abzufeuern, welches dann mein Programm veranlasst das Skript wieder in die DB zurück zu speichern?
Der umgedrehte Weg funktioniert ja mit ShellExecute problemlos => Scite öffnet automatisch das Skript. -
Warum testet niemand mal mein Script?
Warum schreibt niemand eine Antwort, die er selbst getestet hat?
Liegt wohl daran, daß du sofort nach Hilfe schreist und sie dann ignorierst.
Daß zum Zusammenspiel einzelner Funktionen auch eine Portion logisches Denken gehört versteht sich von selbst. Um dieses zu trainieren ist es sehr nützlich verschiedene Scripte anderer Autoren zu analysieren, parallel dazu sollte man dann die Funktionen (Hilfe dazu genau durchlesen) an kleinen Miniskripten testen bis man ein Verständnis dafür hat, was die einzelnen Funktionen bewirken können. Mit der Zeit bekommt man durch das Mitlesen bzw. analysieren heraus wer die üblichen Verdächtigen für die Lösung bestimmter Probleme ist, Paradebeispiel GDI/GDI+ fällt mir sofort UEZ, Eukalyptus, Mars ein. Es gibt sicherlich noch mehr die sich gut damit auskennen. Ich würde aber, sollte ich ein GDI/GDI+ Problem zu lösen haben, zuerst Skripte dieser Autoren herunterladen und analysieren bis das Grundverständnis dafür da ist.
Bei Listview fallen mir sofort Oscar, BugFix und Kanashius ein. Bei TreeView die gleichen Verdächtigen. Bei Array-Problemen natürlich BugFix. Diese Liste läßt sich noch ewig fortsetzen.Wenn man dann eine ausreichende Basis hat kann man sich auch selbst an ein solches Projekt heran trauen.
Deinen Updateversuch für dieses Skript würde ich nie unternehmen, wenn ich soetwas bräuchte würde ich lieber nur die Idee nehmen und von 0 anfangen zu skripten. Das Skript gehört imho in die Tonne: Ein paar nützliche Funktionen (GetIconfromExe, _GetPathByPid, _Gui_RoundCorners) hat es, diese werden natürlich getestet damit man das Potential erkennt und bei Bedarf verwertet. Wenn du mich jetzt fragst:
"Und wann habe ich dann noch Zeit um meine Projekte zu verwirklichen?" So laß dir gesagt sein: "Solange du die Basis nicht hast ist es besser du läßt es, denn wer rennen will muß zuerst sicher laufen können.Als ich meine 1. Anstellung als Quereinsteiger in der EDV hatte, mußte ich einen Praktikanten bei einem bestimmten Projekt betreuen. Entgegen meiner Bitte hat mein Chef darauf bestanden, daß es in GW-Basic realisiert wird. Ich hatte natürlich meine eigenen Projekte und hab es mir daher relativ einfach gemacht. Ich zeigte im in einer sehr mächtigen Sprache ein fertiges UserInterface und erklärte ihm, daß sein 1. Aufgabe ist sich in GW-Basic die Funktionen zu bauen welche benötigt werden um ein vergleichbares UI zu handlen ohne einen ReDo from Start auszulösen. Da er vorher noch keine einzige Zeile GW-Basic geschrieben hatte, hat er sich logischerweise daran gemacht die Sprache zu erkunden. Nach 4 Wochen war er soweit, daß er wußte welche Befehle er braucht um die 1. Aufgabe zu lösen. Nach der 6. Woche hatte er ein kleines vorgegebenes UI erstellt inkl. Speicherung der Datensätze. Bei den 1. Besprechungen mit dem Kunden war ich natürlich dabei, als gelernter Kaufmann war ich sozusagen der Dolmetscher. Auf Kundenseite war glücklicherweise 1 Frau, die in meiner Lehrzeit stellenweise meine Vorgesetzte war.
1 Monat vor Ende der 6 Praktikumsmonate war ein kleines funktionales auf den Kunden zugeschnittenes Warenwirtsschaftssystem fertig. In den 5 Jahren die ich es danach noch mitbetreut habe, mußte ich keine einzige Zeile Code ändern. Die einzigen Probleme enstanden durch Stromausfall.
Was ich dir damit sagen will: mit systematischem Vorgehen und erarbeiten der Grundlagen kommt man zum Ziel, du springst im Moment noch durch zuviele verschiedene Themen ohne diese verstehen zu können, da noch Teile der Grundlagen fehlen.mfg autoBert
-
@autoBert - vielen Dank für Deine Hilfe !

war für dieses Skript, das letzte mal. Ich halte es für nicht zu Ende gebracht und stürzt bei mir ohne Fehlermeldung nach Tastendruck (fehlende Icons) ab. Egal ob Absturz oder mit Cancel beendet, es bringt mir alle sichtbaren Fenster in der Anordnung und Größe durcheinander.
Genau das habe ich, wie in Post 1 geschrieben: "WinActivate(0x00510C34)"ich schrieb: "Falls man WinActivate nicht mit dem Handle als Parameter nutzen kann, wie kann man dann ein Fenster aktivieren, von dem man "nur" das Handle hat? "
Was ich mit WinActivate möchte: "Holt ein bestimmtes Fenster in den Vordergrund und setzt den Fokus auf dasselbe." - genau das.
Es funktioniert nicht, wenn ich das Handle bei WinActivate einsetze.
Da ich nur das Handle habe, fragte ich: wenn ich nur das Handle habe, wie aktiviere ich ein Fenster über das Handle in Analogie zu WinActivate?
WinActivate akzeptiert FensterHandles anstelle des Titles. zumindest ist mir nichts gegenteiliges bekannt.
ist wirklich nicht so: 3 Spalten werden gebraucht aber genauso viele Spalten wie Zeilen erzeugt, daß zu meinem obigen "Ich halte es für nicht zu Ende gebracht" und um Raupi in Schutz zu nehmen, er hat nur etwas mit dem EXE-Icon implementiert. Die Lösung hierzu habe ich ja schon mit Wechsel zwischen geöffneten Fenstern - Raupi's Script gepostet. Danach ist die Anzahl der Spalten immer 3 und die Anzahl der Zeilen hängt von den geöffneten Fenstern ab. -
Warum löst du das ganze nicht über die Excel.au3 und einem unsichtbaren Excel-Workbook?
20 € kann leicht verdient sein, aber je nach verwendeten Excel-Formeln (Funktionen) auch zu wenig. Stell doch bitte eine Liste der verwendeten Excel-Formeln mit ein, damit man sich ein Bild machen kann. Am besten wäre natürlich gleich das umzusetzende Excel-File.
-
Würde auch mit TimerInit/TimerDiff in der Schleife funktionieren:
Code
Alles anzeigen$tdStart=TimerInit() _RandomZahl();damit _RandomZahl sofort 1* ausgeführt wird While 1 $nMsg = GUIGetMsg() Switch $nMsg Case $GUI_EVENT_CLOSE Exit EndSwitch If TimerDiff($tdStart) >=10000 Then _RandomZahl() $tdStart=TimerInit() EndIf WEnd Func _RandomZahl() $i = Random(10, 1000, 1) GUICtrlSetData($Zahl, $i) EndFunc
schöner ist allerdings AdlibRegister:Code
Alles anzeigenAdlibRegister('_RandomZahl',10000);widerholt alle 10 s _RandomZahl _RandomZahl();damit _RandomZahl sofort 1* ausgeführt wird While 1 $nMsg = GUIGetMsg() Switch $nMsg Case $GUI_EVENT_CLOSE AdlibUnRegister('_RandomZahl') Exit EndSwitch WEnd Func _RandomZahl() $i = Random(10, 1000, 1) GUICtrlSetData($Zahl, $i) EndFunc ;==>_RandomZahl -
In einer Schleife mit GuiGetMsg hat sleep nichts zu suchen! Die Message könnte dadurch verloren gehen, was bei dir ja offensichtlich der Fall ist. Nimm statt sleep entweder:
- eine Kombination aus TimerInit und TimerDiff.
- AdlibRegister
mfg autoBert
-
Um das Array zu verkleinern must du ein ReDim ausführen:
Code$relatedwindows[0][0] =$j-1 ;in 0|0 Anzahl der Zeilen ReDim $relatedwindows[$j][3] _ArraySort($relatedwindows,0,1) ;ab 1. Zeile mit der Sortierung beginnen _ArrayDisplay($relatedwindows)
Für die Guigröße mußt du doch nur mit den gewünschten Werten multiplizieren:
Die Buttons werden in der Schleife ab 110 (neu!) erzeugt. Die Positionen musst du neu errechnen, da sich Fenstergröße ja geändert hat und -
Nur das abc und (je nach Version) das 0.txt oder D.txt bleibt gleich.dann funktioniert u.a. dies dafür:
-
Übrigens gibt es auch eine UDF, um direkt aus AutoIT auf das LCD der G-Serie zuzugreifen. Damit kannst du LUA ganz vergessen
AdvanceLcd - UDF für alle Logitech Produkte (G15, G19 etc.)
Zugriff auf LCD der G15 mit der LgLCD SDK...
Alle funktionen in der NomadMemory sind mtlw schon in der WinAPI UDF vorhanden. -
-
ich halte es für keine gute Idee den IE wiederholt in der Schleife zu starten.
-
Die Implementation deiner Auswertung in das Beispiel zu _GUICtrlListView_AddArray ist doch ganz einfach:
AutoIt
Alles anzeigen#include <GUIConstantsEx.au3> #include <GuiListView.au3> #include <MsgBoxConstants.au3> Global $log = 'log.txt' Global $plog = @ScriptDir & "\pickup.txt" Global $file = FileRead($log) Global $idListview, $idRefresh, $iMsg ; Create GUI GUICreate("ListView Add Array", 400, 310) $idListview = GUICtrlCreateListView("Anzahl|Item", 2, 2, 394, 268) $idRefresh = GUICtrlCreateButton('&Refresh', 2, 275, 394, 25) GUISetState(@SW_SHOW) Global $aItems = _GetStat($file) _GUICtrlListView_AddArray($idListview, $aItems) While 1 $iMsg = GUIGetMsg() Switch $iMsg Case $GUI_EVENT_CLOSE ExitLoop Case $idRefresh _GUICtrlListView_DeleteAllItems($idListview) $aItems = _GetStat($file) _GUICtrlListView_AddArray($idListview, $aItems) EndSwitch WEnd GUIDelete() Func _GetStat($file_r) $file_r = StringReplace(StringReplace($file, '[', ''), ']', '') Local $a_split, $z Local $aResult_u = StringRegExp($file_r, 'Ihr erhaltet: (.*)', 3) If Not @error Then ;_ArrayDisplay($aResult_u, "RegExp Ergebnis") _ArrayColInsert($aResult_u, 1) For $h = 0 To UBound($aResult_u) - 1 $a_split = StringSplit($aResult_u[$h][0], "x") $aResult_u[$h][1] = StringStripWS($a_split[1], 7) If $a_split[0] > 1 Then $aResult_u[$h][0] = Int($a_split[2]) Else $aResult_u[$h][0] = 1 EndIf Next _ArraySort($aResult_u, 1, 0, 0, 1) ;_ArrayDisplay($aResult_u, '2D Array ohne Summen') Dim $aResult_sum[UBound($aResult_u, $UBOUND_ROWS)][2] $i = 0 $zaeler = 0 $item = $aResult_u[0][1] For $j = 0 To UBound($aResult_u) - 1 If $aResult_u[$j][1] == $item Then $zaeler += $aResult_u[$j][0] Else $aResult_sum[$i][0] = $zaeler $aResult_sum[$i][1] = $item $zaeler = $aResult_u[$j][0] $item = $aResult_u[$j][1] $i += 1 EndIf Next $aResult_sum[$i][0] = $zaeler $aResult_sum[$i][1] = $item _ArraySort($aResult_sum, 1, 0, 0, 0) ;_FileWriteFromArray($plog, $aResult_sum, Default, Default, " x ") ;_ArrayDisplay($aResult_sum, "2D Array mit Summen") Return $aResult_sum EndIf EndFunc ;==>_GetStat -
_GUICtrlListView_AddArray dürfte die effektivste Methode sein.
-
Wat? Was für eine Andeutung?
sorry hab mich wohl getäuscht (oder den Baum im Wald falsch zugeordnet
)Ich bin ein bisschen erstaunt, erst wollte keiner helfen und nun gibt es ein Combat wer die beste Lösung hat.
Wenn @BugFix mitmacht und das Dictionary-Object auspackt gehts mit Sicherheit noch schneller.
-
Stimmt der 2. Parameter ist ein Element des Arrays. $z wurde am Anfang der Func deklariert hat also beim 1. Duchlauf den Wert 0. da $z nach abarbeiten der Suche, evtl. aufaddieren und löschen um 1 erhöht wird jedesmal ein anderes Element abgearbeitet.
Hier einmal das Teilkonstrukt:
CodeDo ;bedingte äußere Schleife $aFound=_ArrayFindAll($aResult_u,$aResult_u[$z][0]);,0,0,0,2) ;ist Element $aResult_u[$z][0] noch öfters vorhanden? ConsoleWrite($z & '. durchlauf: ' & $aResult_u&@TAB&$aResult_u[$z][0]&@CRLF) ;zu Verständniszwecken _ArrayDisplay($aFound) ;zu Verständniszwecken For $f=UBound($aFound)-1 to 1 Step -1 ;alle anderen Funde durchgegeh $aResult_u[$z][1] += $aResult_u[$aFound[$f]][1] ;und dazuaddieren _ArrayDelete($aResult_u,$aFound[$f]) ;danach doppelten Eintrag Löschen Next $z+=1 ;Zähler $z um 1 erhöhen Until $z = UBound($aResult_u) ;solange bis alle 1. Vorkommen eines Elements abgearbeitet wurdenda $z nach abarbeiten der Suche, evtl. aufaddieren und löschen um 1 erhöht wird jedesmal ein anderes Element abgearbeitet.
Habe gerade gesehen, dass autoBerts Lösung durch den Regex ca. 10x schneller ist als meine Lösung...
Also habe ich mal nachgerüstet
(Sollte jetzt ca. 2x schneller sein als autoBerts Lösung)lg
MMit den gegbenen Daten bist du ca. 8 mal schneller. Ich bin aber der Meinung, daß mit zunehmender Datenmenge mein Skript aufholt und irgendwann überholt. Bin aber zu faul ein Testskript zu schreiben.
-
Vielen lieben Dank euch allen

Schon gemacht...
... Aber der Unterschied zwischen Theorie und Praxis ist in der Praxis weit höher als in der Theorie. So sah es danach auch aus
In dem Beitrag waren die größten Fässer, dies war der einzigste Grund, denn wer Bierologie und Hektoliteratur studiert hat kennt beides.
Ich habe aber gerade: Forscher warnen: Zu oft Geburtstag haben gefährdet die Gesundheit gefunden, dies macht mich nachdenklich. Das einzigste was beruhigt:
Immerhin: Partyfreunde dürfte beruhigen, dass es offenbar keinen Unterschied macht, ob Geburtstage gefeiert werden oder nicht.
in diesem Sinne: noch eine schöne Feier

-
Du kannst jedes Element durchsuchen, einfacher ist aber in SFile zu tauschen.
direkt nach FileRead einfügen.
Edit: Raupi Skript liefert falschen Wert. Resultate siehe Probleme mit Arrays
-
Mars:
Oh... da habe ich nicht drauf geachtet... Habe nicht bemerkt, dass da Leerzeichen am Ende übrig bleiben.
Ist gefixt, jetzt müsste das Ergebnis bei uns beiden gleich sein.ja jetzt muß nur noch einer per Hand nach rechnen, nicht das Raupi Recht hat. Ich dachte, als das Thema eröffnet wurde, es sei ein 2. Account von Raupi (er hat mal in der SB eine Andeutung in diese Richtung Rift gemacht) und er ist nur zu faul.
Spoiler anzeigen
Raupi:Code
Alles anzeigenAventurin|70 [Funkelblatt]|9 [Thalasiterz]|4 [DurchsichtigerStoff]|4 [SagenumwobenesFell]|3 [Thalasit-Kristall]|2 [Thalasit-Ingot]|1 [Zuckerstange]|1 [ZirthanischerTraumegel]|1 [RauerEdelstein]|1 [GeringeDiplomatenauszeichnungderEmpyreischenAllianz]|1 [EinAbgenutzterKieselstein]|1 [BorottsBifokalbrille]|1 [GeringeDiplomatenauszeichnungderHimmelblauenRhenke]|1 [Merpho]|1 [KleinesBlauesRuderboot]|1 [Kleiner5-Sterne-Dimensionsvorrat]|1
autoBert:Code
Alles anzeigenAventurin|74 [Funkelblatt]|9 [Durchsichtiger Stoff]|4 [Thalasiterz]|4 [Sagenumwobenes Fell]|3 [Thalasit-Kristall]|2 [Geringe Diplomatenauszeichnung der Himmelblauen Rhenke]|1 [Geringe Diplomatenauszeichnung der Empyreischen Allianz]|1 [Thalasit-Ingot]|1 [Rauer Edelstein]|1 [Kleines Blaues Ruderboot]|1 [Borotts Bifokalbrille]|1 [Merpho]|1 [Zirthanischer Traumegel]|1 [Kleiner 5-Sterne-Dimensionsvorrat]|1 [Zuckerstange]|1 [Ein Abgenutzter Kieselstein]|1
Mars:Code
Alles anzeigenAventurin|74 [Funkelblatt]|9 [Durchsichtiger Stoff]|4 [Thalasiterz]|4 [Sagenumwobenes Fell]|3 [Thalasit-Kristall]|2 [Geringe Diplomatenauszeichnung der Himmelblauen Rhenke]|1 [Geringe Diplomatenauszeichnung der Empyreischen Allianz]|1 [Thalasit-Ingot]|1 [Rauer Edelstein]|1 [Kleines Blaues Ruderboot]|1 [Borotts Bifokalbrille]|1 [Merpho]|1 [Zirthanischer Traumegel]|1 [Kleiner 5-Sterne-Dimensionsvorrat]|1 [Zuckerstange]|1 [Ein Abgenutzter Kieselstein]|1 -
@autoBert, warum hast du deinen letzten Beitrag deaktiviert?
Ergebnis ist noch nicht überprüft. Übrigens differerieren alle 3 Ergebnisse: die von Mars und meine stimmen weitgehend überein. Differenz liegt bei Mars:
Diese noch zusammengefasst stimmen sie mit meinen Summen überein.
@autoBert ich bekomme bei der Funktion "_ArrayColInsert($aResult_u,1)" einen Error - undefined function. Mach ich da was falsch? Kann in der Hilfe die Funktion auch nicht finden.
du benutzt noch nicht 3.3.14.x Wann genau diese Funktion hinzugefügt wurde weiß ich nicht ab 3.3.14.1 ist sie aber definitiv enthalten.