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

  • bildschirm in fenster

    • Andy
    • 16. September 2009 um 00:22

    ...und noch eine Möglichkeit...http://www.autoit.de/index.php?page=Thread&postID=110480#post110480

  • Scripte per AutoIt starten

    • Andy
    • 13. September 2009 um 16:24

    Hi
    schau mal HIER, vor allem die Antwort von GtaSpider.
    ciao
    Andy

  • Problem mit @DesktopDir

    • Andy
    • 13. September 2009 um 14:16

    @simon,
    das mußt du jetzt mal genauer erklären, denn was eine MessageBox mit einer Umgebungs/Systemvariablen zu tun hat wusste ich bisher nicht...

    [autoit]

    consolewrite(@desktopdir)

    [/autoit]

    Was muss ich hier "ganz einfach" einstellen, damit man das richtige Verzeichnis angeuzeigt bekommt?

    FireFlyer
    Ich würde auch deine Methode bevorzugen :thumbup:

  • Checkboxen auswerten

    • Andy
    • 13. September 2009 um 14:10
    Zitat

    Was macht denn dieser Thread hier im Poweruser-Forum?

    ;( OmG, war mir garnicht aufgefallen! Da verschwinde ich mal lieber schnell von der Bildfläche, bevor mir noch

    Zitat

    unqualifizierten Antworten

    entfleuchen.... :D

  • RadioButton Problem: "Aktuelles Tab auf Top setzen"

    • Andy
    • 13. September 2009 um 12:30

    so?

    Spoiler anzeigen
    [autoit]

    #include <GuiEdit.au3>
    #include <GUIConstantsEx.au3>
    #include <GuiTab.au3>

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

    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Form1", 928, 617, -1, -1)
    $Button1 = GUICtrlCreateButton("Tabs auswählen", 8, 73, 105, 17, 0)
    $Button2 = GUICtrlCreateButton("TXT Anzeigen", 8, 92, 105, 17, 0)
    $Button3 = GUICtrlCreateButton("E-Mail Daten", 8, 111, 105, 17, 0)
    $Button4 = GUICtrlCreateButton("Button4", 8, 131, 105, 17, 0)
    $Button5 = GUICtrlCreateButton("Button5", 8, 151, 105, 17, 0)
    $Button6 = GUICtrlCreateButton("Button6", 8, 170, 105, 17, 0)
    $Tab1 = GUICtrlCreateTab(120, 48, 801, 561)
    GUICtrlSetResizing(-1, $GUI_DOCKWIDTH+$GUI_DOCKHEIGHT)
    $TabSheet1 = GUICtrlCreateTabItem("TabSheet1")
    $TabSheet2 = GUICtrlCreateTabItem("TabSheet2")
    $TabSheet3 = GUICtrlCreateTabItem("TabSheet3")
    $TabSheet4 = GUICtrlCreateTabItem("TabSheet4")
    $TabSheet5 = GUICtrlCreateTabItem("TabSheet5")
    $TabSheet6 = GUICtrlCreateTabItem("TabSheet6")
    GUICtrlCreateTabItem("")
    GUICtrlSetState(-1, $GUI_DISABLE)
    $Radio1 = GUICtrlCreateRadio("Aktuelles Tab auf Top setzen", 760, 51, 161, 17)
    $Label1 = GUICtrlCreateLabel("MENÜ", 32, 48, 60, 21)
    GUICtrlSetFont(-1, 14, 800, 0, "Arial")
    GUICtrlSetColor(-1, 0x0000FF)
    $Group1 = GUICtrlCreateGroup("TXT Informationen", 120, 48, 801, 561)
    GUICtrlSetFont(-1, 8, 800, 0, "MS Sans Serif")
    GUICtrlSetColor(-1, 0xFF0000)

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

    $Label2 = GUICtrlCreateLabel("", 130, 68, 781, 531)
    $Label2b = _GUICtrlEdit_SetText($Label2, FileRead(@ScriptDir & "\test.txt"))

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

    GUICtrlCreateGroup("", -99, -99, 1, 1)
    GUICtrlSetState($Group1, $GUI_HIDE)

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

    aus_alle()
    an_button1()

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

    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    $toptab=0
    While 1

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

    if guictrlread($radio1)=$GUI_CHECKED Then ;wenn der Checkbutton nicht gesetzt ist
    $toptab= _GUICtrlTab_GetCurFocus($tab1) ;Index des Fokussierten Tabs merken
    Msgbox(0,0,"Tabindex :"&$toptab&" gesetzt",1) ; nachricht
    GUICtrlSetstate($radio1,$GUI_UNCHECKED) ; Checkbutton zurücksetzen
    endif

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

    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    ;**********************

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

    Case $Button1
    _GUICtrlTab_setCurFocus($tab1,$toptab) ;gemerkten Tab auswählen
    aus_alle()
    an_button1()

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

    case $Button2
    aus_alle()
    an_button2()

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

    case $Button3
    aus_alle()

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

    Case $Button4
    aus_alle()

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

    case $Button5
    aus_alle()

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

    Case $Button6
    aus_alle()

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

    EndSwitch
    WEnd

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

    Func aus_alle()
    GUICtrlSetState($Tab1, $GUI_HIDE )
    GUICtrlSetState($Radio1, $GUI_HIDE)
    GUICtrlSetState($Group1, $GUI_HIDE)
    GUICtrlSetState($Label2, $GUI_HIDE)
    EndFunc

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

    Func an_button1()
    GUICtrlSetState($Tab1, $GUI_SHOW)
    GUICtrlSetState($Radio1, $GUI_SHOW)
    EndFunc

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

    Func an_button2()
    GUICtrlSetState($Group1, $GUI_SHOW)
    GUICtrlSetState($Label2, $GUI_SHOW)
    EndFunc

    [/autoit]
  • Checkboxen auswerten

    • Andy
    • 13. September 2009 um 11:21

    Hallo Alina,

    Zitat

    was machst Du, wenn statt "Box" immer was anderes da steht?

    Es ist völlig egal was dort steht, da über die ControlID selektiert wird, das kannst du übrigens mit ALLEN Controls so machen.
    Lass uns mal ein "Problem" konstruieren: Eine GUI für ein größeres Projekt, bei der du am Anfang noch nicht die genaue Anzahl der Controls (Buttons, Checkboxen, Labels, Bilder usw) weist, du weist nur, es werden SEHR viele. Im Lauf der Entwicklung der GUI fallen dir immer weitere Möglichkeiten ein, ein Video-Control, 23 zusätzliche Buttons, eine Listview usw.
    Wie kannst du diese "Flut" von Controls in deiner Abfrage abwickeln? Oder 7 Gruppen mit je 12 Checkboxen? Natürlich könntest du 12 Seiten lang mit

    [autoit]

    If $ted ="14334567841" then

    [/autoit]

    jede einzelne Kombination abfragen, aber wenn nur 3 Checkboxen dazukommen schreibst du auch 12 Seiten Code um, bzw schreibst ihn neu!
    Dem Array dagegen ist es (fast) völlig egal, wieviele Einträge es hat, um mal bei dem Beispiel Checkboxen zu bleiben, du könntest in meinem Beispiel 1000 Checkboxen hinzufügen, ohne daß sich der Code nur um eine Zeile ändert!

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>

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

    dim $aCheckBoxArray[300]

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

    guicreate("",@desktopwidth-50, @desktopheight-50,0,0)
    for $i=0 to ubound($aCheckBoxArray)-1 ;Gui füllen
    $aCheckBoxArray[$i]=GUICtrlCreateCheckbox(hex(random(10,1000000),8), 10+80*int($i/30), mod($i,30)*20)
    Next
    guisetstate()

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

    $sTool="Es sind folgende Checkboxen markiert:"&@crlf&@crlf

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

    do
    $sChecked=""
    for $i=0 to ubound($aCheckboxArray)-1 ;abfragen, ob checkbox angehakt
    if guictrlread($aCheckBoxArray[$i])=$GUI_CHECKED Then $sChecked&=" "&$i
    Next
    tooltip($sTool&$sChecked)
    until guigetmsg()=-3

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

    exit

    [/autoit]

    Der "Text" der Boxen bzw der Controls ist unerheblich wie du siehst.
    Ändere einfach mal in Zeile 3 die Anzahl der Controls in eine beliebige Zahl....

    ciao
    Andy

  • Script aus Access starten zum drucken einer Datei

    • Andy
    • 12. September 2009 um 23:08

    Hallo Wilhelm1,
    sobald du aus Access ein compiliertes AutoIt-Script (*.Exe-Datei) starten kannst , welches dann die Druckereinstellung übernimmt, sollte das kein Problem sein.
    Allerdings kannst du auch "direkt" ein AutoIt/VBS-Script aufrufen, sollte auch per VBA gehen m.E., obwohl ich ehrlich gesagt schon jahrelang nichts mehr mit Access gemacht habe.

    Spoiler anzeigen
    Code
    ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    '
    ' Example WSH Script (VBScript)
    '
    ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    
    
    ' Require Variants to be declared before used
    Option Explicit 
    
    
    
    
    ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    ' Declare Variables & Objects
    ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    
    
    Dim oShell
    Dim oAutoIt
    
    
    
    
    ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    ' Initialise Variables & Objects
    ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    
    
    Set oShell = WScript.CreateObject("WScript.Shell")
    Set oAutoIt = WScript.CreateObject("AutoItX3.Control")
    
    
    
    
    ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    ' Start of Script
    ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    
    
    WScript.Echo "This script will run some test calculations"
    
    
    oShell.Run "calc.exe", 1, FALSE
    
    
    ' Wait for the calc window to become active
    oAutoIt.WinWaitActive "Rechner", ""
    
    
    ' Send some keystokes to calc
    oAutoIt.Send "2*2="
    oAutoIt.Sleep 500
    oAutoIt.Send "4*4="
    oAutoIt.Sleep 500
    oAutoIt.Send "8*8="
    oAutoIt.Sleep 1500
    oAutoIt.WinClose "Rechner", ""
    oAutoIt.WinWaitClose "Rechner", ""
    
    
    WScript.Quit
    Alles anzeigen

    Das ist ein "standalone"-VBS, einfach als *.VBS Datei abspeichern und doppelklicken. Du kannst also alle( ? ) AutoIt-Befehle auch in anderen Sprachen nutzen, mit Sicherheit auch in VBA.
    Somit steuerst du die Druckausgabe (oder sonst irgendetwas) "direkt" per Autoit aber innerhalb deines VBA-Codes, sollte am einfachsten sein.....
    ciao
    Andy

  • Mit FileInstall kompletten Ordner in das Skript einbinden?

    • Andy
    • 12. September 2009 um 22:31

    Hi,
    ich habe mal in meinem Fundus folgendes aufgestöbert, ggf kann es ja der eine oder andere gebrauchen...
    Die einzubindenden Dateien werden im Dialog ausgewählt und die Fileinstall()-Anweisung in den Quellcode geschrieben, Gimmick ist auch die mögliche Auswahl von AutoIt-Macros für das Zielverzeichnis z.B. @scriptdir\test\

    Spoiler anzeigen
    [autoit]

    ;MultiFileInstall MFI von [email='Andy@autoIt.de'][/email]
    ;schreibt Fileinstallanweisung(en) in den Quellcode
    ;
    ;Es wird zunächst eine Sicherungskopie des Quellcodes erstellt und danach wird
    ;die vollständige(n) Fileinstall()-Anweisung(en) in den Quellcode geschrieben
    ;Es können mehrere Dateien ausgewählt werden, die eingebunden werden können

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

    $split = StringSplit(FileOpenDialog("Datei(en) auswählen, welche mit FileInstall() eingebunden werden sollen", @ScriptDir, "Alle (*.*)", 1 + 2 + 4), "|", 2)
    If $split[0] = "" Then Exit ;abgebrochen

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

    Do ;schleife solange bis regulärer Pfad eingegeben wurde
    $dest = InputBox("MultiFileInstall", _
    "Bitte das Unterverzeichnis angeben, in das die eingebundenen Dateien entpackt werden sollen." & @CRLF & _
    "Erlaubt ist jede reguläre Pfadangabe wie z.B C:\Dateien\Test\ oder auch" & @CRLF & _
    "@AppDataDir Pfad zu den Anwendungsdaten des aktuellen Benutzers " & @CRLF & _
    "@CommonFilesDir Pfad zum Ordner ""Gemeinsame Dateien"" " & @CRLF & _
    "@DesktopDir Pfad zum Desktop des aktuellen Benutzers " & @CRLF & _
    "@MyDocumentsDir Pfad zu ""Eigene Dateien"" des aktuellen Benutzers " & @CRLF & _
    "@ScriptDir Verzeichnis des laufenden Skriptes " & @CRLF & _
    "@TempDir Pfad zum Temp-Verzeichnis " & @CRLF & _
    "" & @CRLF & _
    "Bitte den abschließenden Backslash \ nicht vergessen!", "@scriptdir" & "\", "", 500, 260)

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

    If @error = 1 Then Exit ;abbrechen gedrückt
    $macro = ""
    If StringLeft($dest, 1) = "@" Then ;Macro im string
    $macro = StringLeft($dest, StringInStr($dest, "\") - 1)
    $path = Execute($macro)
    Else
    $path = $dest
    EndIf
    ;thx an Bugfix für regex http://www.bug-fix.info/PathCheck.htm
    Until StringRegExp($path, "((?<!.)([a-zA-Z]\:\\)(?!\s)(([\w-+.]*((?<!\s)(\s{1})(?!\\)|(?<!\\)(\\{1})(?!\s))*)*)(\\?)(?!.))") ;solange, bis string ein Pfad ist

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

    If $macro <> "" Then ;macrostring für fileinstall aufbereiten
    $path1 = StringReplace($dest, $macro, "")
    $path = $macro & "&""" & $path1 & """"
    Else ;"normaler" Pfad angegeben
    $path = """" & $path & """"
    EndIf

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

    $string = "Dircreate(" & $path & ")" & @CRLF ;Verzeichnis muss erstellt werden
    If UBound($split) <> 1 Then ;mehrere Dateien wurden ausgewählt
    $pfad = $split[0] & "\" ;Dateipfad
    For $i = 0 To UBound($split) - 2 ;string mit fileinstall("Dateiname") schreiben
    $string &= "fileinstall(""" & $pfad & $split[$i + 1] & """," & $path & ")" & @CRLF
    Next
    Else ;nur eine Datei wurde ausgewählt
    $string &= "fileinstall(""" & $split[0] & """," & $path & ")" & @CRLF
    EndIf

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

    $installfile = FileOpenDialog("AutoIt-Datei auswählen, in welche die FileInstall()-Dateien eingebunden werden soll", @ScriptDir, "AutoIt (*.au3)", 1 + 2)
    if @error then exit ;dialog geschlossen
    If $installfile = "" Then ;abgebrochen
    MsgBox(262144 + 48, "MultiFileinstall", "Es muss eine AutoIt-Datei ausgewählt werden, Programm wird beendet!")
    Exit
    EndIf
    $bakfile = StringReplace($installfile, ".", "_BAKfileinstall.") ;name sicherungskopie
    FileCopy($installfile, $bakfile, 1) ;sicherungskopie erstellen
    If @error Then _exit()
    $string &= FileRead($installfile) ;dateiinhalt auslesen
    If @error Then _exit()
    FileDelete($installfile) ;datei löschen
    If @error Then _exit()
    FileWrite($installfile, $string) ;fileinstall und dateiinhalt schreiben
    If @error Then _exit()
    MsgBox(262144 + 64, "MultiFileinstall", "Zeilen mit FileInstall() in " & $installfile & " eingefügt." & @CRLF & "Sicherungskopie " & $bakfile & " wurde erstellt!")

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

    Func _exit()
    MsgBox(262144 + 48, "MultiFileinstall", "Es ist ein Fehler aufgetreten, Programm wird beendet!")
    Exit
    EndFunc ;==>_exit

    [/autoit]
  • Checkboxen auswerten

    • Andy
    • 12. September 2009 um 11:10

    Hallo,
    als Stringfreak mache ich das natürlich so :D

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>

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

    dim $aCheckBoxArray[20]

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

    guicreate("")
    for $i=0 to ubound($aCheckBoxArray)-1 ;Gui füllen
    $aCheckBoxArray[$i]=GUICtrlCreateCheckbox("Box "&$i, 10, $i*20)
    Next
    guisetstate()

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

    $sTool="Es sind folgende Checkboxen markiert:"&@crlf&@crlf

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

    do
    $sChecked=""
    for $i=0 to ubound($aCheckboxArray)-1 ;abfragen, ob checkbox angehakt
    if guictrlread($aCheckBoxArray[$i])=$GUI_CHECKED Then $sChecked&=" "&$i
    Next
    tooltip($sTool&$sChecked)
    until guigetmsg()=-3

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

    exit

    [/autoit]


    *Edit* String weggelassen und vereinfacht^^

  • Dateiname aus Pfad extrahieren

    • Andy
    • 11. September 2009 um 22:40

    Thx jedenfalls vorab :thumbup:
    habe mal die 3 Kandidaten gegeneinander laufen lassen

    Code
    Stringlänge   Suchzeit Boyer-Moore     StringInstr     FindBytes
              251             0.94816519      0.02346666      0.12990477
              651             0.90430487      0.04972699      0.11146668
             1451             0.92022868      0.10308572      0.11537779
             3051             0.96241282      0.21064129      0.50844450
             6251             0.97693980      0.42463497      0.14107938
            12651             1.00292076      0.85318106      0.61711753
            25451             1.23116206      1.71111132      0.74925723
            51051             1.96198120      3.42725122      0.57828578
           102251             2.37208919      6.88439452      1.07052712
           204651             3.90301001      13.9422747      2.19972091
           409451             7.46659142      27.9661241      4.67685138
           819051             13.6053604      55.9987372      9.06707416
          1638251             25.7144413      110.729436      17.6092212
          3276651             49.9982539      233.465147      36.2459474
          6553451             101.060050      446.790583      72.2963393
         13107051             194.476672      891.064925      144.411650
         26214251             391.850360      1773.84807      287.375350
         52428651             781.723096      3551.08484      574.132187
        104857451             1618.99487      7130.31237      1150.15455
    Alles anzeigen


    erst bei sehr großen stringlängen lohnt sich das, dein Boyer-Moore stürzt aber leider schon bei Patter mit einer Länge von über 20 Zeichen ab....seltsam

  • Dateiname aus Pfad extrahieren

    • Andy
    • 11. September 2009 um 17:41

    AspirinJunkie aka Namensvetter,
    vielen Dank für Deine DLL, allerdings sollte das "Ergebnis" die Position des Suchstrings im String ergeben, d.h. das erste (bzw alle) Vorkommen, also in deinem Beispiel mit den Vögeln die 5.
    Am Besten wäre eine Rückgabe aller Treffer in einem Array (jaja, gibt man den kleinen Finger, dann wollen diese Typen gleich den ganzen Arm und den anderen noch dazu :D:D:D ).
    ciao
    Andy

  • Druckansicht fürs Listview

    • Andy
    • 11. September 2009 um 17:24

    nuts,
    sehr schön!!!
    Um "mal eben" eine kleine Liste auszudrucken völligst ausreichend, und da soll ich mich nun stundenlang hinsetzen und eine Druckfunktion für OO/Excel ausklabustern? Naja, schaumamal :rock:
    ciao
    andy

  • Dateiname aus Pfad extrahieren

    • Andy
    • 11. September 2009 um 17:03

    Hi Ashpool,
    ehrlich gesagt kann ich keine deiner Aussagen nachvollziehen, vor allem mit dem Hintergrund, da du offenbar genau weißt um was es geht.

    Zitat

    Das Verwenden einer fremden Dll ...

    Jedes Mal wenn du ein Programm(paket) mit hunderten einzelner Dateien installierst, befindet sich "fremder" Code auf deinem Rechner. Glaubst du, daß niemand sicher stellt, nachdem diese neue Installation komplett abgelaufen ist ob eine "wichtige" *.dll auch vorhanden ist?
    Ich vermute daß ein Großteil der User überhaupt nicht weiß was eine dll ist, wichtig ist, daß wenn man 2x ganz schnell mit dem Mauszeiger auf das lustige Symbol auf dem Desktop klickt, daß dann ein E-Mail-Programm gestartet wird! Und daß dieses Programm funktioniert...

    Zitat

    Du musst sicherstellen, dass die Dll beim Anwender vorhanden ist

    Ja, zieh doch mal den SYSTEM und SYSTEM32-Ordner von deinem Rechner, bin mal gespannt was dann überhaupt noch für Software bei dir läuft. Natürlich fängt jedes halbwegs programmierte Programm diesen Fehler ab, es wird erst garnicht starten....das ist also kein Argument.

    Zitat

    Und wenn dann dank Avira irgendein Teil deines Codes als Schädling eingestuft wird,
    bist du Nase

    Die Ausnahmelisten der Virenscanner sind genauso lang wie die der Viren^^, das wird sich auch in Zukunft nicht ändern. Da brauche ich kein AutoIt auf dem Rechner, damit diesem so ist, leider!

    Zitat

    die Skript-Sprachen, zu denen AutoIt gehört, die algorithmisch nur eingeschränkte Möglichkeiten bieten

    Seit wann ist denn ein Algorithmus oder dessen Implementation abhängig von einer Programmiersprache? Es gibt Programmiersprachen, die sind für einige Algorithmen besser geeignet weil "Krücken" schon im Design dieser Sprache implementiert wurden, damit sie überhaupt benutzt wird!
    Mein letztes Statement zu deiner Aussage:

    Zitat

    Aber warum muss man nun jedes Problem in AutoIt lösen können wollen/müssen?

    Weil man so nicht C(++,#), Object Pascal, Fortran und Lisp auf seinem Rechner braucht und so mit der Zeit um diese Sprachen so zu lernen, daß man sie effektiv einsetzen kann, etwas besseres anfangen kann....zum Beispiel in Foren irgendwelchen (auch meist unwichtigen) Kram verzapfen :rofl:
    Hehe, eigentlich hast du völlig Recht. Gates hätte vor 30 Jahren schon mit dotnet (oder Java) anfangen sollen, dann müssten wir uns heute nicht mit 62459 Programmiersprachen auf 7625 Betriebssystemen rumschlagen.
    ciao
    Andy

    p.s.: am liebsten führe ich solche Diskussionen beim gleichzeitigen leeren einer geschmeidigen Flasche Spätlese in gemütlicher Runde, du bist herzlich eingeladen!

  • Dateiname aus Pfad extrahieren

    • Andy
    • 11. September 2009 um 13:15

    Hi,

    Zitat

    aber konterkariert die Verwendung einer DLL nicht gerade den Ansatz von AutoIt, ohne jegliche externe Zutat genau das zu tun, was man erwartet

    Wer hat dir den diese Weisheiten gepredigt? Wenn du jeden Tag mit dem Fahhrad zur Arbeit fährst und dort irgendwann eine tolle Maschine ausgemustert wird, schulst du dann um auf Fuhrunternehmer und kaufst eine Flotte von Sattelzügen um das Ding nach Hause zu bringen oder leihst du dir einfach mal kurz ´nen kleinen LKW?

    Ich behaupte, daß für über 99% alles anfallenden Aufgaben für die AutoIt-Anwender diese Scriptsprache schnell genug ist, und das sahnige Geheimnis ist einfach, daß man das letzte Prozent (wenn man es überhaupt mal braucht) sehr gut mit "externen" Mitteln bewältigen kann. Genau dafür ist DOM/COM und das uralte *.dll-Prinzip nämlich gemacht worden....

    Zitat

    Und wenn's um Geschwindigkeit geht, sollte wohl jeder noch so dämliche Versuch in einer herkömmlichen Programmiersprache um Größenordnungen schneller sein, als der optimalst optimierte AutoIt-Code!

    Als was bezeichnest du denn eine herkömmliche Programmiersprache? Ich vermute du meinst eine Sprache, bei der man den größten programmtechnischen Unfug verzapfen kann, dann den Source durch einen "optimierenden" (wirds hell^^?) Compiler jagt, welcher die unzulänglichkeiten des Coders wegbügelt, um anschließend eine 6,3MB große Datei zu haben, die nichts weiter macht als 2x am Tag Daten mit einem Server abzugleichen....über eine 10MBit-Leitung. Das Programm schiebt dabei Äonen von Wartezeiten zwischen den einzelnen IP-Paketen....wer so etwas unbedingt braucht, der muss sich allerdings eine der "herkömmlichen" Programmiersprachen aneignen, AutoIt ist dafür viel zu langsam und auch viel zu einfach!
    Einen 10-Zeiler schreiben, F7 drücken und die EXE in den Autostartordner schieben, dauert incl. GUI keine 5 Minuten, und es wird genau das gemacht was gemacht werden soll. Ja, ich bleibe bei meineM Leisten!
    Andy

    P.S. ja, ich freue mich schon auf den Inline-Assembler, kein Witz....

  • Dateiname aus Pfad extrahieren

    • Andy
    • 10. September 2009 um 19:39

    Also wenns auf Zeitersparnis ankommt, dann verwende ich Frank Abbings prospeed.dll
    Komplett in Assembler geschrieben rockt die das Haus. Übrigens sind im Downloadpaket auch sehr ausführliche AutoIt-Beispiele und eine hammermäßige Demo dabei.
    Eigentlich gehts dort um allerlei Grafikbefehle, aber _FindBytes() kann man auch als stringinstr()-Ersatz verwenden.Mal ein Zeitvergleich:
    Finden eines "Strings" innerhalb einer Bitmap (1680x1050x3 Bytes) in der untersten Bildzeile, dauert mit stringinstr ca 300ms, mit FindBytes nur 10ms...
    Das witzige daran ist, daß lt Autor nur ein einfaches zeichenweises Vergleichen, also "durch den String rennen", verwendet wird, und nicht eine der sehr viel schnelleren Methoden wie z.B. das Boyer-Moore-Verfahren! Btw, auf der verlinkten Wikipedia-Seite ist auch ein C-Quellcode, wäre sehr schön, den mal als AutoIt-verwendbare *.dll zu haben ;) ***mal bittend zu Bernd rüberschiel :D ***

  • addition von ziffern / zahlen

    • Andy
    • 9. September 2009 um 14:00
    Zitat

    Mmmmh, ob ich das jetzt richtig erklärt habe?

    Ja, man kann auch Quersumme dazu sagen, und ob da eine Null mehr oder weniger ist, bleibt völlig egal. Es kommt nicht mehr dabei heraus nur weil man haufenweise Nullen mit dazuzählt, frag mal unsere Politiker!
    Aber mal im Ernst, wozu diese seltsame Rechenvorschrift mit der Addition der benachbarten Zahlen.

  • addition von ziffern / zahlen

    • Andy
    • 9. September 2009 um 10:42

    Da ich mir wg des Begriffs "Quersumme" auch nicht sicher war, habe ich mal in meiner BIBELnachgeschaut, aber mit so etwas profanem gibt sich dieses Werk nicht ab (hab auch nur die 11. Auflage) :rofl:

    Aber zum Glück gibts ein Internetz, dort kann jeder seinen Senf verzapfen, z.B. HIER
    Dort werden tatsächlich 6 verschiedene Quersummen aufgeführt! Also nix da mit

    Zitat

    nur bei kleinen ziffern isses die quersumme

    :thumbup:

  • addition von ziffern / zahlen

    • Andy
    • 9. September 2009 um 10:07

    Hi,
    ist das nicht eine Quersumme? Naja, ich nenns mal so^^

    Spoiler anzeigen
    [autoit]


    $zahl = 22031511 ;egal ob int oder string.....
    $zahl = "22031511";77773334456812734734562813471274612734612"

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

    MsgBox(0, "", "Die Quersumme von " & $zahl & " ist " & _quersumme($zahl))

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

    Func _quersumme($ziffern)
    Local $zahl = String($ziffern) ;einen String machen
    Local $quer = 0
    For $i = 1 To StringLen($zahl) ;jede einzelne Ziffer...
    $quer += Number(StringMid($zahl, $i, 1)) ;...zusammenzählen
    Next
    $zahl = String($quer) ;aus der quersumme wieder einen string machen
    If StringLen($zahl) = 1 Then Return $zahl ;wenn nur eine Ziffer übrig bleibt, raus
    $zahl = _quersumme($zahl) ;die quersumme hat mehr wie eine ziffer, dann rekursiov weiter
    Return $zahl ;ergebnis aus der rekursion zurückgeben
    EndFunc ;==>_quersumme

    [/autoit]
  • Array 3D effektiv durchsuchen

    • Andy
    • 9. September 2009 um 04:53

    Hallo,
    die Stringbefehle sind sehr schnell.
    Man könnte beim Füllen des Arrays einen String anlegen der beispielsweise so aussehen könnte:

    [autoit]

    $String="[001]search1[002]search2[003]search3....[468]search468["

    [/autoit]

    Beim Löschen von Daten müsste nur genau wie im Array der letzte "Datensatz" an den entsprechenden Index kopiert werden.

    [autoit]

    stringreplace($String,"[034]search34[","[468]search468[")

    [/autoit]

    Gesucht wird dann nicht über den Index sondern über das Suchwort $search=" ]search356[" mittels stringinstr()
    Die drei Ziffern (2 Byte würden reichen ;)) vor dem Treffer sind dann der Index des Arrays. Die Suche im String dauert nur Millisekunden.

    Btw, wie ist denn ein dreidimensionales Array im Speicher abgelegt? Ggf könnte man z.B. mit der prospeed.dll das Suchwort im Speicher lokalisieren und den Index "zurückrechnen".

    *EDIT*Testroutine simpel

    Spoiler anzeigen
    [autoit]

    Local $ar3D[500][20][5]

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

    $string = ""
    For $x = 0 To UBound($ar3D, 1) - 1
    For $y = 0 To UBound($ar3D, 2) - 1
    For $z = 0 To UBound($ar3D, 3) - 1
    $ar3D[$x][$y][$z] = Hex(Random(1000000)) & Hex(Random(1000000)) & Hex(Random(1000000)) & Hex(Random(1000000))
    Next
    Next
    $string &= StringFormat("[%03s]", $x) & $ar3D[$x][0][0]
    ;MsgBox(262144,'Debug line ~' & @ScriptLineNumber,'Selection:' & @lf & '$string' & @lf & @lf & 'Return:' & @lf & $string) ;### Debug MSGBOX
    Next

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

    $t = TimerInit()
    $index = __ArraySearch($ar3D, $ar3D[495][0][0])
    $arraysearchtime = TimerDiff($t)

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

    $t = TimerInit()
    $index = __stringArraySearch($string, $ar3D[495][0][0])
    $stringarraysearchtime = TimerDiff($t)

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

    MsgBox(0, "Index = " & $index, _
    StringFormat("__ArraySearch()" & @TAB & @TAB & "%.2f%", $arraysearchtime) & " Millisekunden" & @CRLF & _
    StringFormat("__stringArraySearch()" & @TAB & "%.2f%", $stringarraysearchtime) & " Millisekunden")

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

    Func __stringArraySearch($string, $search)
    $pos = StringInStr($string, $search) - 4
    Return Number(StringMid($string, $pos, 3))
    EndFunc ;==>__stringArraySearch

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

    Func __ArraySearch(ByRef $array, $search)
    For $i = 0 To UBound($array) - 1
    ;consolewrite($array[$i][0][0]&@tab&$i&@crlf)
    If $array[$i][0][0] = $search Then
    Return $i
    EndIf
    Next
    Return -1
    EndFunc ;==>__ArraySearch

    [/autoit]
  • Arrays begrenzt?

    • Andy
    • 8. September 2009 um 17:15
    Zitat

    Das Limit ist die Anzahl an Controls

    Reine Schikane der Entwickler, damit niemand mit Controls einen Paint-Clone bauen kann!

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™