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

Beiträge von limette

  • FTPUpload per InternetWriteFile

    • limette
    • 7. Juni 2008 um 13:34

    Oh, mir fällt da grad noch etwas auf ...

    Warum wird denn nicht in jedem Durchgang der Schleife der selbe Teil hochgeladen ?
    Ich meine, da steht doch einfach nur:

    DllStructSetData($buffer,1,FileRead($fhandle,$x))

    Warum geht der die Datei durch und liest nicht immer die ersten 100 Byte ein .. ?

    limette =)

  • FTPUpload per InternetWriteFile

    • limette
    • 7. Juni 2008 um 13:27

    Nun, an die Dateien < 100 Byte muss man sich nochmal setzen,
    aber es geht bei unserem Programm um Bilder...
    Und Bilder, die kleiner sind als 100 Byte, trifft man nicht so oft ;)

    Könnte man nicht einfach eine If-Clause mit einbringen und wenn
    die Datei <= 100 Byte ist sie in 1Byte-Schritten hochladen ?

    mfg limette =)

  • FTPUpload per InternetWriteFile

    • limette
    • 7. Juni 2008 um 13:23

    Danke =)
    Sorry wenn ich gestern Abend etwas schnell angepisst war ;)
    Aber sitzen wirklich schon seit November 2007 an einem Programm und
    brauchen seitdem den Status des FTP-Uploads..
    Da lagen bei mir einfach die Nerven blank, wo doch endlich diese Super-Idee mit
    dem InternetWriteFile fiel ! :D

    Danke an alle =)

  • FTPUpload per InternetWriteFile

    • limette
    • 7. Juni 2008 um 13:13

    Wow, danke, funktioniert super ! :D

    Wenn ich den Code jetzt noch verstehen würde wär das genial ^^

    [autoit]


    $glen = FileGetSize($FileLocal) ; Gesamtlänge
    $last = Mod($glen,100) ; der Rest der überbleibt, wenn ich das in 100 Pakete teile ?
    $x = ($glen-$last)/100 ; $x = ( Gesamtlänge - Rest ) / 100 , also die Länge der 100 Pakete , den Rest außen vor gelassen ?
    $buffer = DllStructCreate("byte[" & $x & "]") ; erstellt die Struct mit 'byte[länge]' ? Warum ? ^^

    [/autoit]


    Warum muss man da "byte[" & $x & "]" in die Struct ?
    Das

    [autoit]

    DllStructSetData($buffer,1,FileRead($fhandle,$x))

    [/autoit]


    und der Select davor ist mir verständlich...

    Mein Fehler im Dll-Call des InternetWriteFile war wohl, dass er einen Pointer zum Buffer haben wollte und
    ich ihm einfach den Buffer gegeben habe ? ^^
    DllStructGetPtr($buffer) - auch gerafft =)

    Der einzige Punkt an dem ganzen, den ich nicht verstehe, ist:

    [autoit]

    $buffer = DllStructCreate("byte[" & $x & "]")

    [/autoit]

    schonmal vielen Dank ! =)
    limette

    Edit: kurz in der Hilfe gelesen... du sagtest ich muss das als Bytes übertragen ? Dafür steht das
    'byte' in dem DllStructCreate, die eckigen Klammern erzeugen eine Array :D und mit der Länge des Paketes in den Klammern
    wird das einfach eine Array mit so vielen Elementen wie Bytes im String ? =)

  • FTP - Gedownloadete Dateien in Liste aufführen

    • limette
    • 6. Juni 2008 um 23:44

    Ich vermute jetzt einfach mal, dass es um die Do-Schleife geht.

    Ersetz mal

    [autoit]

    GUICtrlSetData($idliste,$filefindnextfile & "|")

    [/autoit]


    durch

    [autoit]

    GuiCtrlSetData($idliste, GuiCtrlRead( $idliste) & $filefindnextfile & "|" )

    [/autoit]

    GUICtrlSetData($idliste,$filefindnextfile & "|") setzt nämlich die Liste immer nur auf den letzten gefunden Eintrag,
    da du aber den Loop bis zum Error durchgehst wird das Letzte ein leerer String o.ä. sein.

    mfg limette

  • FTPUpload per InternetWriteFile

    • limette
    • 6. Juni 2008 um 23:08

    Das mit Ascii / Binary muss ich nochmal checken, da hatte ich andere Werte für gefunden,
    dachte eigentlich Binary ist default, so wie es bei msdn steht ;)

    Zu Lina ..
    hast recht, crazy idea ^^
    Ich vermute aber mal, dass es nicht an der Dateiendung hapert sondern an der Art
    der Indormation ;)
    Ich probier es trotzdem mal aus =)

    Edit: Nein, funzt beides nicht.... was ich auch nicht so ganz verstehe: bei msdn steht, flags muss 'n "dword" sein,
    und trotzdem steht woanders überall "long"...

  • FTPUpload per InternetWriteFile

    • limette
    • 6. Juni 2008 um 19:22

    Hmmm.... wenn ich mir die beiden
    "Quelltexte" so ansehe....
    haben die garnichts gemeinsam 8|

  • FTPUpload per InternetWriteFile

    • limette
    • 6. Juni 2008 um 19:11

    Sorry, es ist bloß so, dass wir schon ewig daran tüfteln,
    und auch schon einige Tipps von euch bekommen haben.

    Alles, was du bis jetzt angeführt hast, war unnötig, wie sich aus meinem ersten Post in diesem
    Topic entnehmen lies.

    Du meintest:

    Zitat

    So bekommst bei drücken von F5 auf keinen Fall mehr eine Fehlermeldung.
    Du mußt schon gleiche Variablen verwenden !!!!


    Naja, bloß hatte ich schon geschrieben:

    Zitat

    Mit Textdateien funktioniert das soweit auch einwandfrei;

    Dann meintest du:

    Zitat


    Schau Dir mal das Posting an: [ offen ] Automatisierung von bilder upload auf funpic

    Ansonsten gerne auch mal die SuFu und Hilfe verwenden und danach stehen wir gerne wieder zur Verfügung, so wir noch hier sind. Suchbegriffe wie "Bild", Bilder", "Bilder hochladen", usw. können sehr hilfreich sein.

    In dem Topic geht es um FTPPutFile, und darum geht es hier nunmal nicht !
    Und bei DEM Kommentar zur Sufu fühl ich mich leicht verarscht -.- ganz bescheuert bin ich nun nicht..
    Außerdem hatte ich gesagt:

    Zitat

    Wie mir zu meiner Frage zum Auslesen des Fortschritts eines FTP-Uploads geraten wurde
    habe ich nun versucht, mir eine Funktion mit FTPOpenFile & InternetWriteFile aus der Wininet.dll
    zu schreiben.

    Das ist also nicht die erste Abhandlung zu diesem Thema, die ich hatte.

    Dann kam von dir ja auch noch:

    Zitat

    Macht dich da mal bitte bei den Profis schlau.

    Nur mal so... warum erstelle ich denn so ein Topic ?

    Zitat

    Hallo..
    ich muss nochmal euer Fachwissen in Anspruch nehmen ;)


    Das war ja nicht alleine an dich gerichtet, sondern an alle, die gewillt sind zumindest die Problemstellung zu lesen
    und einen ernst gemeinten Rat zum Thema zu geben...

    mfg limette

  • dll dateien in exe einbinden

    • limette
    • 6. Juni 2008 um 16:34
    Zitat

    das Problem ist nur wenn ich die exe(mein ausführbares Programm) mit auf einen anderen rechner nehme, ist die ddl datei nicht da.

    Versuch mal FileInstall =)

  • FTPUpload per InternetWriteFile

    • limette
    • 6. Juni 2008 um 16:28

    Hättest du meinen Post ganz gelesen hättest du gemerkt

    - Dass ich daran gedacht habe
    - Dass ich eben doch EURE Hilfe in Anspruch nehmen möchte
    - Dass mir zu InternetWriteFile geraten wurde ! --> ich hatte bereits längere Abhandlungen über diese FTP-Geschichte.
    Mit FtpPutFile brauchst du mir nicht mehr kommen, das ist alt. Mir ging es aber, wie in meinem ersten Post schon
    geschrieben, um den Fortschritt eines Uploads ! Daraufhin wurde mir zu InternetWriteFile etc geraten !

    Ich will doch den Fortschritt, und da es bei unserem Server nicht mit InetGetSize funzt sollte ich es mit
    InternetWriteFile versuchen !

    Wir ( ein Kumpel und ich ) arbeiten seit MONATEN an diesem *%§!# Fortschrittsbalken für den Upload,
    das letzte was du mir vorwerfen kannst ist, ich hätte Sufu, Hilfe und Google ignoriert !

  • FTPUpload per InternetWriteFile

    • limette
    • 6. Juni 2008 um 16:11

    Darauf wär ich jz nicht gekommen...
    Ich kriege, wie geschrieben, ja auch keine [!] Fehlermeldung, wenn ich F5 drücke....
    Und ich hab auch schon gesagt, dass das mit Textdateien einwandfrei funktioniert !!

    Ganz oben wird doch bloß die Funktion aufgerufen,
    $serv, $username, $pass
    hatte ich definiert, .. aber ich veröffentliche hier doch nicht meine LoginDaten ^^

    Nochmal deutlich:

    Es funktioniert mit Textdateien etc !
    Wenn ich aber Bilder hochlade werden diese mir im BROWSER nicht angezeigt.!

  • FTPUpload per InternetWriteFile

    • limette
    • 6. Juni 2008 um 15:47

    Hallo..
    ich muss nochmal euer Fachwissen in Anspruch nehmen ;)
    Wie mir zu meiner Frage zum Auslesen des Fortschritts eines FTP-Uploads geraten wurde
    habe ich nun versucht, mir eine Funktion mit FTPOpenFile & InternetWriteFile aus der Wininet.dll
    zu schreiben.

    Spoiler anzeigen
    [autoit]

    $x = _FTP_Upload( $serv, $username, $pass, 'testdatei.txt' )
    MsgBox( 0, '', $x & '-' & @error )

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

    Func _FTP_Upload( $server, $user, $password, $file )
    #Region connect
    Local $ai_InternetOpen = DllCall('wininet.dll', 'long', 'InternetOpen', 'str', 'PicTransfer', 'long', 1, 'str', '', 'str', '', 'long', 0)
    If @error Or $ai_InternetOpen[0] = 0 Then
    SetError(-1)
    Return 0
    EndIf

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

    Local $i_ServerPort = 0, $l_Service = 1, $l_Context = 0, $l_InternetSession = $ai_InternetOpen[0]
    Local $ai_InternetConnect = DllCall('wininet.dll', 'long', 'InternetConnect', 'long', $l_InternetSession, 'str', $server, 'int', $i_ServerPort, 'str', $user, 'str', $password, 'long', $l_Service, 'long', 0x08000000, 'long', $l_Context)
    If @error Or $ai_InternetConnect[0] = 0 Then
    SetError(-2)
    Return 0
    EndIf

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

    Local $ai_ftpopenfile = DllCall( 'wininet.dll', 'long', 'FtpOpenFile', 'long', $ai_InternetConnect[0], 'str', $file, 'dword', '0x40000000', 'dword', 0x02, 'dword', 0 )
    If @error Or $ai_ftpopenfile[0] = 0 Then
    SetError(-3)
    Return 0
    EndIf
    #EndRegion

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

    #Region DataSend
    $buffer = FileRead( $file )
    $glen = StringLen( $buffer )
    $x = Int( $glen/100 )
    If $x = 0 Then $x = 1
    Dim $out, $i = 0
    Do
    Local $ai_ftpwrite = DllCall( 'wininet.dll', 'int', 'InternetWriteFile', 'long', $ai_ftpopenfile[0], 'str', $buffer, 'int', $x, 'dword*', $out )
    If @error Or $ai_ftpwrite[0] = 0 Then
    SetError(-4)
    Return 0
    EndIf
    $buffer = StringTrimLeft( $buffer, $x )
    $i = $i +1
    ToolTip( Round( 100 - (( StringLen( $buffer ) / $glen ) *100), 0 ) )
    Sleep( 20 )
    Until StringLen( $buffer ) = 0
    #EndRegion

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

    #region disconnect
    Local $ai_InternetCloseHandle = DllCall('wininet.dll', 'int', 'InternetCloseHandle', 'long', $ai_InternetOpen[0])
    If @error Or $ai_InternetCloseHandle[0] = 0 Then
    SetError(-5)
    Return 0
    EndIf
    #EndRegion
    Return 1
    EndFunc

    [/autoit]

    Mit Textdateien funktioniert das soweit auch einwandfrei;
    eigentlich habe ich das ganze jedoch für Bilder gedacht.
    Und da beginnt die Problematik....
    Die Bilder auf dem Server haben exakt die gleiche Dateigröße, werden aber nicht
    angezeigt bzw. es wird gesagt "Bild sowieso konnte nicht angezeigt werden, da es Fehlerenthält".
    Nun stellt sich mir die Frage: woran scheitert das ?
    Ich hab schon so einiges mit Binary etc rumgespielt, aber bisher hat es noch
    nicht funktioniert...
    help me x)

    mfg limette

  • Eine Taste für eine bestimmte Zeit gedrückt halten??

    • limette
    • 6. Juni 2008 um 15:23
    Zitat

    Send("{a down}") ;Hält die Taste A gedrückt
    Send("{a up}") ;Löst das Gedrückt halten

    Das ist eigentlich schon alles ^^
    Wenn du also die Taste 'a' für 5 Sekunden gedrückt halten willst:

    [autoit]

    Send("{a down}") ;Hält die Taste A gedrückt
    Sleep( 5000 ) ;Wartet 5 Sec
    Send("{a up}") ;Löst das Gedrückt halten

    [/autoit]

    mfg limette

  • FTP - Server - Einstellung..?

    • limette
    • 6. Juni 2008 um 14:42

    Wenn man das nichts weiß und da nur 'GENERIC_WRITE' steht sieht man recht alt aus ;)
    Aber gut zu wissen, danke =)

  • doppelten Programmaufruf vermeiden

    • limette
    • 6. Juni 2008 um 14:39

    Sieh dir mal die Funktion "_Singleton" an ;)
    Ich denke, das ist das, was du suchst =)

    mfg limette

  • FTP - Server - Einstellung..?

    • limette
    • 5. Juni 2008 um 19:34

    Ich muss ganz ehrlich sagen, dass ich im
    Gebiet von DllCalls etc noch keine Ahnung habe ^^

    Habe mich an der FtpOpenFile - Function mal versucht:

    [autoit]

    Local $ai_ftpopenfile = DllCall( 'wininet.dll', 'long', 'FtpOpenFile', 'long', $ai_InternetConnect[0], 'str', $file, 'long', 'GENERIC_WRITE', 'long', 0, 'long', 0 )
    If @error Or $ai_ftpopenfile[0] = 0 Then
    SetError(-3)
    Return 0
    EndIf

    [/autoit]


    $ai_InternetConnect[0] ist der Return von der ganz normalen FTPConnect -Function,
    $file der Dateiname...
    Leider gibt meine Funktion immer @error = -3 zurück, also passt irgendwas in dem
    DllCall nicht.
    Diesen ganzen 'long', 'dword', ..., Kram hab ich erst exact nach Angabe & AutoItHilfe probiert, als das nicht
    funktioniert hat hab ich das mit _FTPPutFile aus der FTP.au3 verglichen und entsprechend abgeändert
    (So wie hier vorliegend).
    Das passt aber immer noch nicht und ich habe nicht den blassesten Schimmer, woran es liegt ^^

    mfg limette

    Edit: hat sich erledigt. Hab 'GENERIC_WRITE' durch '0x4000000' oder so ersetzt - funktioniert ;)

  • FTP - Server - Einstellung..?

    • limette
    • 5. Juni 2008 um 17:18

    Das eröffnet natürlich ganz neue Perspektiven =)
    Ich werde mich da mal rein knien, vielen Dank ^^

    mfg, limette

  • FTP - Server - Einstellung..?

    • limette
    • 5. Juni 2008 um 16:59

    Zu Percy -
    Nein, nix mit Proxy... und wie gesagt, bei Ohost funktioniert es ja ;)

    Zu Progandy -
    hab ich mir schon fast gedacht ;)
    Aber was muss man da umstellen... ?
    Denn ein Fortschrittsbalken macht nur Sinn, wenn man
    auch nen Fortschritt sehen kann x)

    mfg limette

  • Frage zu TCP und UDP

    • limette
    • 4. Juni 2008 um 20:22

    Brauch ich ja nix weiter zu sagen,
    Die Lan-Ip kannste auch per @IpAddress1 (evtl auch @IpAddress2, 3 oder 4),
    die Wan-Ip per _GetIp()
    kriegen.

  • Frage zu TCP und UDP

    • limette
    • 4. Juni 2008 um 20:03

    Also soweit ich weiß muss:
    - beim Server die IP-Adresse die LAN-Ip genommen werden ( TCPListen( 'LanIp', 'Port' ) )
    - beim Server im Router der Port auf genau die Lan-Ip weitergeleitet werden
    - der Client zum Connecten die WAN-Ip des Servers nehmen

    da hab ich auch ewig dran rumprobiert, aber so müsste das passen =)

    mfg limette

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™