Hat keiner noch eine Idee wie ich das Vorhaben umsetzen kann?
Beiträge von Scritch
-
-
Es handelt sich bei dem Programm um eine Terminalanwendung die in Putty läuft.
-
Hallo Leute. Mit Abfangen meine ich mitlesen. Es ist ein Fenster einer gewissen Anwendung aktiv wo mit dem Scanner gearbeitet wird. Im Hintergrund möchte ich dann aber den Scan mitlesen.
-
Hallo Leute. Wir setzen hier Barcodescanner für verschiedene Dinge ein. Ich möchte nun so einen Barcodescan gerne mit AutoIt abfangen und dann weiterverarbeiten. Wie stelle ich das am einfachsten an?
-
Hallo zusammen.Ich habe ein Skript geschrieben, das vereinfacht gesagt Dateien aus C:\ in ein Verzeichnis auf F:\ kopieren soll. Soweit, so einfach. Neben den Dateien im Quellpfad sind auch noch Unterordner vorhanden, in denen sich auch Dateien befinden, die aber nicht mit kopiert werden sollen. Das Skript kopiert aber auch alle Dateien aus den Unterverzeichnissen mit. Ich kann das per setzen von Parametern ja nichtmal unterbinden!
Kann ich das irgendwie unterbinden?
C
Alles anzeigen#include <ButtonConstants.au3> #include <ComboConstants.au3> #include <EditConstants.au3> #include <GUIConstantsEx.au3> #include <GUIListBox.au3> #include <StaticConstants.au3> #include <WindowsConstants.au3> #include <Array.au3> #include <GuiStatusBar.au3> #include <GUIConstantsEx.au3> #include <ScreenCapture.au3> #include <File.au3> #include <GUIListView.au3> #include <FileConstants.au3> #include <MsgBoxConstants.au3> #include <WinAPIFiles.au3> Global $datei_pfad = "C:\Users\Public\Documents\SSEC\Data" Global $adatei_eingelesen Global $aalle_dateien_in_pfad Dim $arechenearray[1][2] Global $rechenvariable Global $qoutientenzaehler Global $durchschnittswert Global $minimalwert = 999 ;dummywert für die Vergleichsroutine. Ansonsten würde beim Vergleich nichts in die Variable geschrieben werden können Global $maximalwert = 0 ; hier dasselbe wie bei $minimalwert Global $datei_minimalwert Global $datei_maximalwert Global $pfad_imc_wti = "E:\IMC_WTI_40_nm" Global $pfad_htu21 = "E:\HTU21" Global $pfad_fir = "E:\FIR" Global $pfad_wti_cu = "E:\WTi_Cu_WTi_stack" Global $wert_produkt Global $wert_los_id Global $aalle_dateien_in_quellpfad #Region ### START Koda GUI section ### Form=C:\Users\ihangebr\Desktop\AutoIt\Durchschnittswerte\durchschnittswerte.kxf $form_aetzzeitberechnung = GUICreate("Ätzzeitberechnung", 601, 361, 776, 357) $statusbar_unten = _GUICtrlStatusBar_Create($form_aetzzeitberechnung) ;~ $btn_pfad_waehlen = GUICtrlCreateButton("Pfad wählen", 296, 376, 155, 33) GUICtrlSetFont(-1, 12, 800, 0, "MS Sans Serif") $label_durchschn_aetzzeit = GUICtrlCreateLabel("Avrg. Ätzzeit:", 16, 168, 80, 17) GUICtrlSetFont(-1, 8, 800, 0, "MS Sans Serif") $label_min_aetzzeit = GUICtrlCreateLabel("Minimale Ätzzeit:", 16, 192, 99, 17) GUICtrlSetFont(-1, 8, 800, 0, "MS Sans Serif") $label_max_aetzzeit = GUICtrlCreateLabel("Maximale Ätzzeit:", 16, 240, 102, 17) GUICtrlSetFont(-1, 8, 800, 0, "MS Sans Serif") $btn_werte_berechnen = GUICtrlCreateButton("Kopieren und berechnen", 8, 120, 219, 33) GUICtrlSetFont(-1, 12, 800, 0, "MS Sans Serif") $label_wert_durchschn_aetzzeit = GUICtrlCreateLabel("keine Daten", 120, 168, 62, 17) $label_wert_min_aetzzeit = GUICtrlCreateLabel("keine Daten", 120, 192, 62, 17) $label_wert_max_aetzzeit = GUICtrlCreateLabel("keine Daten", 120, 240, 62, 17) $label_eingelesener_pfad = GUICtrlCreateLabel("Eingelesener Pfad:", 16, 296, 111, 17) GUICtrlSetFont(-1, 9, 800, 0, "MS Sans Serif") $label_wert_eingelesener_pfad = GUICtrlCreateLabel("keine Daten", 152, 296, 430, 17) $list_verarbeitete_dateien = GUICtrlCreateListView("Dateiname |Ätzzeit in Sek.", 272, 27, 313, 253) $label_verarbeitete_dateien = GUICtrlCreateLabel("Verarbeitete Dateien", 272, 8, 101, 17) $label_angemeldeter_benutzer = GUICtrlCreateLabel("Angemeldeter Benutzer:", 16, 320, 139, 17) GUICtrlSetFont(-1, 8, 800, 0, "MS Sans Serif") $label_wert_angemeldeter_benutzer = GUICtrlCreateLabel("-/-", 152, 320, 50, 17) $label_min_gefunden = GUICtrlCreateLabel("Min. gefunden in:", 16, 208, 86, 17) $label_max_gefunden = GUICtrlCreateLabel("Max. gefunden in:", 16, 256, 89, 17) $label_datei_max_aetzwert = GUICtrlCreateLabel("keine Daten", 120, 256, 150, 17) $label_datei_min_aetzwert = GUICtrlCreateLabel("keine Daten", 120, 208, 150, 17) $edit_losnummer = GUICtrlCreateInput("Losnummer eingeben", 8, 27, 121, 21) $label_losnummer = GUICtrlCreateLabel("Losnummer", 8, 8, 58, 17) $combo_produkt = GUICtrlCreateCombo("Produkt wählen", 8, 84, 145, 25, BitOR($CBS_DROPDOWN, $CBS_AUTOHSCROLL)) GUICtrlSetData(-1, "IMC_WTI_40_nm|HTU21|FIR|WTi_Cu_WTi_stack") $label_produkt = GUICtrlCreateLabel("Produkt wählen", 8, 64, 78, 17) GUISetState(@SW_SHOW) GUISetState(@SW_SHOW) #EndRegion ### END Koda GUI section ### GUICtrlSetData($label_wert_angemeldeter_benutzer, @UserName) While 1 $nMsg = GUIGetMsg() Switch $nMsg Case $GUI_EVENT_CLOSE Exit Case $btn_werte_berechnen _kopieren() EndSwitch WEnd Func _kopieren() ;kopiert Daten und erstellt dabei, falls notwendig, neue Verzeichnisse _werte_abfragen() $aalle_dateien_in_quellpfad = _FileListToArray($datei_pfad) If $wert_los_id = "Losnummer eingeben" Then ;überprüft ob eine Los-ID angegeben wurde. Falls nicht, wird eine Meldung ausgegeben MsgBox(1, "Keine Los-ID angegeben", "Es wurde keine Los-ID angegeben. Kopiervorgang nicht beendet. Bitte Los-ID angeben!") ElseIf $wert_produkt = "Produkt wählen" Then ;überprüft ob ein Produkt gewählt wurde. Falls nicht, wird eine Meldung ausgegeben. Falls ID und Produkt gewählt wurden, wird der Kopiervorgang gestartet MsgBox(1, "Kein Produkt gewählt", "Es wurde kein Produkt gewählt. Kopiervorgang nicht beendet. Bitte Produkt wählen!") Else For $i = 0 To UBound($aalle_dateien_in_quellpfad) - 1 FileCopy($datei_pfad & "\" & $aalle_dateien_in_quellpfad[$i], "E:\" & $wert_produkt & "\" & @MON & "." & @YEAR & "\" & $wert_los_id & "\", 8) ;kopiert alle Daten aus dem Quellverzeichnis in das Zielverzeichnis Next _werte_berechnen() EndIf EndFunc ;==>_kopieren Func _werte_berechnen() $aalle_dateien_in_pfad = _FileListToArray($datei_pfad, "*", 1) ;liest alle Dateien aus dem Pfad in ein Array ein For $i = 1 To UBound($aalle_dateien_in_pfad) - 1 ; sofern bei 0 angefangen wird zu zählen, kommt es zu einem Fehler!!! Local $filter_avi = StringInStr($aalle_dateien_in_pfad[$i], "avi", 0, 1, StringLen($aalle_dateien_in_pfad[$i]) - 3) ;sucht in dem aktuellen String nach "avi" und . avi-Dateien sollen nicht verarbeitet werden, daher ist diese Info wichtig Local $filter_db = StringInStr($aalle_dateien_in_pfad[$i], "db", 0, 1, StringLen($aalle_dateien_in_pfad[$i]) - 2) ;für thumb.db If $filter_avi < 1 And $filter_db < 1 Then ; wird nur ausgeführt, sofern diese Datei keine .avi und keine .db ist $adatei_eingelesen = FileReadToArray($datei_pfad & "\" & $aalle_dateien_in_pfad[$i]) ;liest die Textdatei in das Array Local $aetzwert = StringLeft($adatei_eingelesen[UBound($adatei_eingelesen) - 1], 3) ;extrahiert den Ätzwert aus der letzten Zeile der eingelesenen Datei $rechenvariable = $rechenvariable + $aetzwert $qoutientenzaehler = $qoutientenzaehler + 1 $arechenearray[UBound($arechenearray) - 1][0] = $aalle_dateien_in_pfad[$i] $arechenearray[UBound($arechenearray) - 1][1] = $aetzwert ;schreit die Ätzwerte in das Rechenarray ReDim $arechenearray[UBound($arechenearray) + 1][2] EndIf Next _ArrayDelete($arechenearray, UBound($arechenearray) - 1) ; löscht den letzten Arrayeintrag (der = 0 ist) damit die Minimalwertberechnung vernünftig abgearbeitet werden kann For $i = 0 To UBound($arechenearray) - 1 ;Minimalwert If $arechenearray[$i][1] < $minimalwert Then $minimalwert = $arechenearray[$i][1] ;schreibt den Minimalwert aus dem Array in die Variable $datei_minimalwert = $arechenearray[$i][0] ;schreibt den Dateinamen mit dem Minimalwert aus dem Array in die Variable EndIf ;Maximalwert If $arechenearray[$i][1] > $maximalwert Then $maximalwert = $arechenearray[$i][1] ; wie oben, nur mit dem Maximalwert $datei_maximalwert = $arechenearray[$i][0] ;wie oben, nur mit Datei mit Maximalwert EndIf Next ; Durchschnittswert $durchschnittswert = Round($rechenvariable / $qoutientenzaehler, 2) _label_aktualisieren() _listview_update() ; löscht den vorherigen inhalt aus dem listview ; Setzt alle Rechenvariablen wieder zurück $datei_minimalwert = "" $datei_maximalwert = "" $durchschnittswert = 0 $minimalwert = 999 ;standarddummywerte $maximalwert = 0 $qoutientenzaehler = 0 ;Setzt den Qoutientenzähle auf 0 zurück $rechenvariable = 0 ;setzt die Rechenvariable nach jedem Rechenvorgang wieder auf 0 zurück ReDim $arechenearray[1][2] ; setzt das rechenarray nach jeder Berechnung wieder zurück EndFunc ;==>_werte_berechnen Func _pfad_waehlen() ; Mit dieser Funktion, wird der Ordner manuell geladen, der gelesen werden soll und wo die Durchschnittswerte der Ätzzeiten in den Dateien berechnet werden sollen Local Const $sMessage = "Ordner zum Einlesen wählen" Local $gewaehlter_ordner = FileSelectFolder($sMessage, "") If @error Then MsgBox(1, "Kein Ordner ausgewählt", "Kein Ordner gewählt, Durchschnittswerte werden nicht berechnet!") Else $datei_pfad = $gewaehlter_ordner ;~ MsgBox(1,1, $datei_pfad) EndIf GUICtrlSetData($label_wert_eingelesener_pfad, $datei_pfad) EndFunc ;==>_pfad_waehlen Func _label_aktualisieren() GUICtrlSetData($label_wert_durchschn_aetzzeit, $durchschnittswert & " Sek.") GUICtrlSetData($label_wert_min_aetzzeit, $minimalwert & " Sek.") GUICtrlSetData($label_wert_max_aetzzeit, $maximalwert & " Sek.") GUICtrlSetData($label_datei_min_aetzwert, $datei_minimalwert) GUICtrlSetData($label_datei_max_aetzwert, $datei_maximalwert) GUICtrlSetData($label_wert_eingelesener_pfad, $datei_pfad) EndFunc ;==>_label_aktualisieren Func _listview_update() ; updated das LisView wenn Änderungen am Array und damit dem ListView vorgenommen wurden _GUICtrlListView_DeleteAllItems(GUICtrlGetHandle($list_verarbeitete_dateien)) _GUICtrlListView_AddArray($list_verarbeitete_dateien, $arechenearray) ;~ _ArrayDisplay($arechenearray) EndFunc ;==>_listview_update Func _werte_abfragen() $wert_los_id = GUICtrlRead($edit_losnummer);Holt die Daten aus dem Controls ab $wert_produkt = GUICtrlRead($combo_produkt) EndFunc ;==>_werte_abfragen
-
Das hat das Problem gelöst, danke!
-
Hier ist die aktuelle Version des Skriptes:
C
Alles anzeigen#include <ButtonConstants.au3> #include <ComboConstants.au3> #include <EditConstants.au3> #include <GUIConstantsEx.au3> #include <GUIListBox.au3> #include <StaticConstants.au3> #include <WindowsConstants.au3> #include <Array.au3> #include <GuiStatusBar.au3> #include <GUIConstantsEx.au3> #include <ScreenCapture.au3> #include <File.au3> #include <GUIListView.au3> Global $datei_pfad Global $adatei_eingelesen Global $aalle_dateien_in_pfad dim $arechenearray[1][2] Global $rechenvariable Global $qoutientenzaehler Global $durchschnittswert Global $minimalwert = 999 ;dummywert für die Vergleichsroutine. Ansonsten würde beim Vergleich nichts in die Variable geschrieben werden können Global $maximalwert = 0 ; hier dasselbe wie bei $minimalwert #Region ### START Koda GUI section ### Form=C:\Users\ihangebr\Desktop\AutoIt\Durchschnittswerte\durchschnittswerte.kxf $Form1 = GUICreate("Form1", 601, 367, 434, 232) $statusbar_unten = _GUICtrlStatusBar_Create($Form1) $btn_pfad_waehlen = GUICtrlCreateButton("Pfad wählen", 8, 8, 155, 33) GUICtrlSetFont(-1, 12, 800, 0, "MS Sans Serif") $label_durchschn_aetzzeit = GUICtrlCreateLabel("Durchschnittliche Ätzzeit:", 8, 96, 149, 17) GUICtrlSetFont(-1, 8, 800, 0, "MS Sans Serif") $label_min_aetzzeit = GUICtrlCreateLabel("Minimale Ätzzeit:", 8, 120, 99, 17) GUICtrlSetFont(-1, 8, 800, 0, "MS Sans Serif") $label_max_aetzzeit = GUICtrlCreateLabel("Maximale Ätzzeit:", 8, 144, 102, 17) GUICtrlSetFont(-1, 8, 800, 0, "MS Sans Serif") $btn_werte_berechnen = GUICtrlCreateButton("Werte berechnen", 8, 48, 155, 33) GUICtrlSetFont(-1, 12, 800, 0, "MS Sans Serif") $label_wert_durchschn_aetzzeit = GUICtrlCreateLabel("keine Daten", 168, 96, 62, 17) $label_wert_min_aetzzeit = GUICtrlCreateLabel("keine Daten", 168, 120, 62, 17) $label_wert_max_aetzzeit = GUICtrlCreateLabel("keine Daten", 168, 144, 62, 17) $label_eingelesener_pfad = GUICtrlCreateLabel("Eingelesener Pfad:", 8, 296, 111, 17) GUICtrlSetFont(-1, 9, 800, 0, "MS Sans Serif") $label_wert_eingelesener_pfad = GUICtrlCreateLabel("Kein Pfad gewählt", 120, 296, 469, 17) $list_verarbeitete_dateien = GUICtrlCreateListView("", 272, 32, 313, 253) $label_verarbeitete_dateien = GUICtrlCreateLabel("Verarbeitete Dateien", 272, 8, 101, 17) $label_angemeldeter_benutzer = GUICtrlCreateLabel("Angemeldeter Benutzer:", 8, 320, 139, 17) GUICtrlSetFont(-1, 8, 800, 0, "MS Sans Serif") $label_wert_angemeldeter_benutzer = GUICtrlCreateLabel("-/-", 160, 320, 150, 17) GUISetState(@SW_SHOW) #EndRegion ### END Koda GUI section ### GUICtrlSetData($label_wert_angemeldeter_benutzer, @UserName) While 1 $nMsg = GUIGetMsg() Switch $nMsg Case $GUI_EVENT_CLOSE Exit Case $btn_werte_berechnen _werte_berechnen() Case $btn_pfad_waehlen _pfad_waehlen() EndSwitch WEnd Func _werte_berechnen() $aalle_dateien_in_pfad = _FileListToArray($datei_pfad) ;liest alle Dateien aus dem Pfad in ein Array ein for $i = 1 to UBound($aalle_dateien_in_pfad) - 1 ; sofern bei 0 angefangen wird zu zählen, kommt es zu einem Fehler!!! Local $filter_avi = StringInStr($aalle_dateien_in_pfad[$i], "avi", 0, 1, StringLen($aalle_dateien_in_pfad[$i]) - 3) ;sucht in dem aktuellen String nach "avi" und . avi-Dateien sollen nicht verarbeitet werden, daher ist diese Info wichtig Local $filter_db = StringInStr($aalle_dateien_in_pfad[$i], "db", 0, 1, StringLen($aalle_dateien_in_pfad[$i]) - 2) ;für thumb.db If $filter_avi < 1 and $filter_db < 1 Then ; wird nur ausgeführt, sofern diese Datei keine .avi und keine .db ist $adatei_eingelesen = FileReadToArray($datei_pfad & "\" & $aalle_dateien_in_pfad[$i]) ;liest die Textdatei in das Array Local $aetzwert = StringLeft($adatei_eingelesen[UBound($adatei_eingelesen) - 1], 3) ;extrahiert den Ätzwert aus der letzten Zeile der eingelesenen Datei $rechenvariable = $rechenvariable + $aetzwert $qoutientenzaehler = $qoutientenzaehler + 1 $arechenearray[UBound($arechenearray) - 1][0] = $aalle_dateien_in_pfad[$i] $arechenearray[UBound($arechenearray) - 1][1] = $aetzwert ;schreit die Ätzwerte in das Rechenarray ReDim $arechenearray[UBound($arechenearray) + 1][2] EndIf Next _ArrayDelete($arechenearray, UBound($arechenearray) - 1) ; löscht den letzten Arrayeintrag (der = 0 ist) damit die Minimalwertberechnung vernünftig abgearbeitet werden kann For $i = 0 to UBound($arechenearray) - 1 ;Minimalwert if $arechenearray[$i][1] < $minimalwert Then $minimalwert = $arechenearray[$i][1] EndIf ;Maximalwert If $arechenearray[$i][1] > $maximalwert Then $maximalwert = $arechenearray[$i][1] EndIf Next ; Durchschnittswert $durchschnittswert = Round($rechenvariable / $qoutientenzaehler, 2) _label_aktualisieren() _listview_update() ; löscht den vorherigen inhalt aus dem listview $durchschnittswert = 0 $minimalwert = 999 ;standarddummywerte $maximalwert = 0 $qoutientenzaehler = 0 ;Setzt den Qoutientenzähle auf 0 zurück $rechenvariable = 0 ;setzt die Rechenvariable nach jedem Rechenvorgang wieder auf 0 zurück ReDim $arechenearray[1][2] ; setzt das rechenarray nach jeder Berechnung wieder zurück EndFunc Func _pfad_waehlen() ; Mit dieser Funktion, wird der Ordner manuell geladen, der gelesen werden soll und wo die Durchschnittswerte der Ätzzeiten in den Dateien berechnet werden sollen Local Const $sMessage = "Ordner zum Einlesen wählen" Local $gewaehlter_ordner = FileSelectFolder($sMessage, "") If @error Then MsgBox(1, "Kein Ordner ausgewählt", "Kein Ordner gewählt, Durchschnittswerte werden nicht berechnet!") Else $datei_pfad = $gewaehlter_ordner ;~ MsgBox(1,1, $datei_pfad) EndIf GUICtrlSetData($label_wert_eingelesener_pfad, $datei_pfad) EndFunc ;==>Example Func _label_aktualisieren() GUICtrlSetData($label_wert_durchschn_aetzzeit, $durchschnittswert & " Sek.") GUICtrlSetData($label_wert_min_aetzzeit, $minimalwert & " Sek.") GUICtrlSetData($label_wert_max_aetzzeit, $maximalwert & " Sek.") EndFunc Func _listview_update() ; updated das LisView wenn Änderungen am Array und damit dem ListView vorgenommen wurden ;~ _GUICtrlListView_DeleteAllItems(GUICtrlGetHandle($list_verarbeitete_dateien)) _GUICtrlListView_AddArray($list_verarbeitete_dateien, $arechenearray) _ArrayDisplay($arechenearray) EndFunc
-
Okay, ein weiteres Problem habe ich nun immernoch: Zwar füllt er das Listvie offenbar mit Daten, ich sehe ich Daten aber nicht, obwohl ich im ListView scrollen kann.
-
Alles klar, vielen Dank!
-
Hallo Leute. Ich wollte die Funktion _GUICtrlListView_AddArray() verwenden, wie ich es schon häufiger getan habe. In meinem jetztigen Script meckert aber AutoIt, dass in Line 476 ein Fehler gefunden wurde. "Error: Array variable has incorrect number of subscripts or subscript dimension range exceeded.". Das sagt er für das Skript "GUIListView.au3". Das Array um das es geht, hat weniger als 30 Einträge. Was kann das sein? Hier mein Script:
C
Alles anzeigen#include <ButtonConstants.au3> #include <ComboConstants.au3> #include <EditConstants.au3> #include <GUIConstantsEx.au3> #include <GUIListBox.au3> #include <StaticConstants.au3> #include <WindowsConstants.au3> #include <Array.au3> #include <GuiStatusBar.au3> #include <GUIConstantsEx.au3> #include <ScreenCapture.au3> #include <File.au3> #include <GUIListView.au3> Global $datei_pfad Global $adatei_eingelesen Global $aalle_dateien_in_pfad dim $arechenearray[1] Global $rechenvariable Global $qoutientenzaehler Global $durchschnittswert Global $minimalwert = 999 ;dummywert für die Vergleichsroutine. Ansonsten würde beim Vergleich nichts in die Variable geschrieben werden können Global $maximalwert = 0 ; hier dasselbe wie bei $minimalwert #Region ### START Koda GUI section ### Form=C:\Users\ihangebr\Desktop\AutoIt\Durchschnittswerte\durchschnittswerte.kxf $Form1 = GUICreate("Form1", 601, 367, 434, 232) $statusbar_unten = _GUICtrlStatusBar_Create($Form1) $btn_pfad_waehlen = GUICtrlCreateButton("Pfad wählen", 8, 8, 155, 33) GUICtrlSetFont(-1, 12, 800, 0, "MS Sans Serif") $label_durchschn_aetzzeit = GUICtrlCreateLabel("Durchschnittliche Ätzzeit:", 8, 96, 149, 17) GUICtrlSetFont(-1, 8, 800, 0, "MS Sans Serif") $label_min_aetzzeit = GUICtrlCreateLabel("Minimale Ätzzeit:", 8, 120, 99, 17) GUICtrlSetFont(-1, 8, 800, 0, "MS Sans Serif") $label_max_aetzzeit = GUICtrlCreateLabel("Maximale Ätzzeit:", 8, 144, 102, 17) GUICtrlSetFont(-1, 8, 800, 0, "MS Sans Serif") $btn_werte_berechnen = GUICtrlCreateButton("Werte berechnen", 8, 48, 155, 33) GUICtrlSetFont(-1, 12, 800, 0, "MS Sans Serif") $label_wert_durchschn_aetzzeit = GUICtrlCreateLabel("keine Daten", 168, 96, 62, 17) $label_wert_min_aetzzeit = GUICtrlCreateLabel("keine Daten", 168, 120, 62, 17) $label_wert_max_aetzzeit = GUICtrlCreateLabel("keine Daten", 168, 144, 62, 17) $label_eingelesener_pfad = GUICtrlCreateLabel("Eingelesener Pfad:", 8, 296, 111, 17) GUICtrlSetFont(-1, 9, 800, 0, "MS Sans Serif") $label_wert_eingelesener_pfad = GUICtrlCreateLabel("Kein Pfad gewählt", 120, 296, 469, 17) $list_verarbeitete_dateien = GUICtrlCreateListView("", 272, 32, 313, 253) $label_verarbeitete_dateien = GUICtrlCreateLabel("Verarbeitete Dateien", 272, 8, 101, 17) $label_angemeldeter_benutzer = GUICtrlCreateLabel("Angemeldeter Benutzer:", 8, 320, 139, 17) GUICtrlSetFont(-1, 8, 800, 0, "MS Sans Serif") $label_wert_angemeldeter_benutzer = GUICtrlCreateLabel("-/-", 160, 320, 150, 17) GUISetState(@SW_SHOW) #EndRegion ### END Koda GUI section ### GUICtrlSetData($label_wert_angemeldeter_benutzer, @UserName) While 1 $nMsg = GUIGetMsg() Switch $nMsg Case $GUI_EVENT_CLOSE Exit Case $btn_werte_berechnen _werte_berechnen() Case $btn_pfad_waehlen _pfad_waehlen() EndSwitch WEnd Func _werte_berechnen() _listview_update() ; löscht den vorherigen inhalt aus dem listview $aalle_dateien_in_pfad = _FileListToArray($datei_pfad) ;liest alle Dateien aus dem Pfad in ein Array ein for $i = 1 to UBound($aalle_dateien_in_pfad) - 1 ; sofern bei 0 angefangen wird zu zählen, kommt es zu einem Fehler!!! Local $filter_avi = StringInStr($aalle_dateien_in_pfad[$i], "avi", 0, 1, StringLen($aalle_dateien_in_pfad[$i]) - 3) ;sucht in dem aktuellen String nach "avi" und . avi-Dateien sollen nicht verarbeitet werden, daher ist diese Info wichtig Local $filter_db = StringInStr($aalle_dateien_in_pfad[$i], "db", 0, 1, StringLen($aalle_dateien_in_pfad[$i]) - 2) ;für thumb.db If $filter_avi < 1 and $filter_db < 1 Then ; wird nur ausgeführt, sofern diese Datei keine .avi und keine .db ist $adatei_eingelesen = FileReadToArray($datei_pfad & "\" & $aalle_dateien_in_pfad[$i]) ;liest die Textdatei in das Array Local $aetzwert = StringLeft($adatei_eingelesen[UBound($adatei_eingelesen) - 1], 3) ;extrahiert den Ätzwert aus der letzten Zeile der eingelesenen Datei $rechenvariable = $rechenvariable + $aetzwert $qoutientenzaehler = $qoutientenzaehler + 1 $arechenearray[UBound($arechenearray) - 1] = $aetzwert ;schreit die Ätzwerte in das Rechenarray ReDim $arechenearray[UBound($arechenearray) + 1] ;~ GUICtrlCreateListViewItem($aalle_dateien_in_pfad[$i], $list_verarbeitete_dateien) EndIf Next _ArrayDelete($arechenearray, UBound($arechenearray) - 1) ; löscht den letzten Arrayeintrag (der = 0 ist) damit die Minimalwertberechnung vernünftig abgearbeitet werden kann For $i = 0 to UBound($arechenearray) - 1 ;Minimalwert if $arechenearray[$i] < $minimalwert Then $minimalwert = $arechenearray[$i] EndIf ;Maximalwert If $arechenearray[$i] > $maximalwert Then $maximalwert = $arechenearray[$i] EndIf Next ; Durchschnittswert $durchschnittswert = Round($rechenvariable / $qoutientenzaehler, 2) _label_aktualisieren() ;~ MsgBox(1,"durchschnittswert", $durchschnittswert) ;~ MsgBox(1,"minimalwert", $tmp_min_wert) ;~ MsgBox(1,"maximalwert", $tmp_max_wert) $durchschnittswert = 0 $minimalwert = 999 ;standarddummywerte $maximalwert = 0 $qoutientenzaehler = 0 ;Setzt den Qoutientenzähle auf 0 zurück $rechenvariable = 0 ;setzt die Rechenvariable nach jedem Rechenvorgang wieder auf 0 zurück ReDim $arechenearray[1] ; setzt das rechenarray nach jeder Berechnung wieder zurück EndFunc Func _pfad_waehlen() ; Mit dieser Funktion, wird der Ordner manuell geladen, der gelesen werden soll und wo die Durchschnittswerte der Ätzzeiten in den Dateien berechnet werden sollen Local Const $sMessage = "Ordner zum Einlesen wählen" Local $gewaehlter_ordner = FileSelectFolder($sMessage, "") If @error Then MsgBox(1, "Kein Ordner ausgewählt", "Kein Ordner gewählt, Durchschnittswerte werden nicht berechnet!") Else $datei_pfad = $gewaehlter_ordner ;~ MsgBox(1,1, $datei_pfad) EndIf GUICtrlSetData($label_wert_eingelesener_pfad, $datei_pfad) EndFunc ;==>Example Func _label_aktualisieren() GUICtrlSetData($label_wert_durchschn_aetzzeit, $durchschnittswert & " Sek.") GUICtrlSetData($label_wert_min_aetzzeit, $minimalwert & " Sek.") GUICtrlSetData($label_wert_max_aetzzeit, $maximalwert & " Sek.") EndFunc Func _listview_update() ; updated das LisView wenn Änderungen am Array und damit dem ListView vorgenommen wurden ;~ _ArrayDisplay($aalle_dateien_in_pfad) _GUICtrlListView_DeleteAllItems(GUICtrlGetHandle($list_verarbeitete_dateien)) _GUICtrlListView_AddArray($list_verarbeitete_dateien, $arechenearray) EndFunc
-
Klappt, perfekt, vielen Dank!
-
Mein Code wäre der folgende. Der Anhang ist eine txt-Datei, die musst du als zur .csv umbennen und im gleichen Verzeichnis haben wie das Script. Eigentlich genügt eine normale Auswahl. Farbige Markierungen wären nett, aber nicht erforderlich.
C
Alles anzeigen#include <ButtonConstants.au3> #include <ComboConstants.au3> #include <EditConstants.au3> #include <GUIConstantsEx.au3> #include <GUIListBox.au3> #include <StaticConstants.au3> #include <WindowsConstants.au3> #include <Array.au3> #include <createQRw.au3> #include <GUIConstantsEx.au3> #include <ScreenCapture.au3> #include <File.au3> #include <GUIListView.au3> Global $pfad_qr_biler = @ScriptDir & "\QR-Code Bilder\" Dim $aDB_inhalt[1][3] Global $wert_input_seriennummer Global $wert_combo_geraetetyp Global $wert_input_info Global $qr_bild Global $datum = @MDAY & "." & @MON & "." & @YEAR & " " & @HOUR & "." & @MIN & "." & @SEC Global $acsv_tmp ; ein Array, in dem die eingelesene CSV-Datei (noch unformatiert) zwischengespeichert wird Global $aauswahl_fuer_kontext ; in dieses Array werden inhalte geschrieben, wenn etwas aus dem Listview in den Kontext übernommen wird Global $atmp_array_kontext ; enthält ein array, welches die Position des markierten Eintrags inm Listview enthält Global $auswahl ; enthält den Arrayeintrag der Varibalen $atmp_array_kontext Dim $asuchergebnisse[1][2] ; wenn eine Suche gestartet wird, beinhaltet dieses Array die Indicies der Suchergebnisse Global $wert_input_suche ; Varbiable in der der Wert gespeichert wird, der in dem Suchfeld eingegeben wurde _FileReadToArray(@ScriptDir & "\test.csv", $acsv_tmp) #Region ### START Koda GUI section ### Form=c:\users\ihangebr\desktop\inventarisierung\inventarisierung.kxf $form_inventarisierung = GUICreate("Inventarisierung v1.0", 1090, 543, 387, 230) GUISetBkColor(0xB9D1EA) $input_suche = GUICtrlCreateInput("Suche", 8, 8, 257, 21) GUICtrlSetFont(-1, 8, 800, 0, "MS Sans Serif") $group_bearbeitung = GUICtrlCreateGroup("BEARBEITUNG", 368, 8, 225, 193) GUICtrlSetFont(-1, 8, 800, 0, "MS Sans Serif") GUICtrlSetColor(-1, 0x000000) $input_seriennummer = GUICtrlCreateInput("Seriennummer", 385, 28, 190, 21) $btn_neuer_posten = GUICtrlCreateButton("Neuen Posten anlegen", 383, 115, 190, 33) $input_info = GUICtrlCreateInput("Standort oder Mitarbeiter", 384, 83, 190, 21) $combo_geraetetyp = GUICtrlCreateCombo("Gerätekategorie", 384, 56, 190, 40, BitOR($CBS_DROPDOWN, $CBS_AUTOHSCROLL)) GUICtrlSetData(-1, "Desktop PC|Settop PC|Kleinstrechner|Notebook|Smartphone|Mobiles Telefon|Stationäres Telefon|TFT-Monitor 24" & Chr(34) & "|TFT-Monitor sonstige") $btn_aendern = GUICtrlCreateButton("Änderungen übernehmen", 383, 153, 190, 33) GUICtrlCreateGroup("", -99, -99, 1, 1) $list_datenbankinhalt = GUICtrlCreateListView("", 8, 32, 353, 435) $Group3 = GUICtrlCreateGroup("LOG", 832, 8, 233, 201) GUICtrlSetFont(-1, 8, 800, 0, "Arial") $list_log = GUICtrlCreateListView("", 842, 27, 217, 174) GUICtrlCreateGroup("", -99, -99, 1, 1) $btn_suchen = GUICtrlCreateButton("Suchen", 270, 6, 91, 25) GUICtrlSetFont(-1, 8, 800, 0, "MS Sans Serif") $btn_in_kontext = GUICtrlCreateButton("Auswahl in Kontext übernehmen", 8, 472, 195, 33) GUICtrlSetFont(-1, 8, 800, 0, "MS Sans Serif") $btn_loeschen = GUICtrlCreateButton("Auswahl löschen", 204, 472, 155, 33) GUICtrlSetFont(-1, 8, 800, 0, "MS Sans Serif") $group_qr_code = GUICtrlCreateGroup("QR-Code", 600, 8, 225, 329) GUICtrlSetFont(-1, 8, 800, 0, "MS Sans Serif") $pic_qr_code = GUICtrlCreatePic("C:\Users\ihangebr\Desktop\inventarisierung\beispielcode.JPG", 613, 104, 200, 200) $label_qr_inhalt = GUICtrlCreateLabel("Beispielcode", 610, 310, 206, 20, $SS_CENTER) GUICtrlSetFont(-1, 10, 800, 0, "Arial") GUICtrlSetBkColor(-1, 0xFFFFFF) $btn_speichere_qr = GUICtrlCreateButton("QR-Code speichern", 613, 64, 190, 33) $btn_generiere_qr = GUICtrlCreateButton("QR-Code generieren", 612, 28, 190, 33) GUICtrlCreateGroup("", -99, -99, 1, 1) GUISetState(@SW_SHOW) #EndRegion ### END Koda GUI section ### _erstelle_spalten() _csv_2_array() ; muss nach dem erstellen aller GUI-Elemente ausgeführt werden, da es sonst Probleme mit dem ListView gibt! While 1 $nMsg = GUIGetMsg() Switch $nMsg Case $GUI_EVENT_CLOSE Exit Case $btn_neuer_posten _neuer_posten() Case $btn_generiere_qr _qr_code_generieren() Case $btn_speichere_qr _qr_speichern() Case $btn_loeschen _eintrag_loeschen() Case $btn_aendern _eintrag_aendern() Case $btn_in_kontext _in_kontext_ubernehmen() Case $btn_suchen _suchen() EndSwitch WEnd Func _ausgewaehltes_item() $atmp_array_kontext = _GUICtrlListView_GetSelectedIndices($list_datenbankinhalt, True) ; Liest welcher Eintrag selektiert wurde und schreibt diesen in ein Array. In Zeile 1 steht die Nummer des selektierten Eintrags $auswahl = $atmp_array_kontext[1] EndFunc ;==>_ausgewaehltes_item Func _in_kontext_ubernehmen() ; von dem markierten Objekt werden die Inhalte in die Inputfelder geschrieben _ausgewaehltes_item() $aauswahl_fuer_kontext = _GUICtrlListView_GetItemTextArray($list_datenbankinhalt, $auswahl) ; wenn der eintrag markiert wurde dann wird hiermit der Inhalt der markierten Zeile ausgelesen. Es wird ein Array ausgegeben dessen erste Zeile uninteressant ist, da dort geschrieben steht, wieviele Zeilen das Array lang ist. GUICtrlSetData($input_seriennummer, $aauswahl_fuer_kontext[1]) ; Fügt die Einträge des Arrays den Controls hinzu. Der Inhalt der Controls wird hierbei angepasst und verändert GUICtrlSetData($combo_geraetetyp, $aauswahl_fuer_kontext[2]) GUICtrlSetData($input_info, $aauswahl_fuer_kontext[3]) _qr_code_generieren() EndFunc ;==>_in_kontext_ubernehmen Func _eintrag_aendern() _werte_abfragen() _ausgewaehltes_item() ; muss noch komplettiert werden EndFunc ;==>_eintrag_aendern Func _suchen() _werte_abfragen() Dim $asucharray_tmp ;definiert ein lokales temporäres Sucharray. Ausdiesem Array werden später die Daten in das finale Array geschrieben For $i = 0 To 3 - 1 $asucharray_tmp = _ArrayFindAll($aDB_inhalt, $wert_input_suche, 0, UBound($aDB_inhalt), 0, 1, $i, 0) ; findet alle Scuhergebnisse im Array und schreibt die Indicies, wo die Suchergebnisse gefunden wurden, in eine separates Array If @error Then ;Hier kann evt. ein Log-Eintrag erfolgen ;~ MsgBox(1, "Keine Suchergebnisse", "In Spalte " & $i & " ergab die Suche keine Treffer.") Else For $j = 0 To UBound($asucharray_tmp) - 1 $asuchergebnisse[UBound($asuchergebnisse) - 1][0] = $asucharray_tmp[$j] ; schreibt den Inhalt des temporären Sucharray für Spalte n in das finale Sucharray $asuchergebnisse[UBound($asuchergebnisse) - 1][1] = $i ; schreibt den Inhalt des temporären Sucharray für Spalte n in das finale Sucharray ReDim $asuchergebnisse[UBound($asuchergebnisse) + 1][2] Next EndIf Next _ArrayDisplay($asuchergebnisse) For $i = 0 To 40 - 1 ;suchergebnisse in liste markieren _GUICtrlListView_SetItemSelected($list_datenbankinhalt, $i) Sleep(800) Next ;~ ReDim $asucharray_tmp[1] ReDim $asuchergebnisse[1][2] ;arrays leeren EndFunc ;==>_suchen Func _neuer_posten() ; fügt einen neuen posten in einer neuen zeile dem array hinzu _werte_abfragen() $aDB_inhalt[UBound($aDB_inhalt) - 1][0] = $wert_input_seriennummer $aDB_inhalt[UBound($aDB_inhalt) - 1][1] = $wert_combo_geraetetyp $aDB_inhalt[UBound($aDB_inhalt) - 1][2] = $wert_input_info ReDim $aDB_inhalt[UBound($aDB_inhalt) + 1][3] _listview_update() EndFunc ;==>_neuer_posten Func _qr_code_generieren() _werte_abfragen() _createQRw_($wert_input_seriennummer, $pic_qr_code, @ScriptDir & '\~QR_mesale0077.bmp') ; generiert den QR-Code und zeigt ihn im Bereich des Bildes an GUICtrlSetData($label_qr_inhalt, $wert_input_seriennummer) ; Passt den Inhalt des Labels an EndFunc ;==>_qr_code_generieren Func _qr_speichern() _werte_abfragen() $qr_bild = _ScreenCapture_Capture("", 295, 438, 492, 658) ; Definiert den Bereich, von dem ein Bild gemacht werden soll. Beschränkt wird sich hierbei auf den Bereich, wo der QR-Code ist und dessen beschreibung _ScreenCapture_SaveImage(@ScriptDir & "\QR-Code Bilder\" & $wert_combo_geraetetyp & "_" & $wert_input_seriennummer & "_" & $datum & ".jpg", $qr_bild) ;Speichert das Bild unter einem spezifischen namen ab EndFunc ;==>_qr_speichern Func _werte_abfragen() ; in dieser Funktion werden alle Werte aller Controls abgefragt, wo Benutzereingaben getätigt werden können $wert_input_seriennummer = GUICtrlRead($input_seriennummer) $wert_combo_geraetetyp = GUICtrlRead($combo_geraetetyp) $wert_input_info = GUICtrlRead($input_info) $wert_input_suche = GUICtrlRead($input_suche) EndFunc ;==>_werte_abfragen Func _listview_update() ; updated das LisView wenn Änderungen am Array und damit dem ListView vorgenommen wurden _GUICtrlListView_DeleteAllItems(GUICtrlGetHandle($list_datenbankinhalt)) _GUICtrlListView_AddArray($list_datenbankinhalt, $aDB_inhalt) EndFunc ;==>_listview_update Func _erstelle_spalten() ;erstellt die Spalten mit Größe und bezeichnung für die ListViews _GUICtrlListView_AddColumn($list_datenbankinhalt, "Seriennummer", 100) _GUICtrlListView_AddColumn($list_datenbankinhalt, "Typ", 100) _GUICtrlListView_AddColumn($list_datenbankinhalt, "Info", 56) EndFunc ;==>_erstelle_spalten Func _eintrag_loeschen() ; löscht den markierten Eintrag aus dem Array _ausgewaehltes_item() _ArrayDelete($aDB_inhalt, $auswahl) _listview_update() EndFunc ;==>_eintrag_loeschen Func _csv_2_array() ; Konvertiert eine eingelesene CSV-Datei in ein Array Local $atmp ; temporäres Array, in dem der Inhalt des gesplitteten Strings zwischengespeichert wird For $i = 0 To UBound($acsv_tmp) - 1 ; $atmp = StringSplit($acsv_tmp[$i], ";") For $j = 1 To UBound($atmp) - 1 $aDB_inhalt[$i][$j - 1] = $atmp[$j] ; speichert jede zeile aus $atmp in jede spalte von $aDB_inhalt Next ReDim $aDB_inhalt[UBound($aDB_inhalt) + 1][3] Next _ArrayDelete($aDB_inhalt, 0) ;in der ersten Zeile des Arrays wird die Anzahl der Zeilen mit dargestellt. Dieser Ausdruck löscht diesen Eintrag _listview_update() EndFunc ;==>_csv_2_array
-
Hallo Leute. Ich habe eine Liste, die ich mir in einem ListView in einer GUI anzeigen lasse. Ich habe mir nun einen kleinen Algorythmus gebaut, der eben diese Liste, bzw. das Array aus dem das ListView gespeist wird, durchsucht wird. Es kann durchaus vorkommen dass eine Suchanfrage mehrmals in der Liste gefunden wird. Die indicies der Suchergebnisse werden in einem weiteren Array gespeichert und ich möchte nun gerne alle Zeilen, in denen ein Suchergebnis gefunden wurde, markieren lassen. Wie kann ich das bewerkstelligen?
-
Hallo Leute. Ich möchte einen Befehl mit @comspec absetze und gerne mit dem Ausgabewert in AutoIt weiterarbeiten. Wie stelle ich da an?
-
Hallo. Ich möchte gerne ein Citrixfenster mit WinMove() verschieben, funktioniert aber nicht. Gibt es eine Möglichkeit wie man das hinbekommen kann?
-
Da habe ich ja was los getreten Der zweite Post hat mir schon geholfen, vielen Dank!
-
Hallo miteinander. Ich möchte mir gerne ein Array mit Prozessnamen erstellen lassen. Jetzt denkt ihr sicher "da ist ProcessList() das Richtige für dich!". Ist es aber leider nicht. Habe ich z. B. ein Editorfenster offen zeigt mir ProcessList() nur dass "notepad.exe" gestartet ist. Ich würde aber gerne den Namen des offenen Dokuments herausfinden, nämlich "Berechnung 1.txt" wie es auch in der Anwendungsübersicht im Taskmanager (Windows 7) angezeigt wird. Gibt es dafür eine Möglichkeit unter AutoIt?
-
-
Hallo. Ich möchte gerne unter Windows 10 das Kennwort von einem User ändern. Geht das ohne stupides Maus-GUI-Geklicke?
-
Ich habe mir die Hilfe angesehen. Ich kann damit aber so nicht wirklich was anfangen, weshalb ich hier den Thread eröffnet habe. Ich möchte nicht zwischen zwei AutoIt-Skripten kommunizieren, sondern zuerst testweise zwischen einer Smartphone-App und dem AutoIt-Skript. Später dann wollte ich UDP-Daten von dem Skript an einen Arduino-Netzwerkadapter schicken. Aber wie gesagt ist das mit dem Smartphone der erste Schritt. Mit meinem Code funktioniert das allerdings noch nicht.