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. Oscar

Beiträge von Oscar

  • Batch in eine GUI

    • Oscar
    • 5. Juli 2016 um 08:46

    Da Du ja keine Hilfe willst, sondern ein fertiges Script, habe ich das mal in "Programmieranfragen" verschoben.

  • In einem Loop die Mausposition verändern

    • Oscar
    • 3. Juli 2016 um 13:50

    Solch ein Skript ist viel zu fehleranfällig und zu sehr auf den eigenen PC zugeschnitten!
    Die Koordinaten sind abhängig von der Monitorauflösung und der eingestellten Windows-Skalierung.
    Die MouseWheel-Befehle wohl auch noch von den eingestellten Maus-Eigenschaften.
    Die Datei-Pfade und verwendeten Programme sind nur bei Dir vorhanden!
    Und außerdem darf man bei so einem Skript (Mausmove, Send und co.) absolut nichts nebenbei machen, weil das zu sofortigen Fehlfunktionen führt!

    Jegliche Hilfe-Versuche bei so einem Skript sind Ratespiele, warum dies oder jenes bei Dir dann nicht funktioniert.
    Tut mir Leid das zu sagen, aber bei so einem Skript wird es von meiner Seite keine Unterstützung geben.

  • In einem Loop die Mausposition verändern

    • Oscar
    • 1. Juli 2016 um 18:14

    Eine Maussteuerung um Daten aus Excel auszulesen ist die denkbar schlechteste Lösung!
    Es gibt eine leistungsstarke Excel-UDF (wird mit AutoIt installiert). In der Hilfe findest Du zahlreiche Beispiel-Skripte.
    Ansonsten gibt es noch ein Wiki und ein paar zusätzliche Beispiele.

  • Listenfeld mittels klick Überschrift sortieren

    • Oscar
    • 29. Juni 2016 um 16:35

    Mal ein kleines Zitat aus der Hilfe:

    Zitat von AutoIt-Hilfe


    For each call to _GUICtrlListView_RegisterSortCallBack() there must be a call to _GUICtrlListView_UnRegisterSortCallBack() when done (before exit).

    It is up to the user to call _GUICtrlListView_UnRegisterSortCallBack() for each _GUICtrlListView_RegisterSortCallBack() call made.

  • Wie stoppe ich einen Timer?

    • Oscar
    • 29. Juni 2016 um 14:21
    Zitat von Leo.1906

    Ich starte den Timer und frage ihn während das Script läuft in einer Adlib ab.

    Auf diese Weise ist der Timer völlig überflüssig!
    Wenn Du eine Funktion mit AdlibRegister aufrufst, dann legst Du die Aufrufhäufigkeit ja mit AdlibRegister fest z.B. alle 250 ms (Standard).
    Willst Du, dass etwas nach beispielsweise 5 Sekunden passiert, so kannst Du einfach eine globale Variable hochzählen und wenn diese >=20 (1 / 4 * 20 = 5) ist, die entsprechenden Befehle ausführen.

  • Sortierung, wie im Explorer-Tree - wie gehts?

    • Oscar
    • 26. Juni 2016 um 17:11

    Es gibt bereits eine UDF (Anhang / nicht von mir), die das Array "richtig" sortieren kann. Die hatte ich mir vor langer Zeit mal abgespeichert, weil ich so eine Funktion selbst mal brauchte.

    Du brauchst dann nur noch die Funktion aufrufen und das Array ist korrekt sortiert:

    AutoIt
    #include <Array.au3>
    #include <File.au3>
    #include "_ArrayNaturalSort.au3"
    $sPath = "" ; <- anpassen
    $aFileList = _FileListToArrayRec($sPath, "*", $FLTAR_FOLDERS, $FLTAR_NORECUR, $FLTAR_SORT)
    _ArrayDelete($aFileList, 0)
    _ArrayNaturalSort($aFileList)
    _ArrayDisplay($aFileList)

    Dateien

    _ArrayNaturalSort.au3 11,23 kB – 272 Downloads
  • bestimmte listview einträge löschen

    • Oscar
    • 26. Juni 2016 um 16:51

    Wenn es auf Geschwindigkeit ankommt, ist es eh besser (vor der Anzeige im Listview) das Daten-Array durchzugehen und dort die entsprechenden Einträge zu löschen.
    Oder (noch besser, weil dann auch noch weniger Speicher verbraucht wird) bereits beim erstellen des Daten-Arrays (auslesen der Verzeichnisse) eine entsprechende Filterung vorzunehmen.

  • Taskbar Icon und Icon in der GUI bei einer au3 Datei ändern

    • Oscar
    • 18. Juni 2016 um 19:39

    Möglich ist das (wie chip bereits schrieb mit Hilfe eines Timers), aber wozu braucht man so eine Unterscheidung?
    Ein Klick auf ein Item wird über die ID registríert (TrayItemSetOnEvent) und die entsprechende Funktion (oder bei TrayGetMsg die Case-Anweisung) ausgeführt.

    Das Problem bei der Auswertung, ob Klick oder Doppelklick auf das TrayIcon ist halt, dass man die Doppelklick-Verzögerung abwarten muss.
    Hier mal ein Beispiel:

    AutoIt
    #include <Date.au3>
    #include <MsgBoxConstants.au3>
    #include <TrayConstants.au3>
    #NoTrayIcon ; Required for the $TRAY_ICONSTATE_SHOW constant.
    
    
    Opt("TrayMenuMode", 7) ; The default tray menu items will not be shown and items are not checked when selected. These are options 1 and 2 for TrayMenuMode.
    Global $iDoubleClickSpeed = RegRead('HKEY_CURRENT_USER\Control Panel\Mouse', 'DoubleClickSpeed')
    
    
    Example()
    
    
    Func Example()
    	Local $idAbout = TrayCreateItem("About")
    	TrayCreateItem("") ; Create a separator line.
    
    
    	Local $idExit = TrayCreateItem("Exit")
    	TraySetClick(8)
    	TraySetState($TRAY_ICONSTATE_SHOW) ; Show the tray menu.
    	Local $iClick = 0, $iTimer = TimerInit()
    	While 1
    		If $iClick > 0 And TimerDiff($iTimer) > $iDoubleClickSpeed Then
    			ConsoleWrite(_NowTime() & " PrimaryDown" & @CR)
    			$iClick = 0
    		EndIf
    		Switch TrayGetMsg()
    			Case $TRAY_EVENT_PRIMARYDOWN
    				If $iClick = 0 Then
    					$iTimer = TimerInit()
    				EndIf
    			Case $TRAY_EVENT_PRIMARYUP
    				$iClick += 1
    ;~ 				ConsoleWrite(_Now() & " PrimaryUp" & @CR)
    			Case $TRAY_EVENT_PRIMARYDOUBLE
    				ConsoleWrite(_NowTime() & " PrimaryDouble" & @CR)
    				$iClick = -1
    			Case $idAbout ; Display a message box about the AutoIt version and installation path of the AutoIt executable.
    				MsgBox($MB_SYSTEMMODAL, "", "AutoIt tray menu example." & @CRLF & @CRLF & _
    						"Version: " & @AutoItVersion & @CRLF & _
    						"Install Path: " & StringLeft(@AutoItExe, StringInStr(@AutoItExe, "\", 0, -1) - 1)) ; Find the folder of a full path.
    
    
    			Case $idExit ; Exit the loop.
    				ExitLoop
    		EndSwitch
    	WEnd
    EndFunc   ;==>Example
    Alles anzeigen
  • Taskbar Icon und Icon in der GUI bei einer au3 Datei ändern

    • Oscar
    • 18. Juni 2016 um 14:54

    a) GuiSetIcon
    b) TrayItemCreate und für die Auswertung (abhängig von "TrayOnEventMode") TrayGetMsg auswerten oder mit Tray(Item)SetOnEvent eine Funktion zuweisen.

    Zu den fett geschriebenen Wörtern findest Du jeweils ein Beispiel in der Hilfe.

  • Bug bei GuiCtrlSetPos mit Button

    • Oscar
    • 17. Juni 2016 um 18:08

    Ein Return 0 statt 'GUI_RUNDEFMSG' funktioniert auch.

  • Datei auswählen mit veränderlichem Namen

    • Oscar
    • 17. Juni 2016 um 16:25

    Häh?
    Also FileOpen kann jede Art von Datei öffnen (Binär-Modus). Die Frage ist, wozu?
    Was willst Du damit machen?
    ControlSend ist zum fernsteuern anderer Anwendungen. Beschreib nochmal genauer, was Du machen willst.

  • Listenfeld mittels klick Überschrift sortieren

    • Oscar
    • 17. Juni 2016 um 16:18

    Und für den Fall, dass in dem Listview irgendwo eine Datums-Spalte vorkommt, habe ich mal schnell eine Funktion zum umsortieren geschrieben:

    AutoIt
    #include <GUIConstantsEx.au3>
    #include <GuiListView.au3>
    #include <ListViewConstants.au3>
    
    
    Global $iDateColumn = 0 ; hier angeben welche Spalte die Datums-Spalte sein soll
    Global $sHeader = 'Datum|Artikelnummer|Nummer|Baureihe'
    Global $hGui = GUICreate('Listview-Sort', 600, 480)
    
    
    Global $idListView = GUICtrlCreateListView($sHeader, 0, 0, 600, 400, $LVS_SHOWSELALWAYS)
    
    
    ; hier ein paar Zufallsdaten generieren
    Global $sItem = ''
    For $iArtNr = 0 To 99
    	$sDate = StringFormat('%02i.%02i.%04i', Random(1, 28, 1), Random(1, 12, 1), Random(2000, 2016, 1))
    	$sItem = $sDate & '|' & $iArtNr & '|' & Random(10000, 99999, 1) & '|' & Random(1000, 9999, 1)
    	GUICtrlCreateListViewItem($sItem, $idListView)
    Next
    _GUICtrlListView_SetColumnWidth($idListView, 0, 110)
    ; Zufallsdaten bereit
    
    
    _GUICtrlListView_RegisterSortCallBack($idListView)
    GUISetState(@SW_SHOW, $hGui)
    While 1
    	Switch GUIGetMsg()
    		Case $GUI_EVENT_CLOSE
    			_GUICtrlListView_UnRegisterSortCallBack($idListView)
    			Exit
    		Case $idListView
    			_GUICtrlListView_BeginUpdate($idListView)
    			$iCol = GUICtrlGetState($idListView)
    			If $iCol = $iDateColumn Then _ChangeDateFormat($idListView, 0, 1) ; temporaer das Datum nach Jahr.Monat.Tag umwandeln
    			_GUICtrlListView_SortItems($idListView, $iCol) ; Spalte sortieren
    			If $iCol = $iDateColumn Then _ChangeDateFormat($idListView, 0, 0) ; hier das Datum wieder nach Tag.Monat.Jahr umwandeln
    			_GUICtrlListView_EndUpdate($idListview)
    	EndSwitch
    WEnd
    
    
    Func _ChangeDateFormat($idListView, $iCol, $iDir)
    	Local $iItemCount = _GUICtrlListView_GetItemCount($idListView)
    	If $iItemCount = 0 Then Return SetError(1, 0, False)
    	Local $iColCount = _GUICtrlListView_GetColumnCount($idListView)
    	If $iColCount = 0 Then Return SetError(2, 0, False)
    	If $iCol > $iColCount Then Return SetError(3, 0, False)
    	Local $sText = ''
    	For $iIndex = 0 To $iItemCount - 1
    		$sText = _GUICtrlListView_GetItemText($idListView, $iIndex, $iCol)
    		If $iDir Then
    			$sText = StringRegExpReplace($sText, '(\d{2}).(\d{2}).(\d{4})', '$3.$2.$1') ; Tag.Monat.Jahr -> Jahr.Monat.Tag
    		Else
    			$sText = StringRegExpReplace($sText, '(\d{4}).(\d{2}).(\d{2})', '$3.$2.$1') ; Jahr.Monat.Tag -> Tag.Monat.Jahr
    		EndIf
    		_GUICtrlListView_SetItemText($idListView, $iIndex, $sText, $iCol)
    	Next
    	Return True
    EndFunc   ;==>_ChangeDateFormat
    Alles anzeigen
  • Listenfeld mittels klick Überschrift sortieren

    • Oscar
    • 17. Juni 2016 um 15:34

    Die einfachste Variante ist wohl, die UDF-Funktion "_GUICtrlListView_RegisterSortCallBack" zu benutzen:

    AutoIt
    #include <GUIConstantsEx.au3>
    #include <GuiListView.au3>
    #include <ListViewConstants.au3>
    
    
    Global $sHeader = 'Artikelnummer|Nummer|Baureihe'
    Global $hGui = GUICreate('Listview-Sort', 600, 480)
    
    
    Global $idListView = GUICtrlCreateListView($sHeader, 0, 0, 600, 400, $LVS_SHOWSELALWAYS)
    
    
    Global $sItem = ''
    For $iArtNr = 0 To 99
    	$sItem = $iArtNr & '|' & Random(10000, 99999, 1) & '|' & Random(1000, 9999, 1)
    	GUICtrlCreateListViewItem($sItem, $idListView)
    Next
    
    
    _GUICtrlListView_RegisterSortCallBack($idListView)
    GUISetState(@SW_SHOW, $hGui)
    While 1
    	Switch GUIGetMsg()
    		Case $GUI_EVENT_CLOSE
    			_GUICtrlListView_UnRegisterSortCallBack($idListView)
    			Exit
    		Case $idListView
    			_GUICtrlListView_SortItems($idListView, GUICtrlGetState($idListView))
    	EndSwitch
    WEnd
    Alles anzeigen

    Aufpassen muss man nur, wenn die zu sortierenden Daten nicht von links nach rechts sortiert werden sollen (wie z.B. beim Datum).
    In dem Fall muss man eine eigene Sortier-Funktion einbauen.

  • Textkette aus einem Array für ein Label generieren

    • Oscar
    • 17. Juni 2016 um 11:52

    Wobei die Kurzschreibweise $text1 &= $sName[$i] & Chr(10) durchaus erlaubt ist.
    Im übrigen gibt es in SciTE eine Tastenkombination [STRG] + [t], die den Code schön formatiert. :)

  • Textkette aus einem Array für ein Label generieren

    • Oscar
    • 16. Juni 2016 um 16:20

    In AutoIt werden Strings mit "&" verkettet. Das "+" dient der Addition.
    Und da AutoIt als Datentyp nur "Variant" kennt, gibt es hier auch keine Fehlermeldung des Interpreters.

  • Zufallsgenerator

    • Oscar
    • 15. Juni 2016 um 14:35

    Naja, das ist so simpel, da ist ein Beispiel schnell geschrieben:

    AutoIt
    $iTemperatur = 24.5
    $iToleranz = 2      ; +- 2 Grad
    
    
    $iRandom = Random($iTemperatur - $iToleranz, $iTemperatur + $iToleranz)
    MsgBox(0, 'Zufallstemperatur', Round($iRandom, 2))
  • Wert aus Array bekommen

    • Oscar
    • 14. Juni 2016 um 13:18
    Zitat von Lanealine

    $aTest[5][2]

    Wenn Du so ein Array hast, dann kannst Du es nicht mit $variable = $aTest[5][2] ansprechen, weil die Werte bei Null beginnen.
    Es geht also nur: $variable = $aTest[0][0] bis $variable = $aTest[4][1].
    $variable = $aTest[5][2] liegt außerhalb des dimensionierten Bereichs!

  • AutoIt und Arduino

    • Oscar
    • 12. Juni 2016 um 08:47
    Zitat von Raupi

    Genauer gesagt den LM75A, andere Sensoren hab ich noch nicht verbaut.

    Hmm...lt. Datenblatt hat der nur eine Genauigkeit von +-2 Grad Celsius.
    Da bevorzuge ich doch die "DS18B20". Die haben eine Genauigkeit von +-0.5 Grad Celsius und da kannst Du an einen Pin mehrere Temperatur-Sensoren anschliessen (One-Wire-Bus, die Sensoren werden über eine feste Adresse angesprochen).
    Die gibt es auch in einer vergossenen (wasserfesten) Variante und man kann sie sogar über das Datenkabel mit Strom versorgen (Parasite Power), sodass eine Zweidrahtverbindung (GND und Data) ausreicht.

  • AutoIt und Arduino

    • Oscar
    • 11. Juni 2016 um 17:09

    Den MCP23017 hatte ich hier noch rumliegen, also Lötkolben angeschmissen und auf eine Platine gelötet. Library von Adafruit installiert. Funktioniert!
    Ich kann alle 16 I/Os einzeln schalten, soweit so gut, aber ich kann diese I/Os nicht nutzen, um die DHT-Feuchtesensoren anzuschliessen.
    Die entsprechende DHT-Library erwartet ja einen Port/Pin "DHT dht(DHTPIN, DHTTYPE)". Ich bin schon am suchen, aber scheinbar gibt es für das Problem keine entsprechende Library. Oder kennt jemand von euch eine Lösung dafür?


    Mein TFT ist per Hardware-SPI angeschlossen und das soll auch so bleiben. RTC und Luftdrucksensor per I2C. Die beiden DHT habe ich jetzt an GPIO10 und GPIO0 angeschlossen, was testweise erstmal funktioniert.
    Wenn das stabil läuft, dann bleibt es wohl bei den Anschlüssen und ich nutze den MCP23017 nur zum schalten von einigen LEDs und zur Eingabe per Tastatur. Später sollen da evtl. noch ein paar Lampen geschaltet werden.
    Mal schauen, wie das so weitergeht...
    Trotz aller Sucherei und mangelhafter Dokumentation macht es doch Spaß mal wieder etwas zu "basteln". :)

  • AutoIt und Arduino

    • Oscar
    • 10. Juni 2016 um 19:46
    Zitat von Raupi

    Habe z.Z. einen Esp8266 mit 4 Temperaturfühlern ,2 LCD Displays 1024 kbit EEprom und diversen Tastern die alle an 2 Pins hängen.
    Die Taster und Lcds hängen alle an PFC8574 Portexpandern, die Anzahl der I/O Pins ist nur durch die zur Verfügung stehenden Geräteadressen begrenzt.

    Programmierst Du mit der Arduino-IDE?
    Wenn ja, würde mich interessieren wie Du die Geräte über den Portexpander ansprichst.
    Wie sehen denn dann die Port-Adressen aus?
    Ich brauche nämlich momentan auch noch einige I/O-Ports.

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™