FileDelete funktioniert nicht

  • Hallo,
    ich möchte möglichst klein einen Screenshot abspeichern.
    so ist der screenshot noch 1MB groß:

    [autoit]


    _ScreenCapture_Capture("test.jpg",$aRes[0],$aRes[1],$aRes[2],$aRes[3])

    [/autoit]

    diese Funktion benutze ich zum verkleinern:

    [autoit]

    Func _picture($input)
    _GDIPlus_Startup()
    $himg = _GDIPlus_ImageLoadFromFile($input)
    $hGraphics = _GDIPlus_ImageGetGraphicsContext($himg)
    _GDIPlus_GraphicsDrawImage($hGraphics, $himg, 0, 0)
    _GDIPlus_ImageSaveToFile($himg, $date2)
    _GDIPlus_ImageDispose($himg)
    _GDIPlus_Shutdown()
    EndFunc

    [/autoit]


    dadurch wird der screenshot auf knapp 250KB komprimiert
    leider kann ich den screenshot nicht sofort verkleinert abspeichern, deshalb lasse ich den screenshot in sperriger form abspeichern und lösche diese
    nach der kompression wieder
    leider klappt das nicht
    hier mein script:

    [autoit]


    #include <ScreenCapture.au3>
    #include <Array.au3>
    #include <WinAPI.au3>
    #include <Gdiplus.au3>
    Global $aRes = _GetGlobalResolution()
    _ScreenCapture_Capture("groß.jpg",$aRes[0],$aRes[1],$aRes[2],$aRes[3])
    _picture("groß.jpg")
    FileDelete("groß.jpg")
    Func _picture($input)
    _GDIPlus_Startup()
    $himg = _GDIPlus_ImageLoadFromFile($input)
    $hGraphics = _GDIPlus_ImageGetGraphicsContext($himg)
    _GDIPlus_GraphicsDrawImage($hGraphics, $himg, 0, 0)
    _GDIPlus_ImageSaveToFile($himg, "klein.jpg")
    _GDIPlus_ImageDispose($himg)
    _GDIPlus_Shutdown()
    EndFunc
    Func _GetGlobalResolution()
    Local $aRes[4], $hWindow, $stRET
    $hWindow = _WinAPI_GetDesktopWindow()
    $stRET = _WinAPI_GetWindowPlacement($hWindow)
    If Not @error Then
    $aRes[0] = DllStructGetData($stRET, 'rcNormalPosition', 1) ; left
    $aRes[1] = DllStructGetData($stRET, 'rcNormalPosition', 2) ; top
    $aRes[2] = DllStructGetData($stRET, 'rcNormalPosition', 3) ; right
    $aRes[3] = DllStructGetData($stRET, 'rcNormalPosition', 4) ; bottom
    Return $aRes
    Else
    Return SetError(1, 0, 0)
    EndIf
    EndFunc

    [/autoit]

    Die groß.jpg bleibt nach ausführen des scripts trotzdem noch übrig,
    wenn ich sie mit einem seperaten script löschen möchte wird sie gelöscht, deshalb vermute ich, dass das Löschen hier fehlschlägt, weil die Datei
    in diesem Prozess geöffnet ist.
    Komisch, denn nach _GDIPlus_Shutdown() dürfte sie nicht mehr geöffnet sein.

    Kann mir jemand weiterhelfen?
    LG
    Schweizergeizer

  • howdy

    habe dein problem so gelöst..

    [autoit]

    #include <ScreenCapture.au3>
    #include <Array.au3>
    #include <WinAPI.au3>
    #include <Gdiplus.au3>
    Global $aRes = _GetGlobalResolution()
    Global $ich_bin_ein_toller_screenshot = _ScreenCapture_Capture("",$aRes[0],$aRes[1],$aRes[2],$aRes[3])
    _picture($ich_bin_ein_toller_screenshot)
    _WinAPI_DeleteObject($ich_bin_ein_toller_screenshot)

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

    Func _picture($input)
    _GDIPlus_Startup()
    $himg = _GDIPlus_BitmapCreateFromHBITMAP($input)
    $hGraphics = _GDIPlus_ImageGetGraphicsContext($himg)
    _GDIPlus_GraphicsDrawImage($hGraphics, $himg, 0, 0)
    _GDIPlus_ImageSaveToFile($himg, "klein.jpg")
    _GDIPlus_ImageDispose($himg)
    _GDIPlus_Shutdown()

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

    EndFunc

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

    Func _GetGlobalResolution()
    Local $aRes[4], $hWindow, $stRET
    $hWindow = _WinAPI_GetDesktopWindow()
    $stRET = _WinAPI_GetWindowPlacement($hWindow)
    If Not @error Then
    $aRes[0] = DllStructGetData($stRET, 'rcNormalPosition', 1) ; left
    $aRes[1] = DllStructGetData($stRET, 'rcNormalPosition', 2) ; top
    $aRes[2] = DllStructGetData($stRET, 'rcNormalPosition', 3) ; right
    $aRes[3] = DllStructGetData($stRET, 'rcNormalPosition', 4) ; bottom
    Return $aRes
    Else
    Return SetError(1, 0, 0)
    EndIf
    EndFunc

    [/autoit]


    //EDIT: upsi.. das auslesen der auflösung sollte ich natürlich wieder anmachen :D

    mfg
    sgtigram

    Einmal editiert, zuletzt von SgtIgram (2. Januar 2014 um 06:07)