Mit den Codeschnipseln kann ich (andere war scheins auch) nichts anfangen. Du solltest also ein Beispielskript basteln, daß dein Anliegen/Problem verdeutlicht.
Beiträge von autoBert
-
-
Mein etwas altersschwache Netbook liefert immer noch:
Code
Alles anzeigen--> Press Ctrl+Alt+Break to Restart or Ctrl+Break to Stop ! Benoetigte Zeit, um das Listview mit _GUICtrlListView_AddArray zu befuellen ($aLV[1600][32]): 00:00:03:153:2147483647 ! MemoryStatus Percent of Mem in use : 83 Physical Mem: Total : 2026266624 Physical Mem: Free : 329748480 Paging file: Total : 4844838912 Paging file: Free : 1477885952 User Mem: Total : 140737488224256 User Mem: Free : 140732970659840
Win10 Home 1803 64b.
Die User Mem Angaben irritieren mich, welcher Speicher sollte so groß sein?
-
Die Zeit könnte ich mir mal nehmen.
wäre nützzlich wenn du tiefer einsteigen willst.
Ich würde dein Problem so lösen:C
Alles anzeigen#include <MsgBoxConstants.au3> #include <WindowsConstants.au3> #include <Array.au3> #include <GUIConstantsEx.au3> #include <GuiListView.au3> #include <Inet.au3> ;============== Begin Testdaten ============== Global $ip[10] For $i= 0 to 9 $ip[$i] = '172.16.' & Random(1,8,1) & '.' & Random(1, 254,1) Next ;_ArrayDisplay($ip) ;============== Ende Testdaten =============== _MyIPsMsgBox($ip, 'Verbunden', 15) Func _MyIPsMsgBox($aIP, $sTitle = 'Connected: ', $iTimeOut = 0, $bTCPStartUpShutDown = True, $hParent = 0) #cs Functionname _MyIPsMsgBox Parameter: $aIP ein 1D array mit den verbundenen IP's $sTitle Titel der GUI $iTimeOut wenn größer 0 dann max. Anzeigedauer der GUI, $bTCPStartUpShutDown True = TCP wird gestartet und auch wieder beendet False = TCP wird nicht verändert $hParent Elter-GUI #ce If $iTimeOut < 0 Then $iTimeOut = 0 Local $aIP2D[UBound($aIP)][2] Local $tdStart, $bClose = False Local $iEvent = Opt("GUIOnEventMode", 0) ;ursprünglichen Eventmode speichern if $bTCPStartUpShutDown Then TCPStartup() For $i = 0 To UBound($aIP) -1 $aIP2D[$i][0] = $aIP[$i] $aIP2D[$i][1] = _TCPIpToName($aIP[$i], 0) Next if $bTCPStartUpShutDown Then TCPShutdown() Local $hGUI = GUICreate($sTitle, 256, 256, (@DesktopWidth-512) /2, (@DesktopHeight-512) /2, Default, Default, $hParent) Local $idLV = GUICtrlCreateListView('IP|Name',2,2,252,220) _GUICtrlListView_AddArray($idLV, $aIP2D) _GUICtrlListView_SetColumnWidth($idLV, 0, $LVSCW_AUTOSIZE) _GUICtrlListView_SetColumnWidth($idLV, 1, $LVSCW_AUTOSIZE_USEHEADER) Local $idBtnOK = GUICtrlCreateButton('OK',2, 225, 252) GUISetState() ; Loop until the user exits or timeout is reached $tdStart = TimerInit() While 1 Switch GUIGetMsg() Case $GUI_EVENT_CLOSE, $idBtnOK ExitLoop EndSwitch If $iTimeOut Then If TimerDiff($tdStart) > $iTimeOut * 1000 Then ExitLoop EndIf WEnd ; Delete the previous GUI and all controls. GUIDelete($hGUI) Opt("GUIOnEventMode", $iEvent) ;ursprünglichen Eventmode wiederherstellen EndFunc
Den Testdateenteil mußt du gegen deine Daten tauschen.
-
Mein Ziel ist es das nach einer gewissen Zeit sobald ich den PC verlasse ein Script ausgeführt wird
Dein PC bekommt im Normalfall nicht mit, daß du ihn verlassen hast. Mit _WinAPI_GetIdleTime kannst du aber feststellen, wie lange keine Tastatur oder Mouseaktivität war.
-
Deswegen habe ich ja die Vermutung, dass bei autoBert die Scripte standardmäßig im 64-Bit-Modus ausgeführt werden.
Korrekt, im 32-Bit modus funktioniert es auch bei mir:
warum die Speicherkarte im Lesen schlechtere Werte hat als beim Schreiben verstehe ich nicht. Beim Schreiben ermittelt dein Skript ~ gleichen Wert wie h2testw.
-
Sorry, das verstehe ich jetzt überhaupt nicht.
Ich auch (noch) nicht. Du solltest aber besser die Variablen nicht erst bei Bedarf deklarieren, sondern:
- globale am Anfang des Skriptes
- locale am Anfang der Funktion,
lies dazu auch https://www.autoitscript.com/wiki/Best_codi…es_of_Variables.
-
Hallo Oscar,
ich bekomme beim Testen einer mit exFat formatierten Speicherkarte folgende Konsolenausgabe:
Code--> Press Ctrl+Alt+Break to Restart or Ctrl+Break to Stop FillBuffer-ASM-Code-Size: 34 Bytes CheckBuffer-ASM-Code-Size: 50 Bytes IOBuffer-Size: 64,0 MB @@ Debug(222) : $g_bReadWrite = True >Error code: 0 !>11:22:30 AutoIt3.exe ended.rc:-1073741819 +>11:22:30 AutoIt3Wrapper Finished. >Exit code: 3221225477 Time: 67.76
Habe ich etwas überlesen und das Tool funktioniert nur mit NTFS formatierten Datenträgern?Passiert auch auf meiner Festplatte:
Code--> Press Ctrl+Alt+Break to Restart or Ctrl+Break to Stop FillBuffer-ASM-Code-Size: 34 Bytes CheckBuffer-ASM-Code-Size: 50 Bytes IOBuffer-Size: 64,0 MB @@ Debug(222) : $g_bReadWrite = True >Error code: 0 !>11:28:42 AutoIt3.exe ended.rc:-1073741819 +>11:28:42 AutoIt3Wrapper Finished. >Exit code: 3221225477 Time: 21.26
Win 10 Home 64 Bit 1803
In beiden Fällen wird noch der Ordner Flashtest erstellt und eine Datei 000001.ft mit 0 Byte angelegt.
mfg (auto)Bert
-
-
Wenn die verschiedenen Instanzen gleichzeitig viele Msg-Boxen anzeigen sehe ich, dass "das System langsam wird". D. h. es geht die Prozessornutzung runter, weil wohl zu viel auf die Bearbeitung am Bildschirm wartet (?).
Während eine MsgBox aktiv angezeigt wird, wartet diese Programminstanz auf das schliessen und dieses Warten erzeugt natürlich keine Prozessorlast. Du kannst aber den TimeOut Parameter von MsgBox verwenden um die MsgBox automatisch zu beenden.
Zitat von AutoIt HilfeFunction MsgBox
Displays a simple message box with optional timeout.
MsgBox ( flag, "title", "text" [, timeout = 0 [, hwnd]] )
-
Ohne dein Skript ist es schwer zu sagen wo dein Fehler ist. Vermutlich hast du vergessen die Zeitwerte zu Datumswerte inkl. Zeit umzuformatieren. Dies kannst du damit:
erreichen. Es geht natürlich auch jedes andere Datum.
-
-
Dein Beispiel funzt und ist auch bei Erweiterung auf 1000 Datensätze angenehm flott.
Das Beispiel nutzt eine Memory DB, bei Datenbank Datei wird es sich deutlich verlangsamen.
Vermutlich macht es Sinn, zudem noch alpines' Tipp aufzugreifen und das Array zuvor passend zu kreieren. Denn möglicherweise verursacht _SQLite_GetTable2d() massenhaft ReDims (muss ich testen, ob dem so ist).
_SQLite_GetTable2d() wird eine Variable für das Array ByRef übergeben, das Array wird anhand der Rückgabe des ausgeführten SQL-Queries 1mal dimensioniert und in einer Schleife befüllt. Also kein einziges ReDim!
-
Da ich derzeit keine Beiträge bearbeiten kann, hier eine neue Version:
C
Alles anzeigen; *** Start added by AutoIt3Wrapper *** #include <StaticConstants.au3> ; *** End added by AutoIt3Wrapper *** #Region ;**** Directives created by AutoIt3Wrapper_GUI **** #AutoIt3Wrapper_Add_Constants=n #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI **** #include <MsgBoxConstants.au3> #include <SQLite.au3> #include <SQLite.dll.au3> #include <ColorConstants.au3> #include <GUIConstantsEx.au3> #include <ListViewConstants.au3> #include <GuiListView.au3> Local $aResult, $iRows, $iColumns, $iRval, $iPercent _SQLite_Startup() If @error Then MsgBox($MB_SYSTEMMODAL, "SQLite Error", "SQLite.dll Can't be Loaded!") Exit -1 EndIf ConsoleWrite("_SQLite_LibVersion=" & _SQLite_LibVersion() & @CRLF) _SQLite_Open() ; Open a :memory: database If @error Then MsgBox($MB_SYSTEMMODAL, "SQLite Error", "Can't Load Database!") Exit -1 EndIf If Not _SQLite_Exec(-1, "CREATE TEMP TABLE persons (Name, Age);") = $SQLITE_OK Then _ MsgBox($MB_SYSTEMMODAL, "SQLite Error", _SQLite_ErrMsg()) For $i = 1 To 1000 ;datensätze * 1000 If Not _SQLite_Exec(-1, "INSERT INTO persons VALUES ('Alice','43');") = $SQLITE_OK Then _ MsgBox($MB_SYSTEMMODAL, "SQLite Error", _SQLite_ErrMsg()) If Not _SQLite_Exec(-1, "INSERT INTO persons VALUES ('Bob','28');") = $SQLITE_OK Then _ MsgBox($MB_SYSTEMMODAL, "SQLite Error", _SQLite_ErrMsg()) If Not _SQLite_Exec(-1, "INSERT INTO persons VALUES ('Cindy','21');") = $SQLITE_OK Then _ MsgBox($MB_SYSTEMMODAL, "SQLite Error", _SQLite_ErrMsg()) Next Local $idListview GUICreate("SQLite with LV", 400, 300) $idListview = GUICtrlCreateListView("Name|Age", 2, 2, 394, 268) ; Alternate between the listview background color and the listview item background color. GUICtrlSetBkColor(-1, $GUI_BKCOLOR_LV_ALTERNATE) ; Set the background color for the listview. ; Odd listview items will be shown with the background color of the listview, ; even with the background color of the listview item. GUICtrlSetBkColor(-1, $COLOR_AQUA) $idPercent = GUICtrlCreateLabel('0 %', 2, 272, 35, 25, $SS_CENTERIMAGE) $idProgress = GUICtrlCreateProgress(42, 272, 355, 25) GUICtrlSetBkColor(-1, $COLOR_GREEN) GUISetState(@SW_SHOW) ; Query $tdStart = TimerInit() $iRval = _SQLite_GetTable2d(-1, "SELECT * FROM persons;", $aResult, $iRows, $iColumns) If $iRval = $SQLITE_OK Then $tdEnd = TimerDiff($tdStart) ConsoleWrite($tdEnd & @CRLF) _GUICtrlListView_BeginUpdate($idListview) For $i = 1 To $iRows GUICtrlCreateListViewItem($aResult[$i][0] & '|' & $aResult[$i][1], $idListview) if Int($i, 2) Then GUICtrlSetBkColor(-1, $COLOR_GREEN) ;only even items must be coloured $iPercent = Int($i / $iRows * 100) If GUICtrlRead($idProgress) <> $iPercent Then GUICtrlSetData($idProgress, $iPercent) GUICtrlSetData($idPercent, $iPercent & ' %') EndIf Next _GUICtrlListView_EndUpdate($idListview) $tdEnd = TimerDiff($tdStart) ConsoleWrite($tdEnd & @CRLF) EndIf _SQLite_Close() _SQLite_Shutdown() ; Loop until the user exits. Do Until GUIGetMsg() = $GUI_EVENT_CLOSE GUIDelete()
-
Ich vermute mal, GUICtrlSetBkColor funktioniert wohl nur, wenn das Item mit GUICtrlCreateListViewItem erstellt wurde.
Korrekt, daher folgender Lösungsvorschlag (C + P quer durch die Hilfe):
C
Alles anzeigen#include <MsgBoxConstants.au3> #include <SQLite.au3> #include <SQLite.dll.au3> #include <ColorConstants.au3> #include <GUIConstantsEx.au3> #include <ListViewConstants.au3> #include <GuiListView.au3> Local $aResult, $iRows, $iColumns, $iRval _SQLite_Startup() If @error Then MsgBox($MB_SYSTEMMODAL, "SQLite Error", "SQLite.dll Can't be Loaded!") Exit -1 EndIf ConsoleWrite("_SQLite_LibVersion=" & _SQLite_LibVersion() & @CRLF) _SQLite_Open() ; Open a :memory: database If @error Then MsgBox($MB_SYSTEMMODAL, "SQLite Error", "Can't Load Database!") Exit -1 EndIf Local $idListview GUICreate("ListView Set BkColor", 400, 300) $idListview = GUICtrlCreateListView("Name|Age", 2, 2, 394, 268) GUICtrlSetBkColor(-1, $GUI_BKCOLOR_LV_ALTERNATE) GUICtrlSetBkColor(-1, $COLOR_AQUA) GUISetState(@SW_SHOW) ; Example Table ; Name | Age ; ----------------------- ; Alice | 43 ; Bob | 28 ; Cindy | 21 If Not _SQLite_Exec(-1, "CREATE TEMP TABLE persons (Name, Age);") = $SQLITE_OK Then _ MsgBox($MB_SYSTEMMODAL, "SQLite Error", _SQLite_ErrMsg()) For $i = 1 To 10 ;datensätze * 10 If Not _SQLite_Exec(-1, "INSERT INTO persons VALUES ('Alice','43');") = $SQLITE_OK Then _ MsgBox($MB_SYSTEMMODAL, "SQLite Error", _SQLite_ErrMsg()) If Not _SQLite_Exec(-1, "INSERT INTO persons VALUES ('Bob','28');") = $SQLITE_OK Then _ MsgBox($MB_SYSTEMMODAL, "SQLite Error", _SQLite_ErrMsg()) If Not _SQLite_Exec(-1, "INSERT INTO persons VALUES ('Cindy','21');") = $SQLITE_OK Then _ MsgBox($MB_SYSTEMMODAL, "SQLite Error", _SQLite_ErrMsg()) Next ; Query $iRval = _SQLite_GetTable2d(-1, "SELECT * FROM persons;", $aResult, $iRows, $iColumns) If $iRval = $SQLITE_OK Then _GUICtrlListView_BeginUpdate($idListview) For $i = 1 To $iRows GUICtrlCreateListViewItem($aResult[$i][0] & '|' & $aResult[$i][1], $idListview) GUICtrlSetBkColor(-1, $COLOR_GREEN) Next _GUICtrlListView_EndUpdate($idListview) EndIf _SQLite_Close() _SQLite_Shutdown() ; Loop until the user exits. Do Until GUIGetMsg() = $GUI_EVENT_CLOSE GUIDelete()
-
Nimm anstelle von _SQLite_Query _SQLite_GetTable2d.
- Wenn dann noch das SQL Statement analog zur LV aufebaut ist kannst du auch noch anstelle von GUICtrlCreateListViewItem(um eine LV-Zeile zu erstellen) _GUICtrlListView_AddArray verwenden und das komplette Egebnis auf eimal einzutragen.
Schnellste Methode - Falls es aber das Egebnis nicht zulässt, musst du in einer Schleife durch das erhaltene Array (Ergebbnis von _SQLite_GetTable2d) gehen und GUICtrlCreateListViewItem verwenden.
Selbst diese Methode ist noch deutlich schneller als dein Ansatz mit _SQLite_Query.
Die LV-Farben kannst du auch auf einmal setzen:
Code; Set colors _GUICtrlListView_SetBkColor($idListview, $CLR_MONEYGREEN) _GUICtrlListView_SetTextColor($idListview, $CLR_BLACK) _GUICtrlListView_SetTextBkColor($idListview, $CLR_MONEYGREEN)
dies sollte auch noch einmal (minimal) Zeit sparen.
- Wenn dann noch das SQL Statement analog zur LV aufebaut ist kannst du auch noch anstelle von GUICtrlCreateListViewItem(um eine LV-Zeile zu erstellen) _GUICtrlListView_AddArray verwenden und das komplette Egebnis auf eimal einzutragen.
-
Wenn InetGet nicht unter allen Umständen funktioniert, dann betrifft das auch Oscars Code. Von daher halte ich es nicht für sinnvoll, einen eigenen Thread zu eröffnen.
Ich schon, da das Problem nicht Oscars Skript betrifft und somit sein Thread unötig
zumülltaufbläht. -
-
Die SB wird jetzt überall vorangestellt, nervt (unnnötiger INet-Volumen Verbrauch)
Gestern kam ich gar nicht auf autoit.de DieselWiesel.zip
Heute nicht auf Pinger.zip Wobei, diese wohl nicht aktuell sein können (25/07/2014),
-
ich denke mal da muss sogar das richtige Datum rein.
wenn er nur mit der Zeit rechnen will genügt auch ein fiktives Datum. Für eine echte Arbeitszeiterfassung mit Dokumentation der Zeiten sind aber auch echte Daten erforderlich. Afair gibt es schon einige Skripte hierfür im Forum.
-
- Warum läuft das Programm schneller, wenn die Maus bewegt wird? Hat das etwas mit Multiprocessing, bzw. Multithreading zu tun? Wenn ja, wie kann ich es beheben?
Du handelst deine GUI im MessageLoop Modus (GuiGetMsg), wenn du auf den OnEvent Modus wechsels ist dies behoben. Die benötigten Funktionen sind:
Code
Alles anzeigenOpt("GUIOnEventMode", 1) ; zum setzen GUISetOnEvent() ;Behandlungfür jedes von der GUI ausgelöste Event z.B.: $GUI_EVENT_CLOSE GUICtrlSetOnEvent();Behandlung für jedes von einem GuiContol ausgelöste Event. .... ;Schleife um Gui nicht zu schliessen While 1 If $start = 1 Then _Calc() _Draw() EndIf Sleep(200) ;anpassen WEnd