Screenshot von Web Seiten

  • Ich will AutoIt Windows Screenshooter mit einer Web Screenshot Funktion erweitern,
    bin eigentlich mit der IE Objektprogrammierung fast überhaupt nicht vertraut.

    Es gibt zwar ein klasse Proggy (Web Screenshot), aber ich kenne mich überhaupt nicht
    mit AutoItObject aus.

    Also habe ich versucht, was eigenes auf die Beine zu stellen:

    Spoiler anzeigen
    [autoit]


    #include <Clipboard.au3>
    #include <IE.au3>
    #include <WinAPI.au3>
    #include <WindowsConstants.au3>
    ;Coded by UEZ 2011 - beta version

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

    If @OSBuild < 6000 Then Exit MsgBox(16, "Error!", "Script is running properly only on Vista+ os!", 10)

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

    Global Const $hDwmApiDll = DllOpen("dwmapi.dll")
    Global $sChkAero = DllStructCreate("int;")
    DllCall($hDwmApiDll, "int", "DwmIsCompositionEnabled", "ptr", DllStructGetPtr($sChkAero))
    Global $aero = DllStructGetData($sChkAero, 1)
    If Not $aero Then Exit MsgBox(16, "Error", "Aero must be enabled to grab web sites properly!", 20)
    $sChkAero = 0

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

    Global $URL, $btn, $msg, $hWnd, $input, $i
    $hWnd = GUICreate("Save Web Page as an image", 320, 120)
    $input = GUICtrlCreateInput("http://www.stern.de", 10, 5, 300, 20)
    $btn = GUICtrlCreateButton("Ok", 40, 35, 240, 70)
    ControlFocus($hWnd, "", $btn)
    GUISetState()

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

    While $msg <> -3
    $msg = GUIGetMsg()
    Select
    Case $msg = $btn
    Start()
    Case $msg = -3
    GUIDelete($hWnd)
    Exit
    EndSelect
    WEnd

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

    Func Start()
    $URL = GUICtrlRead($input)
    SplashTextOn("Screenshooting Web Site", "Please wait while taking screenshot", 300, 40, -1, -1, 1 + 2 + 4 + 32, "")
    AdlibRegister("Wait", 300)
    Web_Screenshot($URL)
    AdlibUnRegister("Wait")
    SplashOff()
    MsgBox(0, "Information", "Web Site Image copied to clipboard!", 10)
    EndFunc

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

    Func Web_Screenshot($url, $IEwidth = 1045)
    Local $oIE, $GUIActiveX, $oDocument, $oBody, $BodyWidth, $BodyHeight, $oHtml
    Local $hGUI_WebGrab, $hWin, $aWin, $aMP
    Local Const $BrowserNavConstant = 2 + 256 + 2048 ;BrowserNavConstant -> http://msdn.microsoft.com/en-us/library/…8(v=vs.85).aspx
    $oIE = ObjCreate("Shell.Explorer.2") ;http://msdn.microsoft.com/en-us/library/…4(v=vs.85).aspx

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

    $hWin = WinGetHandle("Program Manager")
    $aWin = WinGetPos($hWin)

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

    #region render web site to get height
    $hGUI_WebGrab = GUICreate("", 0, 0, $aWin[0] - $BodyWidth + 1, $aWin[1] - $BodyHeight + 1, BitOR($WS_CLIPSIBLINGS, $WS_CLIPCHILDREN, $WS_POPUP),Default, WinGetHandle(AutoItWinGetTitle()))
    $GUIActiveX = GUICtrlCreateObj($oIE, 0, 0, $IEwidth, 256)
    GUISetState(@SW_MINIMIZE, $hGUI_WebGrab)

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

    Local $timeout = 30 * 1000
    Local $timer = TimerInit()
    With $oIE
    .Silent = True
    .FullScreen = True
    .Resizable = False
    .Visible = False
    .StatusBar = False
    .AddressBar = False
    .Navigate($URL, $BrowserNavConstant, "_top")
    Do
    If TimerDiff($timer) > $timeout Then ExitLoop
    Sleep(100)
    Until $oIE.ReadyState = 4
    .Stop
    Sleep(2000)
    EndWith

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

    $oDocument = $oIE.document
    $oBody = $oDocument.body
    $oBody.scroll = "no"
    $oBody.style.borderStyle = "none"
    $BodyWidth = $oBody.scrollWidth
    $BodyHeight = $oBody.scrollHeight
    GUIDelete($hGUI_WebGrab)
    $GUIActiveX = 0
    #endregion

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

    $hGUI_WebGrab = GUICreate("", $BodyWidth, $BodyHeight, $aWin[0] - $BodyWidth + 1, $aWin[1] - $BodyHeight + 1, BitOR($WS_CLIPSIBLINGS, $WS_CLIPCHILDREN, $WS_POPUP), Default, WinGetHandle(AutoItWinGetTitle()))
    ;~ $hGUI_WebGrab = GUICreate("", $BodyWidth, $BodyHeight, -1, -1, BitOR($WS_CLIPSIBLINGS, $WS_CLIPCHILDREN, $WS_POPUP), Default, WinGetHandle(AutoItWinGetTitle()))
    $GUIActiveX = GUICtrlCreateObj ($oIE, 0, 0, $BodyWidth, Min($BodyHeight, 8192))
    ;~ GUISetState(@SW_SHOWNA, $hGUI_WebGrab) ;Show GUI for some milli seconds to make a screenshot

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

    $timer = TimerInit()
    With $oIE
    .Silent = True
    .FullScreen = True
    .Resizable = False
    .Visible = False
    .StatusBar = False
    .AddressBar = False
    .Navigate($URL, $BrowserNavConstant, "_top")
    Do
    If TimerDiff($timer) > $timeout Then ExitLoop
    Sleep(100)
    Until $oIE.ReadyState = 4
    .Stop
    Sleep(1000)
    EndWith

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

    $oDocument = $oIE.document
    $oBody =$oDocument.body
    $oHtml = $oDocument.documentElement
    $oBody.scroll = "no"
    $oBody.style.borderStyle = "none"
    $oBody.style.border = "0px"
    $oHtml.style.overflow = 'hidden'

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

    GUISetState(@SW_SHOWNA, $hGUI_WebGrab) ;Show GUI

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

    Local $hDC = _WinAPI_GetWindowDC($hGUI_WebGrab)
    Local $hDC_Dummy = _WinAPI_GetWindowDC(0)
    Local $hMemDC = _WinAPI_CreateCompatibleDC($hDC_Dummy)
    Local $hBitmap = _WinAPI_CreateCompatibleBitmap($hDC_Dummy, $BodyWidth, $BodyHeight)
    _WinAPI_SelectObject($hMemDC, $hBitmap)
    _WinAPI_BitBlt($hMemDC, 0, 0, $BodyWidth, $BodyHeight, $hDC, 0, 0, $SRCCOPY)

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

    _WinAPI_DeleteDC($hMemDC)
    _WinAPI_ReleaseDC($hGUI_WebGrab, $hDC)
    _WinAPI_ReleaseDC(0, $hDC_Dummy)
    _WinAPI_ReleaseDC(0, $hDC)

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

    _ClipBoard_Open(0)
    _ClipBoard_Empty()
    _ClipBoard_SetDataEx($hBitmap, $CF_BITMAP)
    _ClipBoard_Close()
    _WinAPI_DeleteObject ($hBitmap)
    $GUIActiveX = 0
    $oIE = 0
    GUIDelete($hGUI_WebGrab)
    _ReduceMemory()
    EndFunc

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

    Func Min($a, $b)
    If $a < $b Then Return $a
    Return $b
    EndFunc

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

    Func Wait()
    Switch Mod($i, 4)
    Case 0
    ControlSetText("Screenshooting Web Site", "", "Static1", "Please wait while taking screenshot")
    Case 1
    ControlSetText("Screenshooting Web Site", "", "Static1", "Please wait while taking screenshot .")
    Case 2
    ControlSetText("Screenshooting Web Site", "", "Static1", "Please wait while taking screenshot ..")
    Case 3
    ControlSetText("Screenshooting Web Site", "", "Static1", "Please wait while taking screenshot ...")
    EndSwitch
    $i += 1
    EndFunc

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

    Func _ReduceMemory($ProcID = 0)
    If $ProcID = 0 or ProcessExists($ProcID) = 0 Then ; No process id specified or process doesn't exist - use current process instead.
    Local $ai_GetCurrentProcess = DllCall('kernel32.dll', 'ptr', 'GetCurrentProcess')
    Local $ai_Return = DllCall("psapi.dll", 'int', 'EmptyWorkingSet', 'ptr', $ai_GetCurrentProcess[0])
    Return $ai_Return[0]
    EndIf
    Local $ai_Handle = DllCall("kernel32.dll", 'ptr', 'OpenProcess', 'int', 0x1f0fff, 'int', False, 'int', $ProcID)
    Local $ai_Return = DllCall("psapi.dll", 'int', 'EmptyWorkingSet', 'ptr', $ai_Handle[0])
    DllCall('kernel32.dll', 'int', 'CloseHandle', 'ptr', $ai_Handle[0])
    Return $ai_Return[0]
    EndFunc

    [/autoit]

    Ich habe zwei Probleme hier:
    Wie kann ich eine IE Seite rendern und diese abspeichern, ohne eine GUI anzuzeigen?
    Wie bekomme ich den vertikalen Balken auf der rechten Seite weg (einfach den Screenshot vom Clipboard in irgendein Tool einfügen)?

    Ideen?

    Der Code ist noch im Alpha Status und kann oder hat sehr wahrscheinlich schwachsinnigen Code! Jetzt im ßeta Stadium.

    Gruß,
    UEZ

    Edit: scheint mit WinXP nicht zu laufen, da es kein Aero gibt, welches nötig ist, von Fenstern einen Screenshot zu erstellen, das sich außerhalb des sichtbaren Desktops befindet.!

    Auch am Arsch geht ein Weg vorbei...

    ¯\_(ツ)_/¯

    10 Mal editiert, zuletzt von UEZ (18. März 2011 um 11:40)

  • hab es. (Zeile 76 bis 84)

    Spoiler anzeigen
    [autoit]


    ;Coded by UEZ 2011 - alpha version
    #include <Clipboard.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <WinAPI.au3>

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

    Global $oIE, $GUIActiveX, $oDocument, $oBody, $BodyWidth, $BodyHeight
    Global $hGUI, $hWin, $aWin

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

    Global $URL, $btn, $msg, $hWnd, $input
    $hWnd = GUICreate("Save Web Page as an image", 320, 120)
    $input = GUICtrlCreateInput("http://www.autoit.de", 10, 5, 300, 20)
    $btn = GUICtrlCreateButton("Ok", 40, 35, 240, 70)
    ControlFocus($hWnd, "", $btn)
    GUISetState()
    While $msg <> -3
    $msg = GUIGetMsg()
    Select
    Case $msg = $btn
    ExitLoop
    Case $msg = -3
    Exit
    EndSelect
    WEnd
    $URL = GUICtrlRead($input)
    GUIDelete($hWnd)

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

    Global $i = 0
    SplashTextOn("Screenshooting Web Site", "Please wait while taking screenshot", 300, 40, -1, -1, 37, "")
    AdlibRegister("Wait", 500)

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

    $oIE = ObjCreate("Shell.Explorer.2")

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

    #region render web site to get height
    $hGUI = GUICreate("", 1, 1, -1, -1, $WS_POPUP)
    $GUIActiveX = GUICtrlCreateObj ($oIE, 0, 0, 1024, 256)
    With $oIE
    .TheaterMode = False
    .FullScreen = True
    .Resizable = False
    .Navigate($URL)
    While .ReadyState <> 4
    Sleep(50)
    WEnd
    EndWith

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

    $oDocument = $oIE.document
    $oBody = $oIE.document.body
    ;~ $oHtml = $oIE.document.documentElement

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

    $oBody.scroll = "no"
    $oBody.style.borderStyle = "none"
    ;~ $oHtml.style.overflow = 'hidden'
    ;~ $oBody.style.overflow = 'hidden'

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

    $BodyWidth = $oBody.scrollWidth
    $BodyHeight = $oBody.scrollHeight
    ;~ $RootWidth = $oHtml.scrollWidth
    ;~ $RootHeight = $oHtml.scrollHeight

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

    GUIDelete($hGUI)
    #endregion

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

    $hGUI = GUICreate("", $BodyWidth, $BodyHeight, -1, 0, BitOR($WS_CLIPCHILDREN, $WS_POPUP), Default, WinGetHandle(AutoItWinGetTitle()))
    $GUIActiveX = GUICtrlCreateObj ($oIE, 0, 0, $BodyWidth, $BodyHeight + 50)

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

    With $oIE
    .TheaterMode = False
    .FullScreen = True
    .Resizable = False
    .Navigate($URL)
    While .ReadyState <> 4
    Sleep(50)
    WEnd
    EndWith
    ;;;; Zusatz Start
    $oDocument = $oIE.document
    $oBody = $oIE.document.body
    $oHtml = $oIE.document.documentElement

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

    $oBody.scroll = "no"
    $oBody.style.borderStyle = "none"
    $oHtml.style.overflow = 'hidden'
    ;;;;; Zusatz Ende
    $hWin = WinGetHandle("Program Manager")
    $aWin = WinGetPos($hWin)
    WinMove($hGUI, "", $aWin[0] - $BodyWidth + 1, $aWin[1] - $BodyHeight+ 1) ;hide window
    GUISetState(@SW_SHOWNA) ;Show GUI

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

    Global $hDC = _WinAPI_GetWindowDC($hGUI)
    Global $hDC_Dummy = _WinAPI_GetWindowDC(0)
    Global $hMemDC = _WinAPI_CreateCompatibleDC($hDC_Dummy)
    Global $hBitmap = _WinAPI_CreateCompatibleBitmap($hDC_Dummy, $BodyWidth, $BodyHeight)
    _WinAPI_SelectObject($hMemDC, $hBitmap)
    _WinAPI_BitBlt($hMemDC, 0, 0, $BodyWidth, $BodyHeight, $hDC, 0, 0, $SRCCOPY)
    _WinAPI_DeleteDC($hMemDC)
    _WinAPI_ReleaseDC($hGUI, $hDC)
    _WinAPI_ReleaseDC(0, $hDC_Dummy)
    _ClipBoard_Open(0)
    _ClipBoard_Empty()
    _ClipBoard_SetDataEx($hBitmap, $CF_BITMAP)
    _ClipBoard_Close()
    _WinAPI_DeleteObject ($hBitmap)
    _WinAPI_DeleteDC($hMemDC)
    _WinAPI_ReleaseDC(0, $hDC)
    GUIDelete($hGUI)
    AdlibUnRegister("Wait")
    SplashOff()
    MsgBox(0, "Information", "Web Site Image copied to clipboard!", 10)
    Exit

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

    Func Wait()
    Switch Mod($i, 4)
    Case 0
    ControlSetText("Screenshooting Web Site", "", "Static1", "Please wait while taking screenshot")
    Case 1
    ControlSetText("Screenshooting Web Site", "", "Static1", "Please wait while taking screenshot .")
    Case 2
    ControlSetText("Screenshooting Web Site", "", "Static1", "Please wait while taking screenshot ..")
    Case 3
    ControlSetText("Screenshooting Web Site", "", "Static1", "Please wait while taking screenshot ...")
    EndSwitch
    $i += 1
    EndFunc

    [/autoit]
  • eukalyptus: geht es damit: WinMove($hGUI, "", $aWin[0] - $BodyWidth + 10, $aWin[1] - $BodyHeight+ 10) ?

    andygo: vielen Dank :!: Geht demm jetzt :thumbup:

    Ich habe das Skript nicht unter WinXP, sondern "nur" unter Win7 x64 getestet - XP teste ich in meiner VM gleich...

    Gruß,
    UEZ

    Edit: das Skript scheint mit WinXP nicht richtig zu laufen, denn normalerweise wird der IE nicht direkt aufgerufen, sondern kurz in einem eigenen Fenster, von dem ein Screenshot erstellt wird!
    Da haben wir es einmal wieder - WinXP und die Komptabilität :pinch:

    Auch am Arsch geht ein Weg vorbei...

    ¯\_(ツ)_/¯

    3 Mal editiert, zuletzt von UEZ (10. Januar 2011 um 13:03)

  • ok, hier funktioniert nun der resize / resample ohne zusatzprogramme.
    die variablen $rp1 und $rp2 könnten vorher z.b. in einer Gui abgefragt werden.

    Spoiler anzeigen
    [autoit]


    ;Coded by UEZ 2011
    #include <Clipboard.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <WinAPI.au3>
    #include <GDIPlus.au3>
    Global $oIE, $GUIActiveX, $oDocument, $oBody, $BodyWidth, $BodyHeight
    Global $hGUI, $hWin, $aWin

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

    Global $URL, $btn, $msg, $hWnd, $input
    $hWnd = GUICreate("Save Web Page as an image", 320, 120)
    $input = GUICtrlCreateInput("http://www.autoit.de", 10, 5, 300, 20)
    $btn = GUICtrlCreateButton("Ok", 40, 35, 240, 70)
    ControlFocus($hWnd, "", $btn)
    GUISetState()
    While $msg <> -3
    $msg = GUIGetMsg()
    Select
    Case $msg = $btn
    ExitLoop
    Case $msg = -3
    Exit
    EndSelect
    WEnd
    $URL = GUICtrlRead($input)
    GUIDelete($hWnd)

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

    SplashTextOn("Screenshooting Web Site", "Please wait while taking screenshot ...", 300, 40, -1, -1, 37, "")

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

    $oIE = ObjCreate("Shell.Explorer.2")

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

    #region render web site to get height
    $hGUI = GUICreate("", 1, 1, -1, -1, $WS_POPUP)
    $GUIActiveX = GUICtrlCreateObj ($oIE, 0, 0, 1024, 256)
    With $oIE
    .TheaterMode = False
    .FullScreen = True
    .Resizable = False
    .Navigate($URL)
    While .ReadyState <> 4
    Sleep(50)
    WEnd
    EndWith

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

    $oDocument = $oIE.document
    $oBody = $oIE.document.body
    $oHtml = $oIE.document.documentElement

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

    $oBody.scroll = "no"
    $oBody.style.borderStyle = "none"
    $oHtml.style.overflow = 'hidden'
    ;$oBody.style.overflowy = "hidden"

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

    $BodyWidth = $oBody.scrollWidth
    $BodyHeight = $oBody.scrollHeight
    ;~ $RootWidth = $oHtml.scrollWidth
    ;~ $RootHeight = $oHtml.scrollHeight

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

    GUIDelete($hGUI)
    #endregion

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

    $hGUI = GUICreate("", $BodyWidth, $BodyHeight, -1, 0, BitOR($WS_CLIPCHILDREN, $WS_POPUP), Default, WinGetHandle(AutoItWinGetTitle()))
    $GUIActiveX = GUICtrlCreateObj ($oIE, 0, 0, $BodyWidth, $BodyHeight + 50)

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

    With $oIE
    .TheaterMode = False
    .FullScreen = True
    .Resizable = False
    .Navigate($URL)
    While .ReadyState <> 4
    Sleep(50)
    WEnd
    EndWith
    $oDocument = $oIE.document
    $oBody = $oIE.document.body
    $oHtml = $oIE.document.documentElement

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

    $oBody.scroll = "no"
    $oBody.style.borderStyle = "none"
    $oHtml.style.overflow = 'hidden'

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

    $hWin = WinGetHandle("Program Manager")
    $aWin = WinGetPos($hWin)
    WinMove($hGUI, "", $aWin[0] - $BodyWidth + 1, 0) ;hide window
    GUISetState(@SW_SHOWNA) ;Show GUI

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

    Global $hDC = _WinAPI_GetWindowDC($hGUI)
    Global $hDC_Dummy = _WinAPI_GetWindowDC(0)
    Global $hMemDC = _WinAPI_CreateCompatibleDC($hDC_Dummy)
    Global $hBitmap = _WinAPI_CreateCompatibleBitmap($hDC_Dummy, $BodyWidth, $BodyHeight)
    _WinAPI_SelectObject($hMemDC, $hBitmap)
    _WinAPI_BitBlt($hMemDC, 0, 0, $BodyWidth, $BodyHeight, $hDC, 0, 0, $SRCCOPY)
    _WinAPI_DeleteDC($hMemDC)
    _WinAPI_ReleaseDC($hGUI, $hDC)
    _WinAPI_ReleaseDC(0, $hDC_Dummy)
    _ClipBoard_Open(0)
    _ClipBoard_Empty()
    _ClipBoard_SetDataEx($hBitmap, $CF_BITMAP)
    ;bildverarbeitung start
    $hBitmap2 = _ClipBoard_GetDataEx($CF_BITMAP)
    _GDIPlus_Startup()
    $hImage = _GDIPlus_BitmapCreateFromHBITMAP($hBitmap2)
    $Width = _GDIPlus_ImageGetWidth($hImage)
    $Height = _GDIPlus_ImageGetHeight($hImage)
    $rp1 = 1024;maximale neue breite
    $rp2 = 768;maximale neue höhe
    ;start berechnung neue höhe und neue breite im original-seitenverhältnis
    $i = $rp1
    $xa = $Width / $rp1
    while $Height / $xa > $rp2
    $i -= 1
    $xa = $Width / $i
    wend
    $Width2 = $Width
    $Height2 = $Height
    if $Width > $rp1 or $Height > $rp2 then
    $Width2 = int($Width / $xa)
    $Height2 = int($Height / $xa)
    endif
    ;ende berechnung neue höhe und neue breite im original-seitenverhältnis
    $hBitmap1 = _WinAPI_CreateBitmap($Width2, $Height2, 1, 32)
    $hImage1 = _GDIPlus_BitmapCreateFromHBITMAP($hBitmap1)
    $hGraphic = _GDIPlus_ImageGetGraphicsContext($hImage1)
    _GDIPlus_GraphicsDrawImageRect($hGraphic, $hImage, 0, 0, $Width2, $Height2)
    _GDIPlus_ImageSaveToFile($hImage1, @scriptdir & "\GDIPlus_Image.jpg")
    ;bildverarbeitung ende
    _GDIPlus_BitmapDispose($hImage)
    _GDIPlus_BitmapDispose($hImage1)
    _GDIPlus_Shutdown()
    _ClipBoard_Close()
    _WinAPI_DeleteObject ($hBitmap)
    _WinAPI_DeleteObject ($hBitmap1)
    _WinAPI_DeleteDC($hMemDC)
    _WinAPI_ReleaseDC(0, $hDC)
    GUIDelete($hGUI)
    SplashOff()
    MsgBox(0, "Information", "Web Site Image copied to clipboard!", 10)
    Exit

    [/autoit]
  • Ich hatte vor längerer Zeit ein nettes Programm, dass bei Fenstern allgemein einen Screenshot erstellt hat, automagisch etwas herunter gescrollt hat und den nächsten gemacht hat und die Bilder dann zusammengesetzt hat. Vielleicht ist das einfacher?

    Gruß,
    Matthias

  • Ich hatte vor längerer Zeit ein nettes Programm, dass bei Fenstern allgemein einen Screenshot erstellt hat, automagisch etwas herunter gescrollt hat und den nächsten gemacht hat und die Bilder dann zusammengesetzt hat. Vielleicht ist das einfacher?

    Gruß,
    Matthias

    meinst du das ;) [ gelöst ] kompletter Screenshot einer Webseite

    UEZ versucht doch gerade ohne Scrollen auszukommen!

  • Hab etwas herumprobiert und noch keine Lösung für XP gefunden.

    Es schein, daß Fensterteile, die außerhalb des Bildschrims liegen nicht erfasst werden. weder mit BitBlt, noch via WM_PRINTCLIENT hatte ich Erfolg.

    Bei Gelegenheit werd ich weiterforschen ;)

    E

    Ich werde mich langsam, aber sicher, von WinXP verabschieden und nicht darauf achten, ob es auch unter WinXP läuft. Wenn es unter WinXP läuft, dann gut, ansonsten Pech, egal ob MS noch für WinXP Patche herausbringt oder nicht!


    Ich hatte vor längerer Zeit ein nettes Programm, dass bei Fenstern allgemein einen Screenshot erstellt hat, automagisch etwas herunter gescrollt hat und den nächsten gemacht hat und die Bilder dann zusammengesetzt hat. Vielleicht ist das einfacher?

    Gruß,
    Matthias

    Das Skript funzt doch unter Vista+, somit ist das Basteln nicht nötig. ;)

    Gruß,
    UEZ

    Auch am Arsch geht ein Weg vorbei...

    ¯\_(ツ)_/¯

  • eukalyptus: Nein, das meinte ich nicht. Es handelte sich um ein kommerzielles Produkt, dass irgendwann bei einer c't beilag. Ich kenne es aber nicht mehr, da ich es als unnötig empfand.

    UEZ: Zunächst ist die Bastelei doch sinnvoll: So kannst du auch andere Programme mit "längerer" GUI abfotografieren. Meiner Meinung nach durchaus sinnvoll! Außerdem schließt du nun BugFix aus - das wird der sicher nicht tolerieren! :D

    Gruß,
    Matthias

  • Danke Progandy!

    Ich weiß aber wirklich nicht mehr, was es war. Nur das Prinzip hätte vielleicht geholfen...

    Gruß,
    Matthias

  • Ich habe vorgestern IE9 installiert und nun wird z.B. https://autoit.de/www.stern.de nur weiß gerendert, wobei beim ersten Rendern die Seite noch angezeigt wird.

    Beim ersten Rendern wird die Höhe des Fensters ermittelt, die dann beim zweiten Rendern benutzt wird, um den Screenshot von der Webseite zu erstellen.

    Hat jemand eine Idee, warum das jetzt so ist bzw. kann jemand das mal testen (mit IE9 und Aero!), ob das Fenster auch weiß bleibt? Der Screenshot wird in den Clipboard geschickt.

    Der Code ist im ersten Post!

    Gruß,
    UEZ

    Auch am Arsch geht ein Weg vorbei...

    ¯\_(ツ)_/¯

  • hallo,

    habe win7 #64 und auch den ie9. verschiedene tests haben ergeben:

    [autoit]

    $wsBodyHeight+ 50

    [/autoit]

    dieser wert darf gesamt nicht mehr als

    [autoit]

    8192

    [/autoit]


    sein. zumindest ist es hier so wenn ich das festsetze das es klappt. beträgt der wert 8193 geht es schon nicht mehr.
    zwar wird die größe wie berechnet ausgegeben, auch das seitenverhältnis stimmt, aber eben nur weiss.....

  • Hmmm, warum plötzlich die Beschränkung auf 8192? ?(

    Aber egal, jetzt weiß ich es ja :D

    Danke andygo!


    Habe den Code aktualisiert.


    Gruß,
    UEZ

    Auch am Arsch geht ein Weg vorbei...

    ¯\_(ツ)_/¯

  • und gleich noch eine frage im anschluss: könnte man den code auch so verändern das wenn eine seite > 8192 ist, erst von 0 bis 8192 ge-screent wird, zwischengelagert, dann von 8192 bis ende (bzw. bis 16.384)... u.s.w. und dann die teile per gdi+ zusammenfügt zu einem bild?