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

Beiträge von Andy

  • auf Stndardausgaber schreiben

    • Andy
    • 18. April 2010 um 22:18

    Dein Script funktioniert einwandfrei! Sowohl in der Scite-Konsole, als auch bei Win7 als Konsolenprogramm kompiliert. Jedenfalls bei mir....

  • Suche Jemand, der mir eine Leitstelle Coden kann

    • Andy
    • 17. April 2010 um 15:15
    Zitat

    Selbst wenn du da einen 1-EUR Jober findest zum Programm schreiben, ist das noch immer 'ne Stange Geld.

    und das mit dem Hintergrund, daß die (m.E. sehr professionell gemachte) Leitstelle im angegebenen Link für diese Funkspiele "zu mieten" ist! Mal die vorsichtig geschätzten 500-1000 Mannstunden Arbeit vorausgesetzt (der Programmierer hat keine Ahnung um was es geht und muss sämtliche Informationen erst erfahren/lernen) und mit einem relativ kleinen Stundenlohn multipliziert lässt sich die o.g. Leitstelle auf Jahre vom Ersteller mieten....

  • Sinus-Ton ausgeben

    • Andy
    • 17. April 2010 um 14:53

    Hi, habe passend zum Thema gestern schon etwas (wie üblich etwas längeres^^) verzapft, aber durch die Forensoftware wurde der Beitrag ans Nuldevice geschickt....

    Zunächst mal spielt der "Beep" eine Frequenz ab, ob die nun Sinusförmig ist, wage ich zu bezweifeln ^^, die Lautstärke (Amplitude) kannst du nicht beeinflussen.

    Um einen (Sinus-)Ton auf einem Lautsprecher auszugeben, mußt du also y(t) (die elektrische Spannung, die den Lautsprecher zum Schwingen anregt) ausrechnen und damit den Lautsprecher ansteuern. Damit die Membran des Lautsprechers schwingt, muss sich die Spannung ändern, ansonsten knackt es nur einmal kurz. Diese Spannung je nach der vergangenen Zeit wird mit der folgenden Formel ausgedrückt:

    y(t) = A * sin ( 2 * pi * f * t + phi)
    Das A bestimmt die Amplitude, d.h. die "Lautstärke" des Tons, das kannst du bei BEEP() nicht beeinflussen
    Die Frequenz f , nunja die wird nicht berechnet, sondern vorgegeben. f=1/T (T=Zeit von einem "Wellenberg" der Sinusfunktion zum nächsten)
    Die Phasenverschiebung phi ist im vorliegenden Fall (eine Schwingung) auch egal, da es deinem Ohr völlig schnurz ist, ob das Signal eine Millisekunde früher oder später kommt.
    Du kannst mit der Formel also den Wert auf der y-Achse zu jedem Zeitpunkt t errechnen.
    Die Formel reduziert sich zu y(t)=sin(2*pi*f*t)

    2*pi ist der Kreisumfang, also einmal die "Abwicklung" des Kreises auf der x-Achse. Da die Sinusfunktion sich immer wiederholt, müssen nur die y-Werte zum Zeitpunkt t während einer Schwingung (2*pi) berechnet werden.
    Gesucht ist also für jeden Zeitpunkt t die "Spannung" y(t), die an den Lautsprecher geschickt werden soll (diese Spannung lenkt die Membran aus!). Ist die Spannung y(t) über die Zeit t Sinusförmig, dann schwingt die Membrane und erzeugt einen "Sinuston". Soviel zur Theorie ^^

    AutoIt kommt ins Spiel...

    Spoiler anzeigen
    [autoit]

    $pi = atan(1)*4 ;3.14159265358979
    $pi = ATan(1) * 4
    $f = 100 ;frequenz in hertz
    $TT = 1 / $f ;T=1/f
    $w = 2 * $pi * $f ;omega=2*pi*f für Maschinenbauer gilt: OMEGA das weiß ich, Pi mal N durch dreißig!!! :o)
    $yt = ""

    [/autoit] [autoit][/autoit] [autoit]

    For $t = 0 To $TT Step $TT / 10 ;10 y(t)-Werte ()Amplituden) ermitteln für eine komplette sinusschwingung
    $yt &= Sin($w * $t) & @CRLF
    Next
    MsgBox(0, "Amplituden bei Frequenz " & $f & " Hz im Intervall 0-1/f", $yt)

    [/autoit] [autoit][/autoit] [autoit][/autoit]

    schön, wir haben nun 10 Amplituden unserer Sinusschwingung, wie bekommen wir die auf unserem Lautsprecher ausgegeben?
    Am einfachsten mit einer Wave-Datei (wav). Bei 8-Bit Mono entspricht jedes auf den DateiHeader folgende Byte einer Amplitude. HEUREKA! Also erstellen wir eine *.wav-Datei mit unseren Daten und lassen diese nun auf dem Soundsystem ausgeben.
    Allerdings reichen unsere 10 berechneten Amplituden bei weitem nicht aus, um einen "schönen" Ton zu erreichen...wir wählen 22050 Werte/Sekunde (Samplingrate). Geteilt durch eine gewähle Frequenz von 440Hz sind das rund 50 Werte PRO EINE SINUSSCHWINGUNG!

    Und hier kommt AutoIt ins Spiel.....

    Spoiler anzeigen
    [autoit]

    #include <Array.au3>
    #include <Memory.au3>
    #include <MemoryConstants.au3>

    [/autoit] [autoit][/autoit] [autoit]

    ;Das Script erstellt eine WAV-Datei im Speicher, spielt diese ab und speichert anschließend in eine Datei

    [/autoit] [autoit][/autoit] [autoit]

    $pi = 4 *atan(1) ;pi=3,1415926....
    $sekunden = 5 ;so lange soll der ton inb der abgespeicherten Datei abgespielt werden
    $samplingrate = 22050 ;abtastungen pro sekunde
    $BitsPerSample = 16 ;8,16,24 äquivalent die "Farbtiefe bei einem Bild",
    $Channels = 2 ;1,2,4, Kanäle, mono, stereo usw

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    $block = Int($Channels * $BitsPerSample / 8) ;1
    $bytes = $samplingrate * $block
    $samplefaktor = $BitsPerSample / 8 ;lokale hilfsvariable
    $filesize = $samplefaktor * $sekunden * $samplingrate * $Channels + 44 - 8

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    ;struktur mit dem Header einer WAV-Datei erstellen
    $struct = DllStructCreate("byte[" & $samplefaktor * $sekunden * $samplingrate * $Channels + 44 & "]") ;platz für unser sampling

    [/autoit] [autoit][/autoit] [autoit]

    $s = "char RIFF [4];" & _ ;RIFF
    "uint FileSize;" & _ ;Dateigröße-8 Bytes
    "char WAVE [4];" & _ ;WAVE
    "char fmt [4];" & _ ;fmt Header Signatur
    "uint fmt_len;" & _ ;länge restl. fmt
    "word Format;" & _ ;Datenformat s. Tabelle z.B. Wikipedia 1=PCM
    "word Channels;" & _ ;Anzahl Kanäle 1=MONO
    "uint Samplerate;" & _ ;Abtastrate pro Sekunde (22050)
    "uint Bytes;" & _ ;Abtastrate * Block (22050)
    "word Block;" & _ ;Channels * BitsPerSample / 8 (1)
    "word BitsPerSample;" & _ ;8, 16, oder 24 (8)
    "char DATA [4];" & _ ;DATA Header Signatur
    "uint Len;" ;Länge des folgenden Datenblocks

    [/autoit] [autoit][/autoit] [autoit]

    Switch $samplefaktor ;je nach einstellungen platz für die wav-Daten reservieren
    Case 1
    $s &= "byte WAVDATA[" & $sekunden*$samplefaktor * $samplingrate * $Channels & "]"
    Case 2
    $s &= "word WAVDATA[" & $sekunden*$samplefaktor * $samplingrate * $Channels & "]"
    Case 4
    $s &= "dword WAVDATA[" & $sekunden*$samplefaktor * $samplingrate * $Channels & "]"
    EndSwitch

    [/autoit] [autoit][/autoit] [autoit]

    $wavstruct = DllStructCreate($s, DllStructGetPtr($struct)) ;struct "überlagern" damit alle Daten byteweise in eine Datei geschrieben werden können

    [/autoit] [autoit][/autoit] [autoit]

    ;Unsere Daten für die Sinuswelle
    $f = 440 ;frequenz in hertz
    $TT = 1 / $f ;T=1/f
    $w = 2 * $pi * $f ;omega=2*pi*f für Maschinenbauer gilt: OMEGA das weiß ich, Pi mal N durch dreißig!!! :o)
    $Amplitude = 100 ^ $samplefaktor ;Lautstärke, bei 8 bit 100, bei 16 bit 10000
    $i=0 ;anzahl der geschriebenen bytes (funktionswerte)
    ;hier gehts los, wir erstellen eine komplette sinuswelle, diese wird so lange wiederholt, bis die Abspieldauer in sekunden erreicht ist
    For $t = 0 To $sekunden Step 1 / $samplingrate ;samplingrate y(t)-Werte ()Amplituden) ermitteln
    $i += 1
    $yt = Int($Amplitude * Sin($w * $t)) ;unsere altbekannte formel
    if $i<110 then consolewrite($i&" "&$yt & @CRLF )
    DllStructSetData($wavstruct, "WAVDATA", $yt, $i) ;schreiben von y(t) in die struct
    If $Channels = 2 Then ;wenn 2 kanäle (stereo), dann das byte für den 2. Kanal hinzufügen
    $i += 1
    DllStructSetData($wavstruct, "WAVDATA", $yt, $i)
    EndIf
    Next

    [/autoit] [autoit][/autoit] [autoit]

    ;jetzt werden die Daten in die struct geschrieben, es entsteht eine WAV-Datei im Speicher
    DllStructSetData($wavstruct, "RIFF", "RIFF")
    DllStructSetData($wavstruct, "FileSize", $filesize)
    DllStructSetData($wavstruct, "WAVE", "WAVE")
    DllStructSetData($wavstruct, "fmt", "fmt ")
    DllStructSetData($wavstruct, "fmt_len", 16)
    DllStructSetData($wavstruct, "Format", 1) ;PCM
    DllStructSetData($wavstruct, "Channels", $Channels)
    DllStructSetData($wavstruct, "Samplerate", $samplingrate)
    DllStructSetData($wavstruct, "Bytes", $bytes) ;samplerate*block
    DllStructSetData($wavstruct, "Block", $block)
    DllStructSetData($wavstruct, "BitsPerSample", $BitsPerSample)
    DllStructSetData($wavstruct, "DATA", "data")
    DllStructSetData($wavstruct, "Len", Int($samplingrate / $f * $Channels * $samplefaktor));hier wird NUR DIE LÄNGE DER ERSTEN SINUSWELLE eingetragen, um den Sound im speicher abzuspielen

    [/autoit] [autoit][/autoit] [autoit]

    $data = ""
    For $i = 1 To 14 ;anzeigen des WAV-Headers
    $data &= DllStructGetData($wavstruct, $i) & @CRLF
    Next
    MsgBox(0, "Daten WAV-Header", StringLeft($data, 100))

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    _Playsound(DllStructGetPtr($wavstruct), 1) ;abspielen des sounds aus dem speicher, Ton wird immer wiederholt
    Msgbox(0,"Ton mit Frequenz "&$f&" Hz","Spieldauer "&$sekunden&" Sekunden",$sekunden)

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    ;sound mit Länge von Sekunden in Datei abspeichern ; dafür muss die länge des sounds in der struct geändert werden von einer wellenlänge(s.o.) zur Länge aller wellen bis zum ende der spielzeit
    DllStructSetData($wavstruct, "Len", Int($sekunden *$samplingrate * $Channels * $samplefaktor));hier wird NUR DIE LÄNGE DER ERSTEN SINUSWELLE eingetragen, um den Sound im speicher abzuspielen

    [/autoit] [autoit][/autoit] [autoit]

    $sdat = DllStructGetData($struct, 1) ;struktur in eine Datei schreiben
    $wavdata = StringLeft(BinaryToString($sdat), $sekunden *$samplingrate * $Channels * $samplefaktor + 44)
    ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $wavdata = ' & StringLen($wavdata) & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console
    $wav = FileOpen("test1.wav", 18)
    $bindata = FileWrite($wav, $wavdata)
    ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $bindata = ' & $bindata & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console
    FileClose($wav)

    [/autoit] [autoit][/autoit] [autoit]

    shellexecute("test1.wav") ;wavedatei abspielen
    exit

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Func _PlaySound($sSoundFile, $mem = 0) ;mem=1 spielt sound aus dem speicher, dann muss $sSoundfile der pointer zum anfang der struct sein
    Local Const $SND_ALIAS = 0x10000
    Local Const $SND_ALIAS_ID = 0x110000
    Local Const $SND_APPLICATION = 0x80
    Local Const $SND_ASYNC = 0x1
    Local Const $SND_FILENAME = 0x20000
    Local Const $SND_LOOP = 0x8
    Local Const $SND_MEMORY = 0x4
    Local Const $SND_NODEFAULT = 0x2
    Local Const $SND_NOSTOP = 0x10
    Local Const $SND_NOWAIT = 0x2000
    Local Const $SND_PURGE = 0x40
    Local Const $SND_RESOURCE = 0x40004
    Local Const $SND_SYNC = 0x0
    If $mem = 1 Then
    $a = DllCall('winmm.dll', 'int', 'PlaySoundA', 'ptr', $sSoundFile, 'int', 0, 'int', BitOR(4, 1, 8, 2, 0x10))

    [/autoit] [autoit][/autoit] [autoit]

    Else
    $a = DllCall('winmm.dll', 'int', 'PlaySoundA', 'str', $sSoundFile, 'int', 0, 'int', BitOR(1, 8))
    EndIf
    ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $a = ' & $a[0] & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console
    EndFunc ;==>_PlaySound

    [/autoit]

    Hausaufgabe: bastel eine schöne GUI^^

  • Rechner verbessern , Prozessor & Co

    • Andy
    • 17. April 2010 um 00:24
    Zitat

    4GB RAM, sind die unter XP ueberhaupt adressierbar

    Nein, für XP sind 2 Gig auch ausreichend.

    Zitat

    Den größten Effekt wirst Du mit einer neuen schnellen(!) Festplatte erzielen

    Könnte sein, aber erstens hat das Board sicherlich kein Sata und zweitens nützt die schnellste Platte nichts, denn das (durch mehr RAM) "nicht geswappte" Ram ist tausendfach schneller^^

  • Binär und Binärstrings

    • Andy
    • 16. April 2010 um 09:53

    Link

  • Rechner verbessern , Prozessor & Co

    • Andy
    • 16. April 2010 um 09:18

    IdR bemerkt man (subjektiv) "Verbesserungen" im Programmablauf erst ab einer Geschwindigkeitssteigerung von zw. 20 und 30% . Für die 100€ solltest du Prozessor und Ram bekommen, die diesen Zustand locker erreichen. Ich vermute, sämtliche sonstigen Tuningmaßnahmen hast du bereits ausgenutzt, die da wären sämtliche Tuningprogramme und allen unnötigen Müll von der Maschine runterzuwerfen, neueste Treiber einzuspielen usw. Defragmentierung hilft ggf auch weiter (gerade bei Spielen!)
    Vor Jahren hat die Aufrüstung eines Rechners mit 1Gig Ram statt der 512 MB dazu geführt, daß ich nicht mal den Prozessor upgegradet habe. Die "gefühlte Schwuppdizität" (und nur die ist wichtig^^) wurde jedenfalls verbessert, das Plattengerödel hörte weitgehend auf.

    Bei der Gelegenheit der Aufrüstung bietet es sich auch an, Kühler, Lüfter usw. sauberzumachen, von einem Bekannten bekam ich ein Notebook geschenkt, weil es "saulangsam" war. Kein Wunder, der Prozessor hatte sich aus überlebenstechnischen Gründen nach 10 Minuten Laufzeit bis aufs Minimum runtergetaktet. Sämtliche Kühler/Lüfter waren mit Staub zugesetzt! Zerlegt, gereinigt, zusammengebaut, läuft wie Lotte!

  • [GELÖST]Mozilla Firefox

    • Andy
    • 15. April 2010 um 14:19

    In China ist ein Sack Reis umgefallen, also ruf ich dort an, sag denen Bescheid und die schicken einen hin der den Sack wieder aufstellt!

    Ersetze:
    "In China" durch "Bei meinem Computer"
    "ist ein Sack Reis umgefallen" durch "funktioniert ein Programm nicht mehr"
    "also ruf ich dort an, sag denen Bescheid" durch "also installiere ich neu"
    "die schicken einen hin der den Sack wieder aufstellt" durch "und alles funktioniert wieder"

    *don´t feed the troll*

  • Editor unter Opera

    • Andy
    • 14. April 2010 um 19:48

    Das Problem liegt nicht an Opera, sondern an Woltlab. Fixes für die Forensoftware sind dort anscheinend "in der Mache", aber nicht vor der nächsten großen Release vorgesehen. Wenn ich aber den mit der heissen Nadel gestrickten Kram dort sehe, der nichts anderes macht, als einem OperaUser das Javascript vorzuenthalten, dann viel Spass....das kann ich nämlich selbst abschalten....

    Ja, ich habe auch bereits mehrmals Javascript ausgeschaltet um Posten zu können (mehrere Beiträge sind auch schon ins NUL-Device geflogen), allerdings werde ich weder auf den FF noch sonst irgendeinen Browser umsteigen nur weil der Hersteller einer Forensoftware aufgrund der Abneigung gegen einen bestimmten Browser nicht gewillt ist, in einer angemessenen Zeit seine Arbeit ordentlich zu machen!
    In anderen Foren habe ich dieses Problem nicht, dort bekommen zahlende Betreiber funktionierende Software für ihr Geld. Oder setzt mein "buggy" Browser dort eine andere JS-Engine ein?

  • Geschwindigkeit von scripten

    • Andy
    • 14. April 2010 um 16:18
    Zitat

    da man JAVA sonst auch in die Scriptsprachengruppierung fassen müsste.

    Wo sie zusammen mit den meisten plattformunabhängigen "Sprachen" auch hingehören....Das ist genau der Sinn!
    Es ist wesentlich einfacher, einen kleinen Teil eines Systems umzubauen, als das gesamte System. Heute läuft auf jeder Armbanduhr und in jeder Mikrowelle Java, kein Hersteller traut sich mit HARDWARE auf den Markt, für die es keine passenden Compiler/Interpreter/Wieauchimmerübersetzer gibt.
    Java hat´s vorgemacht, aber Sun hat es durch ihr Lizenzsystem verbockt wie ehemals IBM mit dem Microchannel! .Net hätte aus den Fehlern lernen können, Billyboy hat´s verbockt. Und Apple lacht sich solange tot und scheffelt derweil Milliarden mit der Arbeit von anderen! Statt die Systeme weiter zu öffnen wird zzt immer mehr gekapselt. Selbst Google, die ausschliesslich mit "gegen den Strom schwimmen" erfolgreich wurden, fängt nun an mit den anderen mitzurudern.....

  • Geschwindigkeit von scripten

    • Andy
    • 14. April 2010 um 15:22

    Wobei es eigentlich wesentlich wichtiger ist, das aktuelle Problem schnell und vor allem einfach zu lösen.
    Bis der .Net-"Programmierer" sein Projekt überhaupt eingerichtet hat, ist das AutoIt-"Script" schon am laufen...
    Wobei wir wieder beim Startpost wären :)
    Welches Problem wird durch das Programm "zu langsam" gelöst?

  • Geschwindigkeit von scripten

    • Andy
    • 14. April 2010 um 10:49

    Hi, um was gehts denn überhaupt?
    "Schneller" ist relativ, 10x, 100x, 1000x schneller? 10^28x schneller? Oder reicht es, wenn einige Funktionen 10% schneller sind?
    Generell sollte man seinen Code kennen, denn dort liegt das größte Potential. 90% der Zeit verbringt die meiste Software in bestimmten Programmteilen, den sog. "Hot Spots". Diese dann zu optimieren bringt dann natürlich am meisten.

    Das meiste Potential steckt allerdings in den verwendeten Algorithmen. Das zeigen die µIt´s und µIt-Light hier im Forum deutlich!

    Allerdings muss man bedenken, daß man sich AutoIt als Sprache ausgesucht hat, weil man damit einfach,schnell und effizient Problemlösungen erstellen kann. Man muß man sich auch keine Gedanken über Datentypen, richtiges Alignement uvm. machen, was in anderen Programmiersprachen Kopfschmerzen verursacht^^

    Zum Thema DLL, die erstellt eine ordentliche Entwicklungsumgebung per Knopfdruck. Und man hat den großen Vorteil, die enthaltenen Funktionen auch mit anderen Programmiersprachen nutzen zu können. Im Prinzip nichts anderes als eine "UDF", die nicht per <include>, sondern per DllCall() eingebunden wird.
    Und mit welcher Sprache man diese DLL erstellt, ist auch schnurz, die meisten Compiler erzeugen heutzutage schnellen Code. Es gibt Basicdialekte (wozu man übrigens auch AuToIt zählen kann), bei denen muss man sich nicht groß umstellen. Es muß nicht immer C sein. :D
    Außerdem gibt es kaum noch ein programmiertechnisches Problem, bei dem die Lösung NICHT in DLL-Form vorliegt...

  • Probleme mit FileOpen

    • Andy
    • 13. April 2010 um 14:38

    Hi, nur weil ich nicht auf @error teste heisst das nicht, daß du das auch so machen musst! :D

    Spoiler anzeigen
    [autoit]

    #include <File.au3>
    #include <Array.au3>
    $file = "ausgabe.txt"
    $a = _fileEinlesen($file)
    _ArrayDisplay($a)

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Func _FileEinlesen($target)
    ;~ MsgBox(0, "", $target)
    Dim $array_content
    $a = _FileReadToArray($target, $array_content)
    If @error Then
    MsgBox(0, "Fehler im Modul _FileEinlesen()", "Datei " & $target & " kann nicht gelesen werden!")
    Return SetError(1, 0, 0)
    EndIf
    ;ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : UBound($array_content) = ' & UBound($array_content) & @crlf & '>Error code: ' & @error & @crlf) ;### Debug Console
    if UBound($array_content) <= 2 then return $array_content ;wenn nur ein element
    ; _arraydisplay($array_content)
    _ArraySort($array_content)
    $auswertung = _ArrayUnique($array_content, 1, 1)

    [/autoit] [autoit][/autoit] [autoit]

    $i = 0
    Do
    $i += 1
    Do
    $split_1 = StringSplit($auswertung[$i], @TAB)
    $split_2 = StringSplit($auswertung[$i + 1], @TAB)
    If $split_1[1] = $split_2[1] Then _ArrayDelete($auswertung, $i + 1)
    ; _arraydisplay($auswertung,$i&" "&UBound($auswertung))
    Until $split_1[1] <> $split_2[1] Or $i + 1 = UBound($auswertung) - 1
    Until $i + 1 = UBound($auswertung) - 1
    Return $auswertung
    EndFunc ;==>_FileEinlesen

    [/autoit]

    Btw gehören noch wesentlich mehr @error-Abfragen in dein Script! Dann finden sich diese "Fehler" nämlich von selbst ^^

  • Gui mit Radio Button

    • Andy
    • 13. April 2010 um 12:59

    Hallo, mal ein Beispiel....

    Spoiler anzeigen
    [autoit]

    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>

    [/autoit] [autoit][/autoit] [autoit]

    Dim $Material_Radio[10] ;platz für 10 Buttons
    Dim $status_Radio[10] ;platz für 10 Buttons

    [/autoit] [autoit][/autoit] [autoit]

    #region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Form1", 556, 336, 192, 121)
    $Group1 = GUICtrlCreateGroup("Material", 0, 0, 281, 145)
    $Material_Radio[0] = GUICtrlCreateRadio("Fliesen", 0, 25, 100, 17)
    $Material_Radio[1] = GUICtrlCreateRadio("Holz", 0, 50, 100, 17)
    $Material_Radio[2] = GUICtrlCreateRadio("Sand", 0, 75, 100, 17)
    $Material_Radio[3] = GUICtrlCreateRadio("Eimer", 0, 100, 100, 17)
    $Material_Radio[4] = GUICtrlCreateRadio("Streckmetall", 100, 25, 100, 17)

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    $Group2 = GUICtrlCreateGroup("Auftrag Status", 280, 0, 273, 145)
    $status_Radio[0] = GUICtrlCreateRadio("Bestellt", 280, 24, 113, 17)
    $status_Radio[1] = GUICtrlCreateRadio("Geliefert", 280, 48, 113, 17)

    [/autoit] [autoit][/autoit] [autoit]

    $Edit1 = GUICtrlCreateEdit("", 0, 144, 553, 161)

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    $Button2 = GUICtrlCreateButton("Übernehmen", 232, 304, 75, 25, $WS_GROUP)
    GUISetState(@SW_SHOW)

    [/autoit] [autoit][/autoit] [autoit]

    #endregion ### END Koda GUI section ###

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Button2 ;"Übernehmen" Button abfragen
    _Edit_beschreiben()
    EndSwitch
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    Func _Edit_beschreiben()
    $material = "" ;noch kein Material ausgewählt
    $Status = "" ;noch kein status ausgewählt
    For $i = 0 To UBound($Material_Radio) - 1 ;alle materialen durchsuchen
    If BitAND(GUICtrlRead($Material_Radio[$i]), $GUI_CHECKED) = $GUI_CHECKED Then ;wenn Material-Radiobutton gechecked, dann
    $material = GUICtrlRead($Material_Radio[$i], 1) ;material merken
    EndIf
    If BitAND(GUICtrlRead($status_Radio[$i]), $GUI_CHECKED) = $GUI_CHECKED Then ;wenn Status-Radiobutton gechecked, dann
    $Status = GUICtrlRead($status_Radio[$i], 1) ;Status merken
    EndIf
    Next
    If $material = "" Then ;kein Material ausgewählt
    MsgBox(0, "Fehler Eingabe", "Es wurde kein Material ausgewählt!")
    Return
    EndIf
    If $Status = "" Then ;kein Status ausgewählt
    MsgBox(0, "Fehler Eingabe", "Es wurde kein Auftrag Status ausgewählt!")
    Return
    EndIf
    $neue_zeile = "Material: " & $material & @TAB & @TAB & "Status: " & $Status ;zeile generieren
    $text = GUICtrlRead($Edit1, 0) ;inhalt EDIT1
    If StringInStr($text, $neue_zeile) = 0 Then ;nur eintragen, falls noch nicht im Edit1 vorhanden
    GUICtrlSetData($Edit1, $text & $neue_zeile & @CRLF)
    EndIf
    EndFunc ;==>_Edit_beschreiben

    [/autoit]
  • Probleme mit FileOpen

    • Andy
    • 13. April 2010 um 11:13

    Hallo, mal auf die schnelle ein Beispiel, wie man die Wortliste entschlacken könnte, statt Arrays bieten sich in einem "Wörterbuch" aber auch die sehr schnellen

    [autoit]

    $obj = ObjCreate("System.Collections.ArrayList") ;oder
    $oDictionary = ObjCreate('Scripting.Dictionary')

    [/autoit]

    -Funktionen an

    Spoiler anzeigen
    [autoit]

    #include <File.au3>
    #include <Array.au3>

    [/autoit] [autoit][/autoit] [autoit]

    $ausgabedatei = "Ausgabe_test.txt"
    FileDelete($ausgabedatei) ;zum test löschen
    $datei_inhalt = ""
    Dim $array_inhalt

    [/autoit] [autoit][/autoit] [autoit]

    For $i = 1 To 100 ;ein zufälliger dateiinhalt wird erstellt
    $datei_inhalt &= "wort" & Random(1, 5, 1) & @TAB & "---> Liste Wort enthalten in Datei" & Random(1, 2, 1) & " und Datei" & Random(3, 4, 1) & @CRLF
    $datei_inhalt &= "wort" & Random(1, 5, 1) & @TAB & "---> Liste Wort enthalten in Datei" & Random(3, 4, 1) & " und Datei" & Random(1, 2, 1) & @CRLF
    Next
    $datei_inhalt &= "wort" & Random(7, 8, 1) & @TAB & "---> Liste Wort enthalten in Datei" & Random(3, 4, 1) & " und Datei" & Random(1, 2, 1) & @CRLF
    FileWrite($ausgabedatei, $datei_inhalt) ; dateiinhalt in datei schreiben
    MsgBox(262144, 'Debug line ~' & @ScriptLineNumber, 'Selection:' & @LF & '$datei_inhalt' & @LF & @LF & 'Return:' & @LF & $datei_inhalt) ;### Debug MSGBOX

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    $split = _FileReadToArray($ausgabedatei, $array_inhalt) ;dateiinhalt in ein array
    ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $split = ' & $split & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console

    [/autoit] [autoit][/autoit] [autoit]

    _ArrayDisplay($array_inhalt, "Dateiinhalt")

    [/autoit] [autoit][/autoit] [autoit]

    _ArraySort($array_inhalt) ;sortieren
    _ArrayDisplay($array_inhalt, "sortiert")

    [/autoit] [autoit][/autoit] [autoit]

    $auswertung = _ArrayUnique($array_inhalt, 1, 1) ;mehrfache wörter eliminieren
    _ArrayDisplay($auswertung, "Unique")

    [/autoit] [autoit][/autoit] [autoit]

    ;nun die doppelt vorkommenden Hinweise im Text reduzieren, "wort1 in Datei1 und Datei2"<>"wort1 in Datei2 und Datei1"
    $i = 0
    Do
    $i += 1 ;nächstes wort
    Do
    $split_1 = StringSplit($auswertung[$i], @TAB) ;zeile splitten
    $split_2 = StringSplit($auswertung[$i + 1], @TAB) ;nächste zeile splitten
    If $split_1[1] = $split_2[1] Then _ArrayDelete($auswertung, $i + 1) ;falls beide wörter gleich sind, zeile eliminieren
    Until $split_1[1] <> $split_2[1] Or $i + 1 = UBound($auswertung)-1 ;solange, bis es keine doppelten wörter gibt, oder das ende der liste erreicht ist
    Until $i + 1 = UBound($auswertung)-1 ;solange, bis das ende der liste erreicht ist

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    _ArrayDisplay($auswertung, "Auswertung abgeschlossen")
    FileDelete($ausgabedatei) ;zum test löschen

    [/autoit]
  • schliessen neues Fenster -> Fokus

    • Andy
    • 12. April 2010 um 14:35

    Wenn ich mir die Scriptausschnitte anschaue, vermute ich auch einen Bedarf am OnEventmodus^^
    Weiterhin würde ich empfehlen, sämtliche Fenster beim Programmstart zu erstellen und dann nur noch bei Bedarf mittels

    [autoit]

    GuiSetState()

    [/autoit]

    ein- bzw. auszublenden @SW_ENABLE bzw SW_DISABLE.

  • SAP Automatisierung im Hintergrund

    • Andy
    • 7. April 2010 um 17:18

    Der Test per CTRL+C sollte nur prüfen, ob du überhaupt an den "Text" kommst, das klappt jedenfalls schonmal.

    Zitat

    Wenn ich an den Text der dargstellt wird rankommen würde, würde mir das ja auch schon helfen, dann kann man sich den Bereich ja rausziehen.

    Wo ist dann das Problem?
    Mit

    [autoit]

    $text=clipget()

    [/autoit]

    bekommst du doch den Text ins AutoIt....

    Aber irgendwie muss ja die Ctrl-C-Funktion an den SAP-Fensterinhalt kommen, ggf. über eine der 32000 (teils undokumentierten) API-Funktionen :rofl:

  • DLLCall

    • Andy
    • 6. April 2010 um 18:52

    Heisst deine dll test1 oder test1.dll? Der vollständige Dateinamename sollte so auch in den dllcall().
    Je nach Compiler ggf auch cdecl beachten, damit die Parameter richtig übergeben (zurückgegeben) werden.

    Edit: nach dem dll-call zuerst auf @error testen....

  • [Beendet] µitLight März

    • Andy
    • 5. April 2010 um 14:59

    Hallo zusammen,

    Ich möchte NICHT, daß die von mir vorgestellte Version mit dem "Embedded-Assembler" im Wettbewerb gewertet wird. Ich habe die Variante nur vorgestellt um zu zeigen, was mit einigen Zeilen Code auch in AutoIt Geschwindigkeitsmäßig machbar ist (obwohl es nach Optimierung auch noch ca. 100x schneller geht!).

    Generell bin ich mit Blick auf die Zielgruppe des µIt-Light dafür, daß ausschliesslich die im Orginal AutoIt-Download enthaltenen Funktionen verwendet werden dürfen.Weiterhin sollten "selbstgeschriebene" Funktionen mit DLL-Calls z.B. der API nicht berücksichtigt werden.

    Den µIt-Light habe ich immer als Ansporn für die Anfänger/ und "leicht" Fortgeschrittenen gesehen um an der Programmiertechnik und der Implementation von Algorithmen zu feilen (und um von den anderen zu lernen!). Und ich denke, so soll es auch bleiben....

  • Decompiler - Wie kann man sich schützen?

    • Andy
    • 4. April 2010 um 14:10
    Zitat

    3. Man verschwendet gar keine Gedanken daran


    "If you want to know how it works, read the source...."

    Bei dieser Art Fragen wundere ich mich immer, weshalb jemand "seinen" Code schützen möchte aber in einer "Scriptsprache" Programme schreibt, welche ( nach 2 Minuten googlen ) als absolut ungeeignet dafür erscheint.

    Zitat

    wie man es diesen Decompile kiddies erschweren kann


    Schreibe dein Programm selbstmodifizierend, packe es in einen selbstgeschriebenen Packer, lade nur Codefragmente in den Speicher uswusf. oder schreibe ein Programm, was für "Decompilekiddies" (ist das die Zielgruppe?) völlig uninteressant ist!

  • Cat 5e - alter Mist ?

    • Andy
    • 3. April 2010 um 17:11
    Zitat

    Ist aber nichts für den schmalen Geldbeutel

    Und wie schon gesagt nichts für den Otto-Normalverbraucher.
    Falls sowieso von extern Glasfaser Einzug hält, bietet sich die dann auch als interne "Verkabelung" an, damit hat auch die "Auflegerei" ein Ende....Preis spielt ja keine Rolle^^

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™