Works very well, and thanks for the scrolling
You are a magician

The happiness is a road...Code: Select all
Prototype printwindow(hwnd,hdc,flag)
Global printwindow.printwindow
lib = OpenLibrary(0,"User32.dll")
If lib
  printwindow = GetFunction(0,"PrintWindow")
EndIf
Procedure ScrollDown()
  In.INPUT
  In\type        = #INPUT_KEYBOARD
  In\ki\wVk      = #VK_DOWN
  ;In\ki\dwFlags  = #KEYEVENTF_KEYUP
  SendInput_(1,@In,SizeOf(INPUT))
  In\ki\dwFlags  = #KEYEVENTF_KEYUP
  SendInput_(1,@In,SizeOf(INPUT))
EndProcedure   
Procedure ScrollUp()
  In.INPUT
  In\type        = #INPUT_KEYBOARD
  In\ki\wVk      = #VK_UP
  ;In\ki\dwFlags  = #KEYEVENTF_KEYUP
  SendInput_(1,@In,SizeOf(INPUT))
  In\ki\dwFlags  = #KEYEVENTF_KEYUP
  SendInput_(1,@In,SizeOf(INPUT))
EndProcedure    
Procedure GetHandle(Wtext$)
  hWnd = GetWindow_(GetDesktopWindow_(),#GW_CHILD)
  Repeat
    Text$ = Space(#MAX_PATH)
    GetWindowText_(hWnd,@Text$,#MAX_PATH)
    If FindString(LCase(Text$), LCase(Wtext$),1) <>0 And IsWindowVisible_(hWnd) = 1
      Finhwnd = hWnd
    Else
      hWnd = GetWindow_(hWnd,#GW_HWNDNEXT)
    EndIf
  Until hWnd=0 Or Finhwnd <> 0
  ProcedureReturn Finhwnd
EndProcedure
;
For browser = 1 To 3
   Read.s Browser$
   hWnd = GetHandle(Browser$)
   If hWnd <> 0
      Break
   EndIf
Next
 
If hWnd
    If IsIconic_(hWnd)
        ShowWindow_(hWnd,#SW_RESTORE)
        Iconic =1
    EndIf
    SetForegroundWindow_(hWnd) 
    GetWindowRect_(hWnd,r.RECT)
    cycle = (r\bottom-r\top)/58 - 1
    SetActiveWindow_(hWnd)
    For x = 1 To 10
        hBitmap = CreateImage(0,r\right-r\left,r\bottom-r\top)
        hdc = StartDrawing(ImageOutput(0))
        PrintWindow(hwnd,hdc,0)
        StopDrawing()
        DeleteDC_(hdc)             
        Delay(200)    
        SaveImage(0,GetHomeDirectory() + "Image "+Str(imn)+".bmp",#PB_ImagePlugin_BMP)
        imn + 1
        Delay(200)
        For key = 1 To cycle
          ScrollDown()
          ;Delay(50)
        Next
        Delay(200)        
    Next
 EndIf
 For key = 1 To cycle*10
    ScrollUp()
 Next
 If Iconic = 1
    ShowWindow_(hWnd,#SW_MINIMIZE	)
 EndIf
If lib
  CloseLibrary(0)
EndIf   
DataSection
   Data.s "Explorer","Fire","Opera"
EndDataSection
+1Kwaï chang caïne wrote:Waooouh !!!! very great RASHAD !!!![]()
![]()
Works very well, and thanks for the scrolling
You are a magician

The happiness is a road...RASHAD wrote:Using Kiffi code
- Press right-mouse-click in the Browser URL Edit
- Select the URL
- Paste it in the StringGadget
- Press Capture
- Repeat the previous steps for each web change
Tested with Explorer,FireFox & Opera
It should work with all the other browsers
Code: Select all
UsePNGImageEncoder() Global sURL.s,imgn Enumeration #WinSnapShot #WebSnapShot EndEnumeration #DVASPECT_CONTENT = 1 #DVASPECT_THUMBNAIL = 2 #DVASPECT_ICON = 4 #DVASPECT_DOCPRINT = 8 Procedure CaptureWebPage(URL$, WBWidth.i, WBHeight.i, Filename.s) ;---------------------------------------------------------------- Define.IWebBrowser2 m_pWebBrowser Define.IHTMLDocument2 pDocument Define.IHTMLDocument3 pDocument3 Define.IHTMLElement pElement Define.IHTMLElement2 pElement2 Define.iDispatch pDispatch Define.IViewObject2 pViewObject Define.i bodyHeight Define.i bodyWidth Define.i rootHeight Define.i rootWidth Define.RECT rcBounds Define.i bolFlag Define.i IsBusy Define.i hr bolFlag = #False If OpenWindow(#WinSnapShot, 0, 0, 0, 0, "", #PB_Window_Invisible | #PB_Window_BorderLess) WebGadget(#WebSnapShot, 0, 0, 0, 0, URL$) Repeat If GetGadgetAttribute(#WebSnapShot, #PB_Web_Busy) = 0 Break EndIf While WindowEvent(): Delay(1) : Wend ForEver m_pWebBrowser = GetWindowLongPtr_(GadgetID(#WebSnapShot), #GWL_USERDATA) hr = m_pWebBrowser\get_document(@pDispatch) If hr = #S_OK If pDispatch hr = pDispatch\QueryInterface(?IID_IHTMLDocument2, @pDocument) If hr = #S_OK If pDocument hr = pDocument\get_body(@pElement) If hr = #S_OK If pElement hr = pElement\QueryInterface(?IID_IHTMLElement2, @pElement2) If hr = #S_OK If pElement2 hr = pElement2\get_scrollHeight(@bodyHeight) If hr = #S_OK ;Debug "bodyHeight: " + Str(bodyHeight) hr = pElement2\get_scrollWidth(@bodyWidth) If hr = #S_OK ;Debug "bodyWidth: " + Str(bodyWidth) hr = pDispatch\QueryInterface(?IID_IHTMLDocument3, @pDocument3) If hr = #S_OK If pDocument3 hr = pDocument3\get_documentElement(@pElement) If hr <> #S_OK : ProcedureReturn #False : EndIf hr = pElement\QueryInterface(?IID_IHTMLElement2, @pElement2) If hr <> #S_OK : ProcedureReturn #False : EndIf hr = pElement2\get_scrollHeight(@rootHeight) If hr <> #S_OK : ProcedureReturn #False : EndIf ;Debug "rootHeight: " + Str(rootHeight) hr = pElement2\get_scrollWidth(@rootWidth) If hr <> #S_OK : ProcedureReturn #False : EndIf ;Debug "rootWidth: " + Str(rootWidth) Define.i width Define.i height width = bodyWidth If rootWidth > bodyWidth : width = rootWidth : EndIf height = bodyHeight If rootHeight > bodyHeight : height = rootHeight : EndIf width + 22 ResizeGadget(#WebSnapShot, 0, 0, width, height) hr = m_pWebBrowser\QueryInterface(?IID_IViewObject2, @pViewObject) If hr = #S_OK If pViewObject Define.i hdcMain hdcMain = GetDC_(0) If hdcMain Define.i hdcMem hdcMem = CreateCompatibleDC_(hdcMain) If hdcMem Define.i hBitmap hBitmap = CreateCompatibleBitmap_(hdcMain, width, height) If hBitmap Define.i oldImage oldImage = SelectObject_(hdcMem, hBitmap) rcBounds\top = 0 rcBounds\left = 0 rcBounds\right = width rcBounds\bottom = height pViewObject\Draw(#DVASPECT_CONTENT, -1, 0, 0, hdcMain, hdcMem, rcBounds, 0, 0, 0) Define.i Image Image = CreateImage(#PB_Any, width, height) If Image Define.i img_hDC img_hDC = StartDrawing(ImageOutput(Image)) If img_hDC BitBlt_(img_hDC, 0, 0, width, height, hdcMem, 0, 0, #SRCCOPY) StopDrawing() SaveImage(Image,Filename,#PB_ImagePlugin_PNG) bolFlag = #True EndIf ; img_hDC FreeImage(Image) EndIf ; Image SelectObject_(hdcMem, oldImage) EndIf ; hBitmap DeleteDC_(hdcMem) EndIf ; hdcMem ReleaseDC_(0, hdcMain) EndIf ; hdcMain pViewObject\Release() EndIf ; pViewObject EndIf; HR pDocument3\Release() EndIf ; pDocument3 EndIf ; HR EndIf ; HR EndIf ; HR pElement2\Release() EndIf ; pElement2 EndIf ; HR pElement\Release() EndIf ; pElement EndIf ; HR pDocument\Release() EndIf ; pDocument EndIf ; HR pDispatch\Release() EndIf ; pDispatch EndIf ; HR CloseWindow(#WinSnapShot) EndIf ProcedureReturn bolFlag EndProcedure Procedure Snapshot() ;------------------- ;Define sURL.s Define sFileOut.s Define sNow.s ;sURL = "http://www.purebasic.fr/english/" ;sFileOut = ReplaceString(sURL, ".", "_") ;sNow = FormatDate("_%yyyy_%mm_%dd_%hh_%ii_%ss", Date()) ExamineDesktops() sFileOut = GetHomeDirectory()+"web_image_"+Str(imgn)+".png" imgn+1 If CaptureWebPage(sURL, DesktopWidth(0), DesktopHeight(0), sFileOut) Else MessageRequester("Web Page", "Capture Failed") EndIf EndProcedure ;Snapshot() LoadFont(0,"Broadway",24) OpenWindow(10,0,0,400,80,"Capture Web",#PB_Window_SystemMenu |#PB_Window_ScreenCentered) StickyWindow(10,1) StringGadget(20,10,10,380,24,"") ButtonGadget(30,10,50,60,24,"Capture") TextGadget(40,140,50,80,40,"") SetGadgetFont(40,0) SetGadgetColor(40,#PB_Gadget_FrontColor,#Red) Repeat Select WaitWindowEvent() Case #PB_Event_CloseWindow Quit = 1 Case #PB_Event_Gadget Select EventGadget() Case 30 SetGadgetText(40,"") sURL.s = GetGadgetText(20) If sURL.s Snapshot() EndIf SetGadgetText(20,"") SetGadgetText(40,"FINISHED") EndSelect EndSelect Until Quit = 1 End End DataSection IID_IHTMLDocument2: ;332C4425-26CB-11D0-B483-00C04FD90119 Data.i $332C4425 Data.w $26CB, $11D0 Data.b $B4, $83, $00, $C0, $4F, $D9, $01, $19 IID_IHTMLDocument3: ;3050F485-98B5-11CF-BB82-00AA00BDCE0B Data.i $3050F485 Data.w $98B5, $11CF Data.b $BB, $82, $00, $AA, $00, $BD, $CE, $0B IID_IHTMLElement2: ;3050f434-98b5-11cf-bb82-00aa00bdce0b Data.i $3050F434 Data.w $98B5, $11CF Data.b $BB, $82, $00, $AA, $00, $BD, $CE, $0B IID_IViewObject2: ;00000127-0000-0000-c000-000000000046 Data.i $00000127 Data.w $0000, $0000 Data.b $C0, $00, $00, $00, $00, $00, $00, $46 EndDataSection
Code: Select all
UsePNGImageEncoder()
Global sURL.s,imgn
Enumeration
  #WinSnapShot
  #WebSnapShot
EndEnumeration
  #DVASPECT_CONTENT  = 1
  #DVASPECT_THUMBNAIL = 2
  #DVASPECT_ICON = 4
  #DVASPECT_DOCPRINT = 8
  
Procedure WindowProc(hWnd,uMsg,wParam,lParam)
  Result = #PB_ProcessPureBasicEvents
  Select uMsg
           
    Case #WM_NCACTIVATE
            Result = 1
  EndSelect
  ProcedureReturn Result
EndProcedure
  
Procedure.s EnumChildProc(hwnd, lParam)
  Protected Classname$ = Space(#MAX_PATH)
  Protected URL$ = Space(#MAX_PATH)
    GetClassName_(hwnd, @Classname$, #MAX_PATH-1)
    If ClassName$ = "Edit"
      SendMessage_(hwnd, #WM_GETTEXT, #MAX_PATH, @URL$)
      sURL.s = URL$
    EndIf 
  ProcedureReturn sURL.s
EndProcedure
Procedure CaptureWebPage(URL$, WBWidth.i, WBHeight.i, Filename.s)
  Define.IWebBrowser2   m_pWebBrowser
  Define.IHTMLDocument2 pDocument
  Define.IHTMLDocument3 pDocument3
  Define.IHTMLElement   pElement
  Define.IHTMLElement2  pElement2
  Define.iDispatch      pDispatch
  Define.IViewObject2   pViewObject
  Define.i bodyHeight
  Define.i bodyWidth
  Define.i rootHeight
  Define.i rootWidth
  Define.RECT rcBounds
  Define.i bolFlag
  Define.i IsBusy
  Define.i hr
  bolFlag = #False
  If OpenWindow(#WinSnapShot, 0, 0, 0, 0, "", #PB_Window_Invisible | #PB_Window_BorderLess)
      WebGadget(#WebSnapShot, 0, 0, 0, 0, URL$)
  
      Repeat
        If GetGadgetAttribute(#WebSnapShot, #PB_Web_Busy) = 0
          Break
        EndIf
        While WindowEvent(): Delay(1) : Wend
      ForEver
      m_pWebBrowser = GetWindowLongPtr_(GadgetID(#WebSnapShot), #GWL_USERDATA)
      m_pWebBrowser\put_Silent(#True)
         hr = m_pWebBrowser\get_document(@pDispatch)
      If hr = #S_OK
        If pDispatch
             hr = pDispatch\QueryInterface(?IID_IHTMLDocument2, @pDocument)
          If hr = #S_OK
            If pDocument
                 hr = pDocument\get_body(@pElement)
              If hr = #S_OK
                If pElement
                     hr = pElement\QueryInterface(?IID_IHTMLElement2, @pElement2)
                  If hr = #S_OK
                    If pElement2
                         hr = pElement2\get_scrollHeight(@bodyHeight)
                      If hr = #S_OK
                          ;Debug "bodyHeight: " + Str(bodyHeight)
                           hr = pElement2\get_scrollWidth(@bodyWidth)
                        If hr = #S_OK
                            ;Debug "bodyWidth: " + Str(bodyWidth)
                             hr = pDispatch\QueryInterface(?IID_IHTMLDocument3, @pDocument3)
                          If hr = #S_OK
                            If pDocument3
                                 hr = pDocument3\get_documentElement(@pElement)
                              If hr <> #S_OK : ProcedureReturn #False : EndIf
                                 hr = pElement\QueryInterface(?IID_IHTMLElement2, @pElement2)
                              If hr <> #S_OK : ProcedureReturn #False : EndIf
                                 hr = pElement2\get_scrollHeight(@rootHeight)
                              If hr <> #S_OK : ProcedureReturn #False : EndIf
                                ;Debug "rootHeight: " + Str(rootHeight)
                                 hr = pElement2\get_scrollWidth(@rootWidth)
                              If hr <> #S_OK : ProcedureReturn #False : EndIf
                                 ;Debug "rootWidth: " + Str(rootWidth)
                              Define.i width
                              Define.i height
                                                         width = bodyWidth
                              If rootWidth > bodyWidth : width = rootWidth : EndIf
                                                           height = bodyHeight
                              If rootHeight > bodyHeight : height = rootHeight : EndIf
                              width + 22
                              ResizeGadget(#WebSnapShot, 0, 0, width, height)
                              hr = m_pWebBrowser\QueryInterface(?IID_IViewObject2, @pViewObject)
                              If hr = #S_OK
                                If pViewObject
                                  Define.i hdcMain
                                     hdcMain = GetDC_(0)
                                  If hdcMain
                                    Define.i hdcMem
                                       hdcMem  = CreateCompatibleDC_(hdcMain)
                                    If hdcMem
                                      Define.i hBitmap
                                         hBitmap = CreateCompatibleBitmap_(hdcMain, width, height)
                                      If hBitmap
                                        Define.i oldImage
                                        oldImage = SelectObject_(hdcMem, hBitmap)
                                        rcBounds\top = 0
                                        rcBounds\left = 0
                                        rcBounds\right = width
                                        rcBounds\bottom = height
                                        pViewObject\Draw(#DVASPECT_CONTENT, -1, 0, 0, hdcMain, hdcMem, rcBounds, 0, 0, 0)
                                        Define.i Image
                                           Image = CreateImage(#PB_Any, width, height)
                                        If Image
                                          Define.i img_hDC
                                               img_hDC = StartDrawing(ImageOutput(Image))
                                            If img_hDC
                                              BitBlt_(img_hDC, 0, 0, width, height, hdcMem, 0, 0, #SRCCOPY)
                                            StopDrawing()
                                            SaveImage(Image,Filename,#PB_ImagePlugin_PNG)
                                            bolFlag = #True
                                          EndIf ; img_hDC
                                          FreeImage(Image)
                                        EndIf ; Image
                                        SelectObject_(hdcMem, oldImage)
                                      EndIf ; hBitmap
                                      DeleteDC_(hdcMem)
                                    EndIf ; hdcMem
                                    ReleaseDC_(0, hdcMain)
                                  EndIf ; hdcMain
                                  pViewObject\Release()
                                EndIf ; pViewObject
                              EndIf; HR
                              pDocument3\Release()
                            EndIf ; pDocument3
                          EndIf ; HR
                        EndIf ; HR
                      EndIf ; HR
                      pElement2\Release()
                    EndIf ; pElement2
                  EndIf ; HR
                  pElement\Release()
                EndIf ; pElement
              EndIf ; HR
              pDocument\Release()
            EndIf ; pDocument
          EndIf ; HR
          pDispatch\Release()
        EndIf ; pDispatch
      EndIf ; HR
      CloseWindow(#WinSnapShot)
  EndIf
  ProcedureReturn bolFlag
EndProcedure
Procedure Snapshot()
  Define sFileOut.s
  Define sNow.s
  ExamineDesktops()
   sFileOut = GetHomeDirectory()+"web_image_"+Str(imgn)+".png"
   imgn+1
  If CaptureWebPage(sURL, DesktopWidth(0), DesktopHeight(0), sFileOut)
  Else
          MessageRequester("Web Page", "Capture Failed")
  EndIf
EndProcedure
LoadFont(0,"Georgia",12,#PB_Font_Bold)
OpenWindow(10,0,0,300,40,"Capture Web",#PB_Window_SystemMenu |#PB_Window_ScreenCentered)
StickyWindow(10,1)
ButtonGadget(30,10,10,60,24,"Capture")
TextGadget(40,100,10,160,40,"")
SetGadgetFont(40,FontID(0))
SetGadgetColor(40,#PB_Gadget_FrontColor,#Red)
SetWindowCallback(@WindowProc())
Repeat
  Select WaitWindowEvent()
     
      Case #PB_Event_CloseWindow
            Quit = 1
     
      Case #PB_Event_Gadget
          Select EventGadget()
           Case 30            
                 hwndParent = FindWindow_("IEFrame", 0)
                 EnumChildWindows_(hwndParent, @EnumChildProc(), 0)
                If sURL.s
                    SetGadgetText(40,"Capturing...")
                    Snapshot()
                    SetGadgetText(40,"FINISHED")
                Else
                    MessageRequester("Error..","No URL to copy,please try again",#PB_MessageRequester_Ok|#MB_ICONERROR|#MB_SYSTEMMODAL)
                    End
                EndIf
                
          EndSelect         
           
  EndSelect
Until Quit = 1
End
End
DataSection
  IID_IHTMLDocument2:
  ;332C4425-26CB-11D0-B483-00C04FD90119
  Data.i $332C4425
  Data.w $26CB, $11D0
  Data.b $B4, $83, $00, $C0, $4F, $D9, $01, $19
  IID_IHTMLDocument3:
  ;3050F485-98B5-11CF-BB82-00AA00BDCE0B
  Data.i $3050F485
  Data.w $98B5, $11CF
  Data.b $BB, $82, $00, $AA, $00, $BD, $CE, $0B
  IID_IHTMLElement2:
  ;3050f434-98b5-11cf-bb82-00aa00bdce0b
  Data.i $3050F434
  Data.w $98B5, $11CF
  Data.b $BB, $82, $00, $AA, $00, $BD, $CE, $0B
  IID_IViewObject2:
  ;00000127-0000-0000-c000-000000000046
  Data.i $00000127
  Data.w $0000, $0000
  Data.b $C0, $00, $00, $00, $00, $00, $00, $46
EndDataSection
RASHAD wrote:Capture IE web pagesCode: Select all
UsePNGImageEncoder() Global sURL.s,imgn Enumeration #WinSnapShot #WebSnapShot EndEnumeration #DVASPECT_CONTENT = 1 #DVASPECT_THUMBNAIL = 2 #DVASPECT_ICON = 4 #DVASPECT_DOCPRINT = 8 Procedure WindowProc(hWnd,uMsg,wParam,lParam) Result = #PB_ProcessPureBasicEvents Select uMsg Case #WM_NCACTIVATE Result = 1 EndSelect ProcedureReturn Result EndProcedure Procedure.s EnumChildProc(hwnd, lParam) Protected Classname$ = Space(#MAX_PATH) Protected URL$ = Space(#MAX_PATH) GetClassName_(hwnd, @Classname$, #MAX_PATH-1) If ClassName$ = "Edit" SendMessage_(hwnd, #WM_GETTEXT, #MAX_PATH, @URL$) sURL.s = URL$ EndIf ProcedureReturn sURL.s EndProcedure Procedure CaptureWebPage(URL$, WBWidth.i, WBHeight.i, Filename.s) Define.IWebBrowser2 m_pWebBrowser Define.IHTMLDocument2 pDocument Define.IHTMLDocument3 pDocument3 Define.IHTMLElement pElement Define.IHTMLElement2 pElement2 Define.iDispatch pDispatch Define.IViewObject2 pViewObject Define.i bodyHeight Define.i bodyWidth Define.i rootHeight Define.i rootWidth Define.RECT rcBounds Define.i bolFlag Define.i IsBusy Define.i hr bolFlag = #False If OpenWindow(#WinSnapShot, 0, 0, 0, 0, "", #PB_Window_Invisible | #PB_Window_BorderLess) WebGadget(#WebSnapShot, 0, 0, 0, 0, URL$) Repeat If GetGadgetAttribute(#WebSnapShot, #PB_Web_Busy) = 0 Break EndIf While WindowEvent(): Delay(1) : Wend ForEver m_pWebBrowser = GetWindowLongPtr_(GadgetID(#WebSnapShot), #GWL_USERDATA) m_pWebBrowser\put_Silent(#True) hr = m_pWebBrowser\get_document(@pDispatch) If hr = #S_OK If pDispatch hr = pDispatch\QueryInterface(?IID_IHTMLDocument2, @pDocument) If hr = #S_OK If pDocument hr = pDocument\get_body(@pElement) If hr = #S_OK If pElement hr = pElement\QueryInterface(?IID_IHTMLElement2, @pElement2) If hr = #S_OK If pElement2 hr = pElement2\get_scrollHeight(@bodyHeight) If hr = #S_OK ;Debug "bodyHeight: " + Str(bodyHeight) hr = pElement2\get_scrollWidth(@bodyWidth) If hr = #S_OK ;Debug "bodyWidth: " + Str(bodyWidth) hr = pDispatch\QueryInterface(?IID_IHTMLDocument3, @pDocument3) If hr = #S_OK If pDocument3 hr = pDocument3\get_documentElement(@pElement) If hr <> #S_OK : ProcedureReturn #False : EndIf hr = pElement\QueryInterface(?IID_IHTMLElement2, @pElement2) If hr <> #S_OK : ProcedureReturn #False : EndIf hr = pElement2\get_scrollHeight(@rootHeight) If hr <> #S_OK : ProcedureReturn #False : EndIf ;Debug "rootHeight: " + Str(rootHeight) hr = pElement2\get_scrollWidth(@rootWidth) If hr <> #S_OK : ProcedureReturn #False : EndIf ;Debug "rootWidth: " + Str(rootWidth) Define.i width Define.i height width = bodyWidth If rootWidth > bodyWidth : width = rootWidth : EndIf height = bodyHeight If rootHeight > bodyHeight : height = rootHeight : EndIf width + 22 ResizeGadget(#WebSnapShot, 0, 0, width, height) hr = m_pWebBrowser\QueryInterface(?IID_IViewObject2, @pViewObject) If hr = #S_OK If pViewObject Define.i hdcMain hdcMain = GetDC_(0) If hdcMain Define.i hdcMem hdcMem = CreateCompatibleDC_(hdcMain) If hdcMem Define.i hBitmap hBitmap = CreateCompatibleBitmap_(hdcMain, width, height) If hBitmap Define.i oldImage oldImage = SelectObject_(hdcMem, hBitmap) rcBounds\top = 0 rcBounds\left = 0 rcBounds\right = width rcBounds\bottom = height pViewObject\Draw(#DVASPECT_CONTENT, -1, 0, 0, hdcMain, hdcMem, rcBounds, 0, 0, 0) Define.i Image Image = CreateImage(#PB_Any, width, height) If Image Define.i img_hDC img_hDC = StartDrawing(ImageOutput(Image)) If img_hDC BitBlt_(img_hDC, 0, 0, width, height, hdcMem, 0, 0, #SRCCOPY) StopDrawing() SaveImage(Image,Filename,#PB_ImagePlugin_PNG) bolFlag = #True EndIf ; img_hDC FreeImage(Image) EndIf ; Image SelectObject_(hdcMem, oldImage) EndIf ; hBitmap DeleteDC_(hdcMem) EndIf ; hdcMem ReleaseDC_(0, hdcMain) EndIf ; hdcMain pViewObject\Release() EndIf ; pViewObject EndIf; HR pDocument3\Release() EndIf ; pDocument3 EndIf ; HR EndIf ; HR EndIf ; HR pElement2\Release() EndIf ; pElement2 EndIf ; HR pElement\Release() EndIf ; pElement EndIf ; HR pDocument\Release() EndIf ; pDocument EndIf ; HR pDispatch\Release() EndIf ; pDispatch EndIf ; HR CloseWindow(#WinSnapShot) EndIf ProcedureReturn bolFlag EndProcedure Procedure Snapshot() Define sFileOut.s Define sNow.s ExamineDesktops() sFileOut = GetHomeDirectory()+"web_image_"+Str(imgn)+".png" imgn+1 If CaptureWebPage(sURL, DesktopWidth(0), DesktopHeight(0), sFileOut) Else MessageRequester("Web Page", "Capture Failed") EndIf EndProcedure LoadFont(0,"Georgia",12,#PB_Font_Bold) OpenWindow(10,0,0,300,40,"Capture Web",#PB_Window_SystemMenu |#PB_Window_ScreenCentered) StickyWindow(10,1) ButtonGadget(30,10,10,60,24,"Capture") TextGadget(40,100,10,160,40,"") SetGadgetFont(40,FontID(0)) SetGadgetColor(40,#PB_Gadget_FrontColor,#Red) SetWindowCallback(@WindowProc()) Repeat Select WaitWindowEvent() Case #PB_Event_CloseWindow Quit = 1 Case #PB_Event_Gadget Select EventGadget() Case 30 hwndParent = FindWindow_("IEFrame", 0) EnumChildWindows_(hwndParent, @EnumChildProc(), 0) If sURL.s SetGadgetText(40,"Capturing...") Snapshot() SetGadgetText(40,"FINISHED") Else MessageRequester("Error..","No URL to copy,please try again",#PB_MessageRequester_Ok|#MB_ICONERROR|#MB_SYSTEMMODAL) End EndIf EndSelect EndSelect Until Quit = 1 End End DataSection IID_IHTMLDocument2: ;332C4425-26CB-11D0-B483-00C04FD90119 Data.i $332C4425 Data.w $26CB, $11D0 Data.b $B4, $83, $00, $C0, $4F, $D9, $01, $19 IID_IHTMLDocument3: ;3050F485-98B5-11CF-BB82-00AA00BDCE0B Data.i $3050F485 Data.w $98B5, $11CF Data.b $BB, $82, $00, $AA, $00, $BD, $CE, $0B IID_IHTMLElement2: ;3050f434-98b5-11cf-bb82-00aa00bdce0b Data.i $3050F434 Data.w $98B5, $11CF Data.b $BB, $82, $00, $AA, $00, $BD, $CE, $0B IID_IViewObject2: ;00000127-0000-0000-c000-000000000046 Data.i $00000127 Data.w $0000, $0000 Data.b $C0, $00, $00, $00, $00, $00, $00, $46 EndDataSection

Code: Select all
iCycle = (iImgH) / 58 - 1Code: Select all
UsePNGImageEncoder()
UsePNGImageDecoder()
EnableExplicit
Enumeration
#WinMsg
#TxtWinMsg
#WholePage
EndEnumeration
Global ighCrossCursor.i = LoadCursor_(#Null, #IDC_CROSS)
SetSystemCursor_(ighCrossCursor, #OCR_NORMAL)
Global igLEFTBTN.i = #VK_LBUTTON, igRIGHTBTN.i = #VK_RBUTTON
If(GetSystemMetrics_(#SM_SWAPBUTTON) = #True)
         igLEFTBTN = #VK_RBUTTON
        igRIGHTBTN = #VK_LBUTTON
EndIf
Global MouseUpL.INPUT
       MouseUpL\type = #INPUT_MOUSE
       MouseUpL\mi\dx = 0
       MouseUpL\mi\dy = 0
       MouseUpL\mi\mouseData = 0
       MouseUpL\mi\dwFlags = #MOUSEEVENTF_LEFTUP
       MouseUpL\mi\time = 0
       MouseUpL\mi\dwExtraInfo = 0
Global gPt1.POINT, gPt2.POINT
Procedure LeftButtonDown()
;#------------------------
               If(GetAsyncKeyState_(igLEFTBTN) & 32768)
                        ProcedureReturn #True
               Else
                        ProcedureReturn #False
               EndIf
EndProcedure
Procedure WinMsg(sMsg.s)
;#----------------------
        If OpenWindow(#WinMsg, 0, 0, 300, 30, "", #PB_Window_BorderLess | #PB_Window_ScreenCentered)
                SetWindowColor(#WinMsg,RGB(255,255,190)) ;Pale Yellow
                    TextGadget(#TxtWinMsg, 5, 5, 290, 20, "", #PB_Text_Center)
                SetGadgetColor(#TxtWinMsg, #PB_Gadget_BackColor, RGB(255,255,190))
                SetGadgetColor(#TxtWinMsg, #PB_Gadget_FrontColor, RGB(0,0,0))
                 SetGadgetText(#TxtWinMsg, sMsg)
                  StickyWindow(#WinMsg, #True)
        EndIf
EndProcedure
Procedure Pick2Pts(iImgID.i)
;#--------------------------
; Pick 2 points to define area of web page inside Browser Window
Protected iPick1.i = #False
Protected iPick2.i = #False
Protected iEvent.i
Protected sMsg1.s, sMsg2.s
   If LeftButtonDown() : SendInput_(1,@MouseUpL,SizeOf(INPUT)) : EndIf
   WinMsg("Pick top-left corner of web page")
   Repeat
             If(GetAsyncKeyState_(#VK_ESCAPE) & 32768)
                    Goto Pick2PtsQuit
             ElseIf(GetAsyncKeyState_(igLEFTBTN) & 32768) ;button is down
                     GetCursorPos_(gPt1)
                     iPick1 = #True
                     Break
             EndIf
   Until iPick1 = #True
   CloseWindow(#WinMsg)
   If LeftButtonDown() : SendInput_(1,@MouseUpL,SizeOf(INPUT)) : EndIf
   WinMsg("Pick bottom-right corner of web page")
   Repeat
             If(GetAsyncKeyState_(#VK_ESCAPE) & 32768)
                    Goto Pick2PtsQuit
             ElseIf(GetAsyncKeyState_(igLEFTBTN) & 32768) ;button is down
                     GetCursorPos_(gPt2)
                     iPick2 = #True
                     Break
             EndIf
   Until iPick2 = #True
   Pick2PtsQuit:
   CloseWindow(#WinMsg)
EndProcedure
Procedure ScrollDown()
;#--------------------
Protected In.INPUT
          In\type   = #INPUT_KEYBOARD
          In\ki\wVk = #VK_DOWN
              SendInput_(1,@In,SizeOf(INPUT))
              In\ki\dwFlags  = #KEYEVENTF_KEYUP
              SendInput_(1,@In,SizeOf(INPUT))
EndProcedure
Procedure ScrollUp()
;#------------------
Protected In.INPUT
          In\type   = #INPUT_KEYBOARD
          In\ki\wVk = #VK_UP
              SendInput_(1,@In,SizeOf(INPUT))
              In\ki\dwFlags  = #KEYEVENTF_KEYUP
              SendInput_(1,@In,SizeOf(INPUT))
EndProcedure
Procedure GetHandle(sWtxt.s)
;#--------------------------
Protected    hWnd.i = GetWindow_(GetDesktopWindow_(), #GW_CHILD)
Protected hwndFin.i
Protected sWinTxt.s
              Repeat
                    sWinTxt = Space(#MAX_PATH)
                    GetWindowText_(hWnd, @sWinTxt, #MAX_PATH)
                    If( (FindString(LCase(sWinTxt), LCase(sWtxt), 1) <> 0) And (IsWindowVisible_(hWnd) = 1) )
                            hwndFin = hWnd
                    Else
                               hWnd = GetWindow_(hWnd, #GW_HWNDNEXT)
                    EndIf
              Until hWnd = 0 Or hwndFin <> 0
              ProcedureReturn(hwndFin)
EndProcedure
Procedure CaptureWebPage()
;#------------------------
Protected iX.i = 0, iY.i = 0
Protected iCnt.i, iBrowser.i, iKey.i, iCycle.i, hWnd.i, iTotal.i = 10
Protected iImgW.i, iImgH.i, iIconic.i = #False
Protected WinRect.RECT
Protected sBrowser.s
Protected        dm.DEVMODE ;structure for CreateDC()
Protected screenDC.i, trgDC.i, hBmp.i
              For iBrowser = 1 To 4
                    Read.s sBrowser
                    hWnd = GetHandle(sBrowser)
                    If(hWnd <> 0)
                           Break
                    EndIf
              Next iBrowser
              If hWnd
                      If IsIconic_(hWnd)
                             ShowWindow_(hWnd, #SW_RESTORE)
                             iIconic = #True
                      EndIf
                      SetForegroundWindow_(hWnd)
                      Pick2Pts(hWnd)
                       iImgW = (gPt2\x - gPt1\x)
                       iImgH = (gPt2\y - gPt1\y)
                      iCycle = (iImgH) / 58 - 1
                      SetActiveWindow_(hWnd)
                      If CreateImage(#WholePage, iImgW, (iImgH  * iTotal), 24, RGB(255,255,255))
                               For iCnt = 1 To iTotal
                                    screenDC = CreateDC_("DISPLAY", "", "", dm) ;Initialise dm
                                       trgDC = CreateCompatibleDC_(screenDC)
                                        hBmp = 0
                                         If StartDrawing(ImageOutput(#WholePage))
                                                 hBmp = CreateCompatibleBitmap_(screenDC, iImgW, iImgH)
                                                 SelectObject_(trgDC, hBmp)
                                                       BitBlt_(trgDC, 0, 0, iImgW, iImgH, screenDC, gPt1\x, gPt1\y, #SRCCOPY)
                                                         DrawImage(hBmp, iX, iY)
                                                       StopDrawing()
                                                             iY = iY + iImgH
                                                             Delay(100)
                                                 For iKey = 1 To iCycle
                                                       ScrollDown()
                                                 Next
                                         EndIf
                                    ;Clean up
                                     DeleteDC_(trgDC)
                                    ReleaseDC_(hBmp, screenDC)
                               Next iCnt
                                    Delay(100)
                                SaveImage(#WholePage,"C:\WebPageImage.png", #PB_ImagePlugin_PNG, 10, 24)
                                    Delay(100)
                               RunProgram("C:\WebPageImage.png")
                      EndIf
                      For iKey = 1 To iCycle * 10
                            ScrollUp()
                      Next
                      If iIconic = #True
                              ShowWindow_(hWnd, #SW_MINIMIZE)
                      EndIf
               EndIf
EndProcedure
CaptureWebPage()
;Reset Cursor Pointers Set
SystemParametersInfo_(#SPI_SETCURSORS,0,#Null,#Null)
End
DataSection
   Data.s "Explorer","Fire","Opera","Chrome"
EndDataSection