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

  • Globale Variable vermeiden. Methoden?

    • Oscar
    • 25. Mai 2017 um 11:59

    Prinzipiell ist das ok, vor allem, wenn Du noch Parameter uebergeben willst (geht ja mit HotKeySet nicht).

    Wobei ich persönlich finde, dass man es mit dem vermeiden von globalen Variablen auch übertreiben kann.
    Natürlich sollten globale Variablen in UDFs nicht $i, $x, $y oder auch $iWidth oder so heißen, das führt zwangsläufig zu Problemen, aber wenn man die globalen Variablen zum Beispiel $g_iUDFnameWidth nennt, dann dürfte das kaum zu Namenskollisionen führen.
    Und wenn man dann die globalen Variablen oben in der UDF gut sichtbar deklariert und kommentiert, dann kann man sich beim verwenden der UDF auch gut darauf einstellen.
    Mir ist das lieber, als "wilde" Konstruktionen, die versuchen globale Variablen zu umgehen und damit den Code unleserlicher machen.
    Wie gesagt, ist das meine persönliche Meinung dazu.

  • Globale Variable vermeiden. Methoden?

    • Oscar
    • 25. Mai 2017 um 11:42

    Zu umständlich!
    Einfach das Beispiel aus der Hilfe auf Local static umbauen:

    AutoIt
    #include <MsgBoxConstants.au3>
    
    
    ; Press Esc to terminate script, Pause/Break to "pause"
    
    
    HotKeySet("{Pause}", "TogglePause")
    HotKeySet("{ESC}", "Terminate")
    HotKeySet("+!d", "ShowMessage") ; Shift-Alt-d
    
    
    While 1
    	Sleep(100)
    WEnd
    
    
    Func TogglePause()
    	Local Static $bPaused = False
    	$bPaused = Not $bPaused
    	While $bPaused
    		Sleep(100)
    		ToolTip('Script is "Paused"', 0, 0)
    	WEnd
    	ToolTip("")
    EndFunc   ;==>TogglePause
    
    
    Func Terminate()
    	Exit
    EndFunc   ;==>Terminate
    
    
    Func ShowMessage()
    	MsgBox($MB_SYSTEMMODAL, "", "This is a message.")
    EndFunc   ;==>ShowMessage
    Alles anzeigen
  • Sobald "U" gedrückt wird, soll eine Funktion auf Pause gemacht werden

    • Oscar
    • 21. Mai 2017 um 08:03

    Ohne weitere Erklärung des TO ist das hier ein Gamebot!
    Und somit wird es hier keine weitere Hilfe geben!

    [Thread closed]

  • Changelog in GUI ausgeben

    • Oscar
    • 20. Mai 2017 um 15:42

    Es gibt doch die GuiEdit-UDF. Einfach _GUICtrlEdit_SetSel($idEdit, 0, 0) und es ist nichts markiert.
    Alternativ kannst Du auch einfach den Focus auf ein anderes Control-Element setzen GUICtrlSetState($label, $GUI_FOCUS).

  • Taschenrechner Embedded

    • Oscar
    • 20. Mai 2017 um 14:22

    Ach, jetzt weiß ich auch warum der Fehler auftritt.
    BugFix : Local $aSize = WinGetClientSize($hCalc) darf erst nach dem wechseln der Ansicht WinMenuSelectItem($hCalc, '', '&Ansicht', $aMode[$iMode]) erfolgen, sonst stimmen die Coordinaten nicht.

  • Taschenrechner Embedded

    • Oscar
    • 20. Mai 2017 um 09:38

    Bei mir (WIn7, 64 Bit) funktioniert das nur mit der Standard-Einstellung.
    Bei allen anderen Einstellungen fehlt ein Teil des Rechners (siehe Screenshots im Anhang).

    Dateien

    calc_screenshot0.png 12,33 kB – 0 Downloads calc_screenshot1.png 11,79 kB – 0 Downloads calc_screenshot3.png 12,57 kB – 0 Downloads calc_screenshot2.png 13,17 kB – 0 Downloads
  • PDF Inhalt lesen

    • Oscar
    • 10. Mai 2017 um 15:04

    Ich kann auch nicht verstehen, warum Du jetzt die fehleranfällige Methode mit Send benutzen willst. :huh:
    Vor allem, weil die UDF einwandfrei funktioniert.

  • GUICTRLSetOnEvent welcher Menübutton wurde gedrückt?

    • Oscar
    • 9. Mai 2017 um 07:55

    Floops: Bei Deiner Version muss man vorher wissen, wie viele Tools/Funktionen vorhanden sind.

    Um das universeller zu gestalten kann man @GUI_CtrlId verwenden:

    AutoIt
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    
    
    Opt("GUIOnEventMode", 1)
    
    
    $GUI = GUICreate("TEST", 300, 300)
    $Menu_Tools = GUICtrlCreateMenu("Tools")
    GUISetState(@SW_SHOW)
    GUISetOnEvent($GUI_EVENT_CLOSE, "_EXIT")
    
    
    Global $aTools[4][3]
    For $i = 1 To UBound($aTools) - 1
    	$aTools[$i][0] = "Tool " & $i
    	$aTools[$i][1] = "Pfad zur Exe"
    	$aTools[$i][2] = GUICtrlCreateMenuItem($aTools[$i][0], $Menu_Tools)
    	GUICtrlSetOnEvent(-1, "_Test")
    Next
    
    
    While 1
    	Sleep(50)
    WEnd
    
    
    Func _exit()
    	Exit
    EndFunc   ;==>_exit
    
    
    Func _Test()
    	Local $iCtrl = @GUI_CtrlId - $aTools[1][2] + 1
    	MsgBox(0, "", "Tool: " & $iCtrl)
    EndFunc   ;==>_Test
    Alles anzeigen
  • Grafische Darstellung von Messwerten

    • Oscar
    • 6. Mai 2017 um 13:08

    Wenn ich das Datenblatt in Post#11 richtig deute, dann übernimmt der Messwandler bereits den Ausgleich der Nichtlinearität.
    Die Temperatur sollte damit bereits extern korrekt ankommen.

    Bei dem Datenblatt zum "HLSR 10-P" finde ich es etwas verwirrend, dass da als Ausgangsspannung 0...5 V angegeben wird, aber weiter unten bei "Theoretical sensitivity" steht dann 80 mV/A.

    Frost0071: Kannst Du bestätigen, dass die Ausgangsspannung wirklich von 0...5 V geht? Dann würde da intern bereits eine Umwandlung passieren. Das interessiert mich auch für ein eigenes Projekt.

  • Grafische Darstellung von Messwerten

    • Oscar
    • 5. Mai 2017 um 05:15
    Zitat von Bitnugger

    soll hier Volt in Ampere umgerechnet werden?!

    Das von ihm gepostete Datenblatt sagt 80 mV/A bei den 10 A des verwendeten Wandlers sind das also 800 mV.
    Er schreibt aber was von 0...5V. Vielleicht eine Hardware-Zusatzschaltung?!

  • Grafische Darstellung von Messwerten

    • Oscar
    • 4. Mai 2017 um 09:33

    Der Arduino besitzt A/D-Wandler mit einer Auflösung von 10 Bit.
    Deshalb Werte von 0...1023. Der PT100 dürfte ein Temperatursensor sein. Die gibt es IMHO mit unterschiedlichen Temperaturbereichen und -kennlinien.
    Die Umrechnung in Grad ist bei den Dingern recht aufwendig, weil die Kennlinie nicht linear ist. Mir sind die DS18B20-Sensoren lieber.
    Bei den Stromsensoren sollte der TO auch mal dazuschreiben, wie dort die Umrechnung V -> A aussieht (Datenblatt).

  • virusshare.com Scanner

    • Oscar
    • 4. Mai 2017 um 09:23

    Ich hatte gestern abend leider keine Zeit mehr.
    Hier ist mein Testscript:

    AutoIt
    Global $sMD5File = @ScriptDir & '\unpacked_hashes.md5'
    
    
    Global $oDictionary = ObjCreate('Scripting.Dictionary')
    $oDictionary.CompareMode = 1
    Global $hFile = FileOpen($sMD5File), $sLine, $iExists = 0
    If $hFile <> -1 Then
    	$sLine = FileReadLine($hFile) ; erste Zeile ueberspringen
    	$iTimer = TimerInit()
    	While True
    		$sLine = FileReadLine($hFile) ; die naechste Zeile einlesen
    		If @error Then ExitLoop ; beim Dateiende die Schleife verlassen
    		$sLine = StringMid($sLine, 35, 32) ; <- damit wird nur der unpacked Teil ins Dictionary aufgenommen
    		If Not $oDictionary.Exists($sLine) Then ; <- testen, ob der Hash bereits vorhanden ist
    			$oDictionary.Add($sLine, 0) ; wenn nein, dann ins Dictionary eintragen
    		Else
    			$iExists += 1 ; <- das habe ich mit aufgenommen, weil in der Liste Hashes doppelt/dreifach vorkommen
    		EndIf
    	WEnd
    	ConsoleWrite('Exists: ' & $iExists & @CR) ; <- bei mir kommt da als Ergebnis 226794 raus
    	ConsoleWrite(TimerDiff($iTimer) & @CR) ; <- mein Ergebnis: 488626.694788556 (ist von der Rechnerleistung abhaengig)
    	FileClose($hFile)
    EndIf
    
    
    MsgBox(0, 'Anzahl Schlüssel-Wert Paare', $oDictionary.Count)
    Alles anzeigen

    Wie bereits geschrieben, habe ich nicht die einzelnen Dateien runtergeladen, sondern unten das ganze Paket (120MB).

  • Parameter übergeben

    • Oscar
    • 3. Mai 2017 um 19:11

    Bei ShellExecuteWait musst Du die Paramter durch ein Komma vom Dateinamen trennen. Siehe Hilfe!
    Und Du musst Deine Exe als Kommandozeilen-Programm erstellen:
    #AutoIt3Wrapper_Change2CUI=y
    am Anfang einfuegen.

  • #RequireAdmin, script wird nicht ausgeführt

    • Oscar
    • 3. Mai 2017 um 18:20

    Ach, ich sehe gerade, dass "dnsflush.exe" bereits Dein compiliertes Script ist (hatte ich übersehen, dachte das wäre ein externes Programm).
    Habe das gerade mal nachgestellt und mit RunWait funktioniert das wirklich nicht (Bug?). ?(
    Wenn man hingegen ShellExecuteWait benutzt, dann funktioniert es.

  • TCP Hilfe - Socket erstellt sich nicht

    • Oscar
    • 3. Mai 2017 um 18:07

    Ich habe Dir mal ein funktionierendes Server- und Clientscript erstellt:

    Server:

    AutoIt
    #include <INet.au3>
    
    
    HotKeySet("{ESC}", "_Exit")
    
    
    Global $sIPAddress = "127.0.0.1"
    Global $iPort = 80
    
    
    TCPStartup()
    
    
    Global $iListenSocket = TCPListen($sIPAddress, $iPort)
    If @error Then _Exit()
    
    
    Global $iSocket, $sRecv
    While Sleep(10)
    	$iSocket = TCPAccept($iListenSocket)
    	If Not @error Then
    		$sRecv = TCPRecv($iSocket, 100)
    		If $sRecv = "abcd" Then MsgBox(0, 0, "Angekommen")
    		TCPCloseSocket($iSocket)
    	EndIf
    WEnd
    
    
    Func _Exit()
    	TCPCloseSocket($iListenSocket)
    	TCPShutdown()
    	Exit
    EndFunc   ;==>_Exit
    Alles anzeigen


    Client:

    AutoIt
    #include <INet.au3>
    
    
    Global $sIPAddress = "127.0.0.1"
    Global $iPort = 80
    
    
    TCPStartup()
    Global $iSocket = TCPConnect($sIPAddress, $iPort)
    If Not @error Then
    	TCPSend($iSocket, "abcd")
    	TCPCloseSocket($iSocket)
    EndIf
    TCPShutdown()
    Alles anzeigen
  • #RequireAdmin, script wird nicht ausgeführt

    • Oscar
    • 3. Mai 2017 um 17:46

    Es müsste funktionieren, wenn Du statt dnsflush.exe direkt zu starten, ein kurzes Zusatz-Script schreibst, dass dann gestartet wird:


    AutoIt
    #RequireAdmin
    RunWait(@ScriptDir & '\dnsflush.exe')

    Das Zusatz-Script compilieren und an der Stelle von dnsflush.exe starten.
    Dann kommt die UAC-Meldung erst, wenn das Zusatz-Script gestartet wird.

  • PDF Inhalt lesen

    • Oscar
    • 2. Mai 2017 um 12:55

    Du kannst Dein Anliegen nicht wirklich gut erklären, aber ich vermute mal, dass Du den Inhalt der PDF-Datei als Text weiterverarbeiten willst.
    Das geht mit: pdf2txt.

  • PDF Inhalt lesen

    • Oscar
    • 2. Mai 2017 um 08:47

    Und wo ist da jetzt die Frage bezüglich AutoIt?

  • Text Dateien bearbeiten

    • Oscar
    • 2. Mai 2017 um 08:44

    Du schreibst nicht, unter welchen Vorraussetzungen "etwas angehängt" werden soll.
    Somit kann ich nur mutmaßen:

    AutoIt
    Global $sDataFileIn = @ScriptDir & '\testdaten.txt'
    Global $sDataFileOut = @ScriptDir & '\testdaten_neu.txt'
    Global $sData = FileRead($sDataFileIn) ; Datei komplett in den Speicher laden
    Global $aData = StringSplit($sData, @CRLF, 3) ; die Daten in ein Array aufsplitten
    $sData = '' ; die Variable fuer die Ausgabedaten vorbereiten
    Global $iStart = 10 ; die ersten zehn Zeilen weglassen
    Global $iEnd = UBound($aData) - 1 - 10 ; die letzten zehn Zeilen weglassen
    
    
    For $i = $iStart To $iEnd
    	$sData &= $aData[$i] ; die bisherigen Daten hinzufuegen
    	If StringInStr($aData[$i], 'Z-1.007') Then $sData &= '(M777)' ; <- hier die Erweiterung hinzufuegen (aufgrund welcher Voraussetung?)
    	$sData &= @CRLF ; das Zeilenende hinzufuegen
    Next
    
    
    Global $hFile = FileOpen($sDataFileOut, 2) ; Datei zum schreiben oeffnen
    If $hFile <> -1 Then ; wenn erfolgreich...
    	FileWrite($hFile, $sData) ; Daten in die Datei schreiben
    	FileClose($hFile) ; Datei schliessen
    EndIf
    Alles anzeigen
  • Text Dateien bearbeiten

    • Oscar
    • 1. Mai 2017 um 19:42

    Am besten postest Du mal eine Beispieldatei und erklärst, was Du in den einzelnen Zeilen verändern nöchtest.
    Je nachdem, gibt es verschiedene Lösungsansätze.

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™