png erzeugen omg

  • ich möchte mithilfe dem Tool topng aus einem bmp ein png bild erstellen irgendwie gehtst per hand aber beim runwait geht einfach nichts mehr ich lad mal die erforderlichen daten in den anhang

    hier der code:

    [autoit]


    $SaveAs = ".bmp"
    If $SaveAs = ".jpg" Then
    Global $SaveAs = ".jpg"
    Else
    $SaveAs = ".bmp"
    $quality = -1
    EndIf
    Global $CaptureDirectory = @TempDir & "\"; Verzeichnis für die Screenshots
    $CaptureFile = "ss" & @HOUR & @MIN & @SEC & $SaveAs
    DllCall("data\captdll.dll", "int", "CaptureRegion", "str", $CaptureDirectory & $CaptureFile, "int", "0", "int", "0", "int", @DesktopWidth, "int", @DesktopHeight, "int", $quality)
    ; $CaptureDirectory & $CaptureFile = zu speichernder Pfad und Name des Screenshots
    ; "0" = Links
    ; "0" = Oben
    ; @DesktopWidth = Breite
    ; @DesktopHeight = Höhe
    ; $Quality = BMP (-1) od. JPG (1-100)

    If @error Then
    MsgBox(262160,"Error","failed to make screenshot - maybe captdll.dll is missing in scriptdir")
    Else
    If $SaveAs = ".jpg" Then
    Global $CaptureFile ;damit die variable in der anderen funktion verwendet werden kann
    ;_Upload() zum hochladen der datei dann
    Else
    ;MsgBox(0,"",$CaptureFile)
    FileMove($CaptureDirectory & $CaptureFile, @ScriptDir&"\data\"&$CaptureFile)
    sleep(500)
    If FileExists("data\"&$CaptureFile) Then
    $filename = StringTrimRight($CaptureFile, 3)
    $BatFile = "@echo off" & @CRLF
    $BatFile = $BatFile & "topng " & $CaptureFile & " png" & @CRLF
    $bat = FileWrite("data\pngcreate.bat", $BatFile)
    FileClose($bat)
    RunWait("data\pngcreate.bat", @ScriptDir&"\data", @SW_HIDE)
    sleep(1000)
    ;FileDelete(@ScriptDir & "\data\pngcreate.bat")
    ;FileDelete(@ScriptDir & "\data\"&$CaptureFile)
    ;FileMove(@ScriptDir & "\data\"&$filename&"png", @TempDir&"\"&$filename&"png")
    ;MsgBox(0,"",@ScriptDir & "\data\"&$filename&"png"&" "&@TempDir&"\"&$filename&"png")
    Global $CaptureFile = $filename&"png"
    ;MsgBox(1,"", $CaptureFile)
    ;_Upload()
    Else
    MsgBox(1,"Error", "Can't find file!")
    EndIf
    EndIf
    EndIf

    [/autoit]
  • könnte es sein, dass die runwait-zeile so aussehen müsste :

    RunWait("data\pngcreate.bat","\data", @SW_HIDE)

    oder mal die bemerkungen zum runwait-befehl ausprobieren:

    Bemerkungen
    Um DOS-Befehle auszuführen, solltest du folgendes ausprobieren:
    RunWait(@ComSpec & " /c " & "commandName")

    ist schon spät, habe mir nur die runwait-zeile angescheut, da ich auch grade so ein ähnliches problem hatte :rolleyes:

    edit: der filemove müsste nach meiner these vielleicht auch noch geändert werden ?

    gruss exberliner

    Einmal editiert, zuletzt von ExBerliner (23. Februar 2007 um 23:43)

  • filemove klappt ohne Probleme nur wird irgendwie die bat nicht ausgeführt
    wenn ich die bat nicht lösche sondern per hand starte funktioniert es ja auch 8|

    mir ist gerade aufgefallen, dass ich den Dateianhang gar nicht hochgeladen hatte habs oben angehängt, dann könnt ihr es auch ausprobieren

    Einmal editiert, zuletzt von leviathan (24. Februar 2007 um 16:20)

  • ja lag daran dann ging es, aber du hast auch einen Fehler gemacht XD

    [autoit]

    RunWait(@ScriptDir&"\data\pngcreate.bat", @ScriptDir&"\data", @SW_HIDE)

    [/autoit]

    das "\" fehlte nach dem @ScriptDir

    thx

  • gut kann ja dann als gelöst gemacht werden oder kann ich das auch selber

    edit: neues Problem:

    irgendwie arbeitet er das 2te select case nicht ab

    [autoit]


    Func DesktopScreenShot2()
    ; Local $Cwin1 = WinGetHandle(""); Übernimmt aktuelles Fenster
    ; Local $Cwin2 = WinGetPos($Cwin1); Übernimmt aktuelle Fenstergrösse

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

    $SaveAs = "."&$format
    Select
    Case $SaveAs = ".jpg"
    Global $SaveAs = ".jpg"
    Case $SaveAs = ".png"
    $SaveAs = ".bmp"
    $quality = -1
    Case $SaveAs = ".bmp"
    $SaveAs = ".bmp"
    $quality = -1
    EndSelect
    Msgbox(0,"","got 313")
    Global $CaptureDirectory = @TempDir & "\"; Verzeichnis für die Screenshots
    $CaptureFile = "ss" & @HOUR & @MIN & @SEC & $SaveAs
    DllCall($dll1, "int", "CaptureRegion", "str", $CaptureDirectory & $CaptureFile, "int", "0", "int", "0", "int", @DesktopWidth, "int", @DesktopHeight, "int", $quality)
    ; $CaptureDirectory & $CaptureFile = zu speichernder Pfad und Name des Screenshots
    ; "0" = Links
    ; "0" = Oben
    ; @DesktopWidth = Breite
    ; @DesktopHeight = Höhe
    ; $Quality = BMP (-1) od. JPG (1-100)
    Msgbox(0,"","got 323")
    If @error Then
    MsgBox(262160,"Error", $03)
    Msgbox(0,"","got 326")
    Else
    $SaveAs = "."&$format
    Msgbox(0,"","got 329")
    Select
    Case $SaveAs = ".jpg"
    Msgbox(0,"","got 330")
    Global $CaptureFile
    _Upload()
    Case $SaveAs = ".png"
    FileMove($CaptureDirectory & $CaptureFile, @ScriptDir&"\data\"&$CaptureFile)
    sleep(500)
    If FileExists("data\"&$CaptureFile) Then
    $filename = StringTrimRight($CaptureFile, 3)
    $BatFile = "@echo off" & @CRLF
    $BatFile = $BatFile & "topng " & $CaptureFile & " png" & @CRLF
    $bat = FileWrite("data\pngcreate.bat", $BatFile)
    FileClose($bat)
    RunWait(@ScriptDir&"\data\pngcreate.bat", @ScriptDir&"\data", @SW_HIDE)
    FileDelete(@ScriptDir & "\data\pngcreate.bat")
    FileDelete(@ScriptDir & "\data\"&$CaptureFile)
    FileMove(@ScriptDir & "\data\"&$filename&"png", @TempDir&"\"&$filename&"png")
    Global $CaptureFile = $filename&"png"
    _Upload()
    Else
    MsgBox(1,"Error", $04)
    EndIf
    Case $SaveAs = ".bmp"
    Global $CaptureFile
    _Upload()
    EndSelect
    EndIf
    EndFunc ;==> DesktopScreenShot2()

    [/autoit]

    Einmal editiert, zuletzt von leviathan (24. Februar 2007 um 22:05)

  • Hi,

    ich habe ein paar Fehler entdeckt und korrigiert (siehe "; Edit Milko"). Ein paar Stellen habe ich auch ergänzt, sonst hätte das Script bei mir nicht funktioniert.

    Das Problem, dass das 2. Select/Case nicht funktioniert hat, lag an der Zeile 32 in deinem gesposteten Script.

    Ich habe auch das Schreiben der Batch-Datei auskommentiert (geschmacksache). Außerdem würde ich an deiner Stelle die Files (captdll.dll und topng.exe) mit FileInstall ins Temp-Verzeichnis kopieren, dann brauche ich auch die Ausgangsfiles nicht so hin und her zuschieben.

    Viele Grüße, Milko

    Spoiler anzeigen
    [autoit]

    DesktopScreenShot2(".png")
    Func DesktopScreenShot2($Format) ; Edit Milko
    ; Local $Cwin1 = WinGetHandle(""); Übernimmt aktuelles Fenster
    ; Local $Cwin2 = WinGetPos($Cwin1); Übernimmt aktuelle Fenstergrösse
    $SaveAs = $format ; Edit Milko
    $dll1=@ScriptDir & "\data\captdll.dll" ;Edit Milko
    Select
    Case $SaveAs = ".jpg"
    Global $SaveAs = ".jpg"
    $quality=100 ; Edit Milko
    Case $SaveAs = ".png"
    $SaveAs = ".bmp"
    $quality = -1
    Case $SaveAs = ".bmp"
    $SaveAs = ".bmp"
    $quality = -1
    EndSelect
    Msgbox(0,"","got 313")
    Global $CaptureDirectory = @TempDir & "\"; Verzeichnis für die Screenshots
    $CaptureFile = "ss" & @HOUR & @MIN & @SEC & $SaveAs
    DllCall($dll1, "int", "CaptureRegion", "str", $CaptureDirectory & $CaptureFile, "int", "0", "int", "0", "int", @DesktopWidth, "int", @DesktopHeight, "int", $quality)
    ; $CaptureDirectory & $CaptureFile = zu speichernder Pfad und Name des Screenshots
    ; "0" = Links
    ; "0" = Oben
    ; @DesktopWidth = Breite
    ; @DesktopHeight = Höhe
    ; $Quality = BMP (-1) od. JPG (1-100)
    Msgbox(0,"","got 323")
    If @error Then
    MsgBox(262160,"Error", $03)
    Msgbox(0,"","got 326")
    Else
    ; $SaveAs = $format ; Edit Milko
    Msgbox(0,"","got 329")
    Select
    Case $Format = ".jpg"
    Msgbox(0,"","got 330")
    Global $CaptureFile
    _Upload()
    Case $Format = ".png"
    FileMove($CaptureDirectory & $CaptureFile, @ScriptDir&"\data\"&$CaptureFile)
    sleep(500)
    If FileExists(@ScriptDir& "\data\"&$CaptureFile) Then ; Edit Milko
    $filename = StringTrimRight($CaptureFile, 3)
    ;~ $BatFile = "@echo off" & @CRLF ; Edit Milko
    ;~ $BatFile = $BatFile & "topng " & $CaptureFile & " png" & @CRLF
    ;~ $bat = FileWrite("data\pngcreate.bat", $BatFile)
    ;~ FileClose($bat)
    ;~ RunWait(@ScriptDir&"\data\pngcreate.bat", @ScriptDir&"\data", @SW_HIDE)
    ;~ FileDelete(@ScriptDir & "\data\pngcreate.bat")
    runwait (@ComSpec & " /c " & @ScriptDir & "\data\topng.exe " & $CaptureFile & " png" & " pause",@ScriptDir & "\data\",@SW_HIDE) ; Edit Milko
    FileMove(@ScriptDir & "\data\"&$filename&"png", @TempDir&"\"&$filename&"png")
    FileDelete(@ScriptDir & "\data\"&$CaptureFile) ; Edit Milko (Zeile verschoben)
    msgbox(0,"PNg-File erstellt?","")
    Global $CaptureFile = $filename&"png"
    _Upload()
    Else
    MsgBox(1,"Error", $04)
    EndIf
    Case $Format = ".bmp"
    Global $CaptureFile
    _Upload()
    EndSelect
    EndIf
    EndFunc ;==> DesktopScreenShot2()

    [/autoit]