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

  • Rekursionseinstieg: Fakultät - Logikproblem!?

    • Andy
    • 26. Januar 2010 um 15:14

    ja, wie schon geschrieben, der " AUTOIT-Assembler" bekommt es nicht auf die Reihe, einen LOOP mit "nach vorne" gerichteter Adresse auszuführen (bei deinem Autoit-Assembler Zeile 17) . D.h. dort ist irgendetwas im Code suboptimal/buggy. Also muß man sich behelfen und "zu Fuß" den Loop emulieren, also ecx decrementieren, auf Zeroflag testen und abhängig davon jumpen.
    Was allerdings ohne weiteres funktionieren sollte, ist per irgendeinem Assembler den BYTECODE zu generieren und diesen dann auszuführen. Die Übergabeparameter müssen dann natürlich im bytecode per Hex(Binary($parameter)) ersetzt werden!

  • Rekursionseinstieg: Fakultät - Logikproblem!?

    • Andy
    • 26. Januar 2010 um 13:12

    Hi UEZ,

    ähnlich war mein Versuch anfangs auch, allerdings bekam ich permanent Fehlermeldungen. Also habe ich den Binärstring in eine Datei geschrieben und diese mit dem Debugger IDA eingelesen. So fand ich heraus, daß der "AutoIt-Assembler" keine Vorwärts-Sprünge beim LOOP-Befehl auflösen kann!
    Das heisst,

    [autoit]

    AsmAdd($Asm, " loop $+4" ) ;2C loop @start2
    AsmAdd($Asm, " jmp $+E" ) ;2E jmp @ende"
    AsmAdd($Asm, "start2: ")

    [/autoit]

    funktioniert nicht!

    Also habe ich die Zeilen mit

    [autoit]

    AsmAdd($Asm, "dec ecx"); ;ecx = ecx -1
    AsmAdd($Asm, "jecxz $+F"); ;Jump to target , if ECX is Zero

    [/autoit]

    angepasst, und nu gehts^^

    Am meisten hat mich fasziniert, Programme direkt aus dem Speicher auszuführen. Man spart also den (im Vergleich zur Laufzeit der Funktion) extrem langsamen DLL-Aufruf. Ich habe leider von C nicht sonderlich viel Ahnung, vielleicht gäbe es eine Möglichkeit, "kompilierten" C-code direkt in den Speicher einzupflanzen (wie in meinem 1. Assemblerbeispiel). Dann bräuchte man die Umwege über den Assembler auch nicht mehr zu machen....

  • WIndows API Funktion LockFile

    • Andy
    • 26. Januar 2010 um 12:52

    Hi,
    Lockfile ist NICHT dazu da, um allen Programmen den Zugriff auf die gelockte Datei zu verwehren!

    Folgendes Script als LockFile1.exe kompilieren und starten, es legt eine Datei "Test.dat" an, bei der Teile der Datei gelockt werden. Trotzdem kann man mit z.B. Notepad die Datei ganz normal lesend öffnen!

    Spoiler anzeigen
    [autoit]

    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_outfile=lockfile1.exe
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
    #include <WinAPI.au3>

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

    $file = "test.dat"
    $a = FileDelete($file)
    FileWriteLine($file, "Zeile1") ;8 Zeichen
    FileWriteLine($file, "Zeile2") ;8 Zeichen
    FileWriteLine($file, "Zeile3") ;8 Zeichen

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

    $size = FileGetSize($file) ;dateigröße

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

    $hfile = _WinAPI_CreateFile($file, 2, 2, 2) ;bestehende öffnen, lesen, share=lesen

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

    $offset_low = 9 ;anfang lock
    $offset_high = 0
    $lenght_lock_low = 6 ;länge lock
    $lenght_lock_high = 0

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

    $call = DllCall("Kernel32.dll", "bool", "LockFile", "hwnd", $hfile, "dword", $offset_low, "dword", $offset_high, "dword", $lenght_lock_low, "dword", $lenght_lock_high)
    If @error Or (Not IsArray($call)) Then
    MsgBox(0, 0, "Fehler beim Dateizugriff")
    Else
    If $call[0] <> 0 Then
    MsgBox(0, "Erfolg= " & $call[0], "Datei(bereich) erfolgreich gelockt, filehandle=" & $call[1])
    Else
    MsgBox(0, "Erfolg= " & $call[0], "Fehler beim Dateizugriff, filehandle=" & $call[1])
    EndIf
    EndIf

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

    Do
    Until GUIGetMsg() = -3

    [/autoit]

    Nun einfach die LockFile1.exe nochmal starten, man bekommt eine Fehlermeldung (bezüglich LOCK), aber gleichzeitig das richtige Filehandle!

    Nun folgendes Script starten um die gelockten Bereiche innerhalb der Datei anzuzeigen:

    Spoiler anzeigen
    [autoit]

    #include <WinAPI.au3>

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

    Local $nbytes, $string = "",$file = "test.dat"

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

    $hfile = _WinAPI_CreateFile($file, 2, 2, 2) ;bestehende Datei öffnen, lesen, share=lesen

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

    $size = FileGetSize($file) ;dateigröße

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

    $tBuffer = DllStructCreate("byte[1]") ;puffer für die zu lesenden Daten, hier zur einzelne Zeichen

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

    For $i = 0 To $size-1 ;alle Zeichen in der Datei

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

    _WinAPI_SetFilePointer($hfile, $i) ;Pointer auf Zeichen setzen
    $erfolg = _WinAPI_ReadFile($hfile, DllStructGetPtr($tBuffer), 1, $nbytes) ;Zeichen lesen

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

    If $erfolg Then
    $sText = BinaryToString(DllStructGetData($tBuffer, 1)) ;Zeichen lesen
    Else
    $sText = "" ;kein Zeichen
    EndIf

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

    $string &= "Position: " & $i & " lock= " & Not ($erfolg) & " Zeichen=" & $sText & @CRLF ;Ausgabestring

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

    Next
    MsgBox(0, "Anzeige gelockter Zeichen", $string)

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

    _WinAPI_CloseHandle($hfile)

    [/autoit]

    Man sieht, daß die gelockten Zeichen nicht zu lesen sind!

    Nun im Script Lockfile1 die folgenden Zeilen austauschen und als Lockfile2.exe kompilieren und starten.

    [autoit]

    $offset_low = 2 ;anfang lock
    $offset_high = 0
    $lenght_lock_low = 3 ;länge lock
    $lenght_lock_high = 0

    [/autoit]


    In der Test.dat werden nun ZUSÄTZLICH die Zeichen von 2-5 gelockt. Das kann man mit Anzeigescript feststellen. Trotzdem kann Notepad alle Zeilen lesen!

    LockFile bringt also nur etwas, um z.B. bei einer Datenbankanwendung den Lesezugriff der Clients zu sperren, wenn in der offenen Datenbank Schreibzugriffe stattfinden.

    Um die Test.dat auch wieder zu entlocken sollten nun genug Informationen da sein. ;)

  • Rekursionseinstieg: Fakultät - Logikproblem!?

    • Andy
    • 25. Januar 2010 um 23:19

    Hi zusammen,
    da es ja auch zwei Möglichkeiten gibt, Assembler direkt in AutoIt einzubinden, war ich mal so frei und habe die freundlicherweise schon von RAPTOR-ONE im Assemblercode vorgestellte Fibonaccifunktion "AutoItkompatibel" gemacht.

    Die erste Variante benötigt keinerlei Includes, im Prinzip wird der Bytecode in den Speicher geschrieben und per Funktion dort aufgerufen. Man könnte das Script noch etwas "tunen", aber ich habe es der Übersichtlichkeit wegen so gemacht....
    Die Zeiten sind kein Witz, ich vermute, daß die AutoIt-Timer einfach an die Grenzen kommen. Die Berechnung der Zahl (egal welche^^) erfolgt auf meinem Rechner in ca. zwei hundertstel Millisekunden
    Da ist vom speed her nicht mehr viel zu verbessern denke ich 8o

    Spoiler anzeigen
    [autoit]

    ;idea by trancexx
    ;Assemblerscript by RAPTOR-ONE
    ;binary translated and hardcoded by Andy

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

    Local $tCodeBuffer = DllStructCreate("byte[512]") ;Speicher für den assemblercode belegen

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

    $g=0 ;timestamp merken
    for $i=1 to 46 ;die Fibonaccizahlen von 1-46

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

    DllStructSetData($tCodeBuffer, 1, "0x558BECC7C1"& Hex(Binary($i))& _ ;bytecode "hardcoded"
    "C7C001000000C7C30100000081F902000000761A81E90200000003C38BD02BD349E30D03C28BD82BDA67E2EEEB028BC15DC3")

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

    $t=timerinit() ;timestamp merken
    $a= DllCall("user32.dll", "int", "CallWindowProcW", _ ;bytecode aufrufen, rückgabe in a[0]
    "ptr", dllstructgetptr($tCodeBuffer), _
    "int", 0, _
    "int", 0, _
    "int", 0, _
    "int", 0)
    $x=timerdiff($t)
    $g+=$x
    consolewrite ("Die "&$i&". Fibonaccizahl lautet "&$a[0] &" Berechnungszeit: "&$x & " ms"&@CRLF )
    next

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

    ConsoleWrite( @CRLF & "Gesamtzeit: "&$g&" ms" & @CRLF )

    [/autoit]


    Für die 2. Variante benötigt man die Asm.AU3 Der Inhalt kann nicht angezeigt werden, da er nicht mehr verfügbar ist.
    Allerdings ist jetzt auch der Code wesentlich lesbarer. Da bei jedem Aufruf der Funktion der komplette Assembler gestartet werden muss, ist diese Variante nur sinnvoll, wenn es nicht auf die letzte hunderttausenstel Sekunde ankommt...
    Ich habe die Mnemonics in Bytecode übersetzt, jetzt sieht man auch, woher der beim Beispiel 1 kommt^^

    Spoiler anzeigen
    [autoit]

    #include <ASM.au3>

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

    Global $Asm = AsmInit() ;Assembler initialisieren
    Local $g=0 ;gesamtzeit

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

    for $i=1 to 45 ;Fibonaccizahlen von 1-45
    $t=timerinit()
    $a=fibonacci($i)
    $x=timerdiff($t)
    $g+=$x ;gesamtzeit
    consolewrite ("Die "&$i&". Fibonaccizahl lautet "&$a &" Berechnungszeit: "&$x & " ms"&@CRLF )
    next

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

    ConsoleWrite( @CRLF & "Gesamtzeit: "&$g&" ms" & @CRLF )

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

    AsmExit($Asm) ;asmobjekt freigeben
    Exit

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

    Func Fibonacci($fibo)
    ; Demo 1: Using Parameters
    AsmReset($Asm)

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

    AsmAdd($Asm, "push ebp");55
    AsmAdd($Asm, "mov ebp, esp");8B EC
    AsmAdd($Asm, "mov ecx, [ebp + 08]");8B 8D XXXXXXXX ;übergebener parameter
    AsmAdd($Asm, "mov eax, 1");C7 C0 01000000
    AsmAdd($Asm, "mov ebx, 1");C7 C3 01000000
    AsmAdd($Asm, "cmp ecx, 2");81 F9 02000000
    AsmAdd($Asm, "jbe $+1C");76 1A ;jbe @ende
    AsmAdd($Asm, "sub ecx, 2");81 E9 02000000
    AsmAdd($Asm, "start:")
    AsmAdd($Asm, "add eax, ebx");03 C3 ;// fn2(ax) = fn1(ax) + fn(bx)
    AsmAdd($Asm, "mov edx, eax");8B D0 ;// fn2(cx) = fn2(ax)
    AsmAdd($Asm, "sub edx, ebx");2B D3 ;// fn1(dx) = fn2(dx) - fn(bx)

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

    AsmAdd($Asm, "dec ecx"); ;loop @startx
    AsmAdd($Asm, "jecxz $+F"); ;loop @startx
    AsmAdd($Asm, "startx:")
    AsmAdd($Asm, "add eax, edx");03 C2 ;// fn2(ax) = fn1(ax) + fn(dx)
    AsmAdd($Asm, "mov ebx, eax");8B D8 ;// fn2(bx) = fn2(ax)
    AsmAdd($Asm, "sub ebx, edx");2B DA ;// fn1(bx) = fn2(bx) - fn(dx)
    AsmAdd($Asm, "loop @start");67 E2 EE
    AsmAdd($Asm, "jmp $+4") ;EB 02 ;jmp @ende")
    AsmAdd($Asm, "endek2:")
    AsmAdd($Asm, "mov eax, ecx");8B C1
    AsmAdd($Asm, "ende:")
    AsmAdd($Asm, "pop ebp");5D
    AsmAdd($Asm, "retn 4") ;C2 0400

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

    ;ConsoleWrite(String(AsmGetBinary($Asm)) & @CRLF) ;zeigt den bytecode

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

    $Ret = MemoryFuncCall("int", AsmGetPtr($Asm), "int", $fibo)
    return $ret[0]
    EndFunc

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

    Dateien

    ASM.au3 61,15 kB – 384 Downloads
  • Markierten Text speichern

    • Andy
    • 25. Januar 2010 um 12:09

    DragnDrop wird bei AutoIt idR nur mit Dateinamen unterstützt. Um Text von einer in die andere Anwendung zu bringen muss man bissl improvisieren...

    Rudimentäres Drag&Drop-Script für Text:
    Adressen würde ich per *.csv (Kommasepariert) speichern, dann kannst du die so gut wie überall importieren

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    #include <Misc.au3>
    #include <WindowsConstants.au3>

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

    $filename="adressdaten.csv"

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

    $gui = GUICreate("Adressen", 556, 300, 192, 124, -1, BitOR($WS_EX_ACCEPTFILES, $WS_EX_TOPMOST, $WS_EX_WINDOWEDGE))
    $Input1 = GUICtrlCreateInput("", 128, 24, 129, 21)
    $Input2 = GUICtrlCreateInput("", 128, 64, 129, 21)
    $Input3 = GUICtrlCreateInput("", 128, 104, 129, 21)
    $Input4 = GUICtrlCreateInput("", 128, 144, 129, 21)
    $Input5 = GUICtrlCreateInput("", 128, 184, 129, 21)
    $Label1 = GUICtrlCreateLabel("Name", 16, 24, 56, 17)
    $Label2 = GUICtrlCreateLabel("Vorname", 16, 64, 46, 17)
    $Label3 = GUICtrlCreateLabel("Straße", 16, 104, 35, 17)
    $Label4 = GUICtrlCreateLabel("PLZ", 16, 144, 24, 17)
    $Label5 = GUICtrlCreateLabel("Ort", 16, 184, 18, 17)
    $Label6 = GUICtrlCreateLabel("Mit der Maus Text markieren und per Drag/Drop in die Inputfelder ziehen ", 288, 24, 163, 57)
    $button_save = GUICtrlCreateButton("Daten Speichern", 300, 80, 100, 40)

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

    GUISetState(@SW_SHOW)

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

    While 1
    $msg=GUIGetMsg()
    switch $msg
    case -3 ;ende
    Exit
    case $button_save ;
    _savedata()
    endswitch

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

    If _IsPressed(01) Then ;linke maustaste gedrückt
    If WinActive("") <> $gui Then
    ToolTip("Markieren und mit Drag&Drop ins Inputfeld ziehen")
    Sleep(50)
    Send("^{INS}") ;text kopieren
    While _IsPressed(01) ;solange wie die Maus gedrückt ist ....
    Sleep(10)
    WEnd
    Local $a = GUIGetCursorInfo($gui) ;mausposition der abfragen
    Switch $a[4]
    Case $Input1 To $Input5 ;wenn über einem input in der gui
    MouseClick("left") ;focus Input
    Send("^v") ;reinkopieren
    EndSwitch
    EndIf
    EndIf

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

    WEnd

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

    func _savedata()
    local $data=""
    for $i=1 to 5 ;alle inputfelder
    $data&=GUICtrlRead(eval("input"&$i))&","
    Next

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

    Filewriteline($filename,stringtrimright($data,1))
    endfunc

    [/autoit]
  • Stoppuhr für Fußball

    • Andy
    • 25. Januar 2010 um 10:58

    Hallo Griesbrei,
    in der Regel ist das hier kein "schreibt mir mal ein Script"-Forum. Wir geben sehr gerne Hilfestellung, auch absoluten Anfängern. Aus deinen bisherigen Postinngs konnte ich bisher herauslesen, daß du allerdings nicht die Absicht hast, in die Programmierung mit AutoIt einzusteigen. Macht nix, wenigstens hast du ordentlich gefragt^^

    Um die oben genannten Scripte laufen zu lassen, brauchst du eigentlich AutoIt als "Übersetzer". Aber um dir zu ersparen die komplette Entwicklungsumgebung zu installieren, hänge ich die schon fertig kompilierten Scripte als ausführbare Datei an. AUSNAHMSWEISE, denn kompilierte (ausführbare) Programme werden in diesem Forum normalerweise nicht angeboten!

    Der Inhalt kann nicht angezeigt werden, da er nicht mehr verfügbar ist.

    Wenn du jetzt noch sagst, in welchem Stadion man dich hören kann, sind hoffentlich alle happy!

    Dateien

    Uhren.zip 1,02 MB – 617 Downloads
  • Empfänger auswählen und Standard-E-Mail verschicken?

    • Andy
    • 22. Januar 2010 um 18:55

    hast du die Funktion überhaupt mit den Parametern aufgerufen?

    [autoit]

    _INetSmtpMailCom($s_FromAddress, $s_ToAddress, $s_SmtpServer, $s_Subject, $as_Body, $s_FromName = "", $s_Username = "", $s_Password = "", $s_AttachFiles = "", $s_CcAddress = "", $s_BccAddress = "", $s_Importance = "Normal", $IPPort = 25, $ssl = 0)

    [/autoit]
  • DLL Funktionen erkennen und nutzen

    • Andy
    • 22. Januar 2010 um 18:16

    Hi,
    nachdem du BugFix´ens Tutkomplett durchgearbeitet und VERINNERLICHT hast (einfach 2x durchlesen hilft leider nicht), finden sich alleine in Windows ca 40-50tausend Funktionen, die du damit bearbeiten kannst. Das meiste findet sich auf MSDN, aber lange nicht alles...
    Ein Einstieg findet sich HIER
    Um dir direkt die Illusion zu nehmen, das ist Lesestoff für JAHRE! Manchmal findet sich beim Stöbern die ein- oder andere nützliche Funktion, aber meistens (und das geht nicht nur mir so) ist es die Suche nach der Stecknadel im Heuhaufen. Oder man fragt jemanden anderen... :thumbup:

  • Frage an die Profis, einfaches Würfelspiel

    • Andy
    • 22. Januar 2010 um 18:01

    die komplette "Select"-Anweisung innerhalb der Funktion, also

    [autoit]

    Select
    Case $iHuman > $iKI
    $iWin = 1
    Case $iHuman < $iKI
    $iWin = -1
    Case Else
    $iWin = 0
    EndSelect

    [/autoit]

    kann man auch mit einer Zeile

    [autoit]

    $iwin=1-2*($iHuman < $iKI)-($iHuman = $iKI)

    [/autoit]

    ersetzen...

  • Frage an die Profis, einfaches Würfelspiel

    • Andy
    • 22. Januar 2010 um 17:00
    Zitat

    Einzeilige If-Anweisungen machen alles extrem langsam.

    Bevor ich eine Switch und eine Select-Anweisung implementiere, ein Array dazu und reichlich Gehirnschmalz (hehe, denn das ist Voraussetzung), bleib ich bei meinen 3 Zeilen code 8o

  • Frage an die Profis, einfaches Würfelspiel

    • Andy
    • 22. Januar 2010 um 16:25

    Hallo!
    Wenn du jeden Ausdruck mit IF prüfst, brauchst du das ELSEIF nicht.

    [autoit]


    If $playerHuman > $playerKI Then $Message = "Du hast gewonnen!"
    If $playerHuman < $playerKI Then $Message = "Der Computer hat gewonnen!"
    If $playerHuman = $playerKI Then $Message = "Unentschieden!"

    [/autoit]
  • WIndows API Funktion LockFile

    • Andy
    • 22. Januar 2010 um 16:10

    so gehts....

    [autoit]


    $file="datei.bat"

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

    $hfile=fileopen($file,1) ;Datei zum SCHREIBEN öffnen (lock)
    Local $n = FileSetPos($hFile, 0, 0) ;pointer an den Anfang der Datei=0 oder an irgendeine Position innerhalb der datei

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

    $data=fileread($hfile) ;daten ab dem pointer lesen
    ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $data = ' & $data & @crlf & '>Error code: ' & @error & @crlf) ;### Debug Console

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

    do
    until guigetmsg()=-3

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

    fileclose($hfile)

    [/autoit]
  • WIndows API Funktion LockFile

    • Andy
    • 22. Januar 2010 um 15:06
    Zitat

    Aha Fileopen verwendet vermutlich die Funktion Fileopen

    RISCHDIIIIISCH!^^
    Man sollte testen ob in der "neuen" AutoIt-Version das Lesen/Schreiben-Flag von FileOpen() nicht schon die Datei lockt! Beim Schreiben ist die Datei m.W. schon von Windows aus für den Zugriff gesperrt....

    Workaround:
    File locken, indem man sie mit fileopen($datei,1) öffnet. Datei "offen lassen"...
    Wenn man Daten lesen möchte, Datei schließen und mit fileopen($datei,0) die Daten lesen, anschließend sofort wieder locken....


    /EDIT/ so ganz ist der Alzheimer noch nicht fortgeschritten^^ Ich wußte doch, da war was...

    Zitat

    Changed: It is now possible to read from files opened for writing.

    aus der History 3.3.2.0
    Leider funktioniert das bei mir nicht, eine zum Schreiben geöffnete Datei verursacht beim Lesen einen Fehler...

  • WIndows API Funktion LockFile

    • Andy
    • 22. Januar 2010 um 14:25

    nuts
    funktioniert so nicht, da der in der dll benötigte Filehandle nicht der ist, den AutoIt zurückgibt!
    Beschreibung aus http://msdn.microsoft.com/en-us/library/aa365202(VS.85).aspx :

    Zitat

    The file handle must have been created with the GENERIC_READ or GENERIC_WRITE access right.

    Das heißt konkret, daß das Filehandle mit den anderen API-Funktionen (dll-Aufrufen) ermittelt werden muß. Habe hier zzt. nur Produktivmaschinen und

    Was ich nicht verstehe ist, was an

    [autoit]

    _WinAPI_CreateFile()

    [/autoit]

    so kompliziert ist. Im Beispiel in der Hilfe sind mehrere Anwendungen zum Schreiben/Lesen/Bearbeiten der Datei aufgeführt. Und ob man mit Fileread/Filewrite oder mit den dort beschriebene Methoden macht ist doch egal...

  • WIndows API Funktion LockFile

    • Andy
    • 22. Januar 2010 um 11:52

    Hi,
    du kannst mit

    [autoit]

    _WinAPI_CreateFile()

    [/autoit]

    die Datei öffnen um sie exclusiv nur für dein script bearbeitbar zu machen.
    also z.B.

    [autoit]

    $hFile=_WinAPI_CreateFile("datei.dat",2 (datei öffnen), 2 (lesen erlauben) + 4 (schreiben erlauben))

    [/autoit]

    s. auch Beispiel in der Hilfe

  • Game - Icon Tactics

    • Andy
    • 22. Januar 2010 um 11:23

    Feine Sache ^^
    Bekommt von mir auf der Suchtfaktorskala eine 9/10
    Anzeigefehler habe ich jetzt keine festgestellt (XP)

  • Autoit rechnet falsch?

    • Andy
    • 22. Januar 2010 um 10:39

    Hi,

    Zitat

    als Ergebniss kommt 91 raus aber es müsste 234 raus kommen.

    Ergebnis 91 ist richtig LINK

  • Autoit rechnet falsch?

    • Andy
    • 22. Januar 2010 um 10:22

    ups, hatte fehler in der formel...ist jetzt berichtigt

  • Autoit rechnet falsch?

    • Andy
    • 22. Januar 2010 um 09:47

    Hi,
    zur Multiplikation großer Zahlen bietet sich die bigint.udf hier aus dem Forum an, war irgendwann in grauer Vorzeit Ziel eines µIt.

    Die Lösung für b^e mod m habe ich mal in eine Funktion gebracht:

    Spoiler anzeigen
    [autoit][/autoit] [autoit][/autoit] [autoit]

    $b=30
    $e=23
    $m=87

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

    $mod=_multiplemodulo($b,$e,$m) ;b^e mod m
    ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $mod = ' & $mod & @crlf & '>Error code: ' & @error & @crlf) ;### Debug Console

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

    func _multiplemodulo($base,$exp,$mod) ;b^e mod m
    $c=1
    for $i=1 to $exp
    $c=mod($c*$base,$mod)
    next
    return $c
    endfunc

    [/autoit] [autoit][/autoit] [autoit][/autoit]
  • bestimmte dateien aller unterordner anzeigen lassen

    • Andy
    • 22. Januar 2010 um 00:38
    Zitat

    leider bekomme ich bei keiner ein vernünftiges ergebnis als ausgabe

    Die Funktionen geben die Daten in einem Array zurück, was allerdings auch in den Beschreibungen/Funktionsheadern steht.
    Beispiel zur Anzeige der Daten:

    [autoit]


    $pfad=@scriptdir
    $dateien = _RecursiveFileListToArray($pfad, '', 1)
    _arraydisplay($dateien)

    [/autoit]

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™