Screenshot auf ftp laden ?

  • Moin,

    ich bin's nur...

    Ich möchte in einer Schleife alle 3 Sek. einen Screenshot machen und diesen anschließend auf einen FTP-Server hochladen.

    Problem: Die ftp.au3 ! Verstehe ich nicht ganz...

    Ich habe schon in der Suche gewühlt, bin aber aus der ganzen Sache nicht schlau geworden...

    Muss ich alle Funktionen der ftp.au3 benutzen um mich mit dem Server zu Verbinden und die Dateien dort abzulegen, oder wie geht das ?

    Ich habe so gut wie keine Erfahrungen mit den Internet-Funktionen in AutoIt, oder sonstwomit !


    Spoiler anzeigen
    [autoit]

    #include <ftp.au3>

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

    Dim $i = 1

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

    ; Muss ich hier _FTPOpen benutzen ???
    ; ...und hier _FTPConnect ?

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

    While 1

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

    $PicName = "Screenshot_" & $i
    DllCall("Captdll.dll", "int", "CaptureScreen", "str", $PicName, "int", 99)
    $i = $i + 1
    Sleep(3000)
    ; Hier soll jetzt die Datei zum Server hochgeladen werden, mit _FTPPutFile ???
    WEnd

    [/autoit]


    Gruß
    Greenhorn


  • [autoit]


    #include <ftp.au3>
    Dim $i = 1
    While 1
    Global $PicName = "Screenshot_" & $i
    DllCall("Captdll.dll", "int", "CaptureScreen", "str", $PicName, "int", 99)
    $i = $i + 1
    Sleep(3000)
    _upload()
    ; Hier soll jetzt die Datei zum Server hochgeladen werden, mit _FTPPutFile ???
    WEnd

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

    Func _upload()
    $Open = _FTPOpen('Was hier steht ist egal')
    $Conn = _FTPConnect($Open, $server, $username, $pass, $port); hier musste halt noch $server,$username,$pass und $wenn net 21 $port angeben
    $Ftpp = _FtpPutFile($Conn, $PicName, $PicName)
    $Ftpc = _FTPClose($Open)
    EndFunc

    [/autoit]

    Einmal editiert, zuletzt von leviathan (11. Juni 2007 um 20:00)

  • hier mal ein beispiel...:

    [autoit]

    #include<ftp.au3>
    $server = "***.***.***.***"
    $username = "*********"
    $pass = "*************"
    $serverdir = "/some_dir/";verzeichnis auf dem server
    $time = @HOUR&"-"&@MIN&"-"&@SEC;zusatzoption kann rausgenommen werden
    $localfile = @ScriptDir&"\name.jpg"
    $serverfilename = $time&"name.jpg"

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

    $Open = _FTPOpen("MyFTP_Control")
    $Conn = _FTPConnect($Open, $server, $username, $pass)
    $Ftpp = _FtpPutFile($Conn,$localfile,$serverdir&$serverfilename)
    $Ftpc = _FTPClose($Open)

    [/autoit]


    siehe auch hier
    snoozer

  • O.K., prima uind vielen Dank ihr beiden ! :D

    Aber muss ich jedesmal, sprich alle 3 Sek., 'ne neue Session öffnen und neu connecten usw. ?

    Langt es nicht auch vor der Schleife einmal Session starten, connecten und die _FTPPutFile in die Schleife ?

    Es sollen möglichst Zeitverzögerungen vermieden werden, d.h. die 3 Sek. bis zum nächsten Screenshot sollen möglichst eingehalten werden...

    ...und die wininet.dll brauche ich nicht ???


    Einmal editiert, zuletzt von Greenhorn (11. Juni 2007 um 20:22)

  • ich glaub es reicht wenn du einmal ne connection machst und dann jede datei mit putfile hochzuladen...ich würde raten die bilder zu resizen...dauert nen weilchen immer 3,8 MB hochzuladen^^

  • Servus,

    Du kannst in einer Session auch mehrere Datein hochladen und dann erst die Verbindung schließen. Die FTP-Udf nutzt intern die "wininet.dll" per DllCall.

    der Foren-Outlaw

    Einmal editiert, zuletzt von jonk (11. Juni 2007 um 20:34)

  • 1ooo Dank, snoozer, ich werde mich mal schlau machen wegen der Größe (das Tool soll nicht für mich sein...) !

    @jonk Ahh, Danke ! Das mit den mehreren Dateien muss ich auch erstmal ausloten. Mal sehen was mein Auftraggeber dazu meint...

    Gruß
    Greenhorn


    Einmal editiert, zuletzt von Greenhorn (11. Juni 2007 um 20:36)

  • Hmmm, wenn ich die Schleife ausführe (ohne die FTP-Funktionen ), dann wird nur ein Screenshot erstellt und das Script endet. Ohne Fehlermeldung, ReturnCode: 0 !!!

    Was ist denn das nun wieder ???


  • das ist nen fehler in der dll-call funktion....
    wenn ich die funktion so aufrufe:

    [autoit]

    DllCall("captdll.dll", "int", "CaptureScreen", "str", "dump_full.jpg","int",85)

    [/autoit]


    sagt mir Vista
    siehe screenshot
    so wieder rum gehts:

    [autoit]

    DllCall("captdll.dll", "int", "CaptureScreen", "str", "dump_full.jpg")

    [/autoit]

    hier nochmal die dateien die ich verwende(falls es trotzdem nicht geht):
    https://autoit.de/www.snoozer.de/autoit/~tmp/captdll.dll
    http://www.snoozer.de/autoit/~tmp/captdll.c
    ->ins selbe verzeichnis wie das script.....

    snoozer

  • Hmmm, geht auch nicht ohne den zweiten Parameter... *werde.irre*

    Es muss doch irgendwie möglich sein mehrere Screenshots hintereinander zu erstellen... *Grrrrr*

    Ich werde mir mal die anderen Dinger ansehen, die Du mir verlinkt hast, vielen Dank noch einmal, snoozer !
    Melde mich bestimmt noch einmal, aber wohl nicht mehr heute... *seufz*


    Gruß
    Greenhorn

    Edit: Ouha, sehe gerade, dass Du in C und WinAPI Programmierung fit bist..., Cooooool.
    Will ich mich auch noch dran versuchen, habe mir auch schon 'n Buch zugelegt: Win32API Programmierung von C. Petzold.
    Ist zwar Steinalt, aber mal sehen...


    Einmal editiert, zuletzt von Greenhorn (11. Juni 2007 um 22:32)

  • watch this...

    [autoit]

    #include<ftp.au3>
    Global Const $server = "***.***.***.***"
    Global Const $username = "*********"
    Global Const $pass = "*************"
    Global Const $serverdir = "/some_dir/";verzeichnis auf dem server

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


    $Open = _FTPOpen("MyFTP_Control")
    $Conn = _FTPConnect($Open, $server, $username, $pass)

    Dim $i = 1

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


    While 1

    $PicName = @ScriptDir& "\Screenshot_" & $i & ".jpg"
    $localfile = $PicName
    $serverfilename = $PicName
    DllCall("Captdll.dll", "int", "CaptureScreen", "str", $PicName)
    $i = $i + 1
    Sleep(3000)
    $Ftpp = _FtpPutFile($Conn,$localfile,$serverdir&$serverfilename)
    WEnd

    [/autoit]


    ist nen beispiel....

    snoozer

  • Vielen Dank, mein Gutster, werde ich testen...

    Edit: Habe im amerikanischen Board durch Hilfe die Lösung gefunden !

    Spoiler anzeigen

    This is a new behavior that has been implemented in the newer versions of AutoIt. This behavior assists people in debugging DLL calls by making the user implicitly declare that the dll they are using uses the STD calling convention or the CDECL calling convention. By default, AutoIt assumes that the DLL is using the STD calling conventions. When it doesn't use this convention, it hard crashes. Captdll.dll, written by Lazycat, uses the C Declared calling convention. As a result, AutoIt hard crashes when you do no implicitly instruct it to open the DLL with the correct calling convention.

    - The Kandie Man ;)


    Code für die Screenshot-Schleife mit korrektem Parameter --> int:cdecl im DLLCall...

    Spoiler anzeigen
    [autoit]

    ; - The Kandie Man ;)

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

    HotKeySet("{End}","Terminate")
    Dim $h_DllCaptDLL = DllOpen("captdll.dll");Open it only once at the beginning and close it once at the end. Not every time the while loops.
    Dim $i = 1

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

    While 1
    DllCall($h_DllCaptDLL, "int:cdecl", "CaptureScreen", "str", "Screenshot_" & $i & ".bmp", "int", -1)
    Sleep(5000)
    $i += 1
    WEnd

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

    ;Exit helper functions
    Func Terminate()
    Exit
    EndFunc
    Func OnAutoItExit()
    DllClose($h_DllCaptDLL);closing the dll now that the script is exiting.
    EndFunc

    [/autoit]

    Denke Problem kann als gelöst gelten...

    Gruß
    Greenhorn


    3 Mal editiert, zuletzt von Greenhorn (12. Juni 2007 um 00:43)

  • Hallo zusammen,

    ich suche eine Möglichkeit, wie ich ein Screenshot von dem Sicherheitshinweis während der Installation eines Programms unter Vista Ultimate machen kann.

    Auf der Suche bin ich auf diesen Beitrag gestoßen.
    Habe auch dieses Skript ausprobiert

    Spoiler anzeigen
    [autoit]

    Dim $i = 1

    While 1

    $PicName = @ScriptDir& "\Screenshot_" & $i & ".bmp"
    $localfile = $PicName
    $serverfilename = $PicName
    DllCall("Captdll.dll", "int", "CaptureScreen", "str", $PicName)
    $i = $i + 1
    Sleep(3000)
    WEnd

    [/autoit]


    Aber das Bild, das ich brauche bekomme ich auf diesem Wege nicht.
    Kennt jemand eine Möglichkeit an den Screenshot zu kommen?

    Einmal editiert, zuletzt von xoma (18. Juni 2007 um 11:10)

  • fehlt da jetzt nicht ein Parameter im Call?

    [autoit]


    Dim $i = 1

    While 1

    $PicName = @ScriptDir& "\Screenshot_" & $i & ".bmp"
    $localfile = $PicName
    $serverfilename = $PicName
    DllCall($h_DllCaptDLL, "int:cdecl", "CaptureScreen", "str", $PicName, "int", -1)
    $i = $i + 1
    Sleep(3000)
    WEnd

    [/autoit]


    probier mal so

  • hallo leviathan,

    so wie ich den Skript reingestellt habe, funktioniert er unter XP.
    Mit deinen Änderungen läuft der unter XP nicht.

    Ich kann zur Zeit nur unter XP testen, ob der Skript läuft.

  • Hi,

    wir brauchen das für eine Dokumentation und es wäre einfach schön, wenn man ein Bild von dem Dialog, der bei der Installation unserer Produkte kommt, hätte.