Code: Select all
UsePNGImageEncoder()
Enumeration 1
#OLECMDID_OPEN
#OLECMDID_NEW
#OLECMDID_SAVE
#OLECMDID_SAVEAS
#OLECMDID_SAVECOPYAS
#OLECMDID_PRINT
#OLECMDID_PRINTPREVIEW
#OLECMDID_PAGESETUP
#OLECMDID_SPELL
#OLECMDID_PROPERTIES
#OLECMDID_CUT
#OLECMDID_COPY
#OLECMDID_PASTE
#OLECMDID_PASTESPECIAL
#OLECMDID_UNDO
#OLECMDID_REDO
#OLECMDID_SELECTALL
#OLECMDID_CLEARSELECTION
#OLECMDID_ZOOM
#OLECMDID_GETZOOMRANGE
#OLECMDID_UPDATECOMMANDS
#OLECMDID_REFRESH
#OLECMDID_STOP
#OLECMDID_HIDETOOLBARS
#OLECMDID_SETPROGRESSMAX
#OLECMDID_SETPROGRESSPOS
#OLECMDID_SETPROGRESSTEXT
#OLECMDID_SETTITLE
#OLECMDID_SETDOWNLOADSTATE
#OLECMDID_STOPDOWNLOAD
#OLECMDID_ONTOOLBARACTIVATED
#OLECMDID_FIND
#OLECMDID_DELETE
#OLECMDID_HTTPEQUIV
#OLECMDID_HTTPEQUIV_DONE
#OLECMDID_ENABLE_INTERACTION
#OLECMDID_ONUNLOAD
#OLECMDID_PROPERTYBAG2
#OLECMDID_PREREFRESH
#OLECMDID_SHOWSCRIPTERROR
#OLECMDID_SHOWMESSAGE
#OLECMDID_SHOWFIND
#OLECMDID_SHOWPAGESETUP
#OLECMDID_SHOWPRINT
#OLECMDID_CLOSE
#OLECMDID_ALLOWUILESSSAVEAS
#OLECMDID_DONTDOWNLOADCSS
#OLECMDID_UPDATEPAGESTATUS
#OLECMDID_PRINT2
#OLECMDID_PRINTPREVIEW2
#OLECMDID_SETPRINTTEMPLATE
#OLECMDID_GETPRINTTEMPLATE
EndEnumeration
Enumeration 0
#OLECMDEXECOPT_DODEFAULT
#OLECMDEXECOPT_PROMPTUSER
#OLECMDEXECOPT_DONTPROMPTUSER
#OLECMDEXECOPT_SHOWHELP
EndEnumeration
Enumeration
#VT_EMPTY = 0
#VT_NULL = 1
#VT_I2 = 2
#VT_I4 = 3
#VT_R4 = 4
#VT_R8 = 5
#VT_CY = 6
#VT_DATE = 7
#VT_BSTR = 8
#VT_DISPATCH = 9
#VT_ERROR = 10
#VT_BOOL = 11
#VT_VARIANT = 12
#VT_UNKNOWN = 13
#VT_DECIMAL = 14
#VT_I1 = 16
#VT_UI1 = 17
#VT_UI2 = 18
#VT_UI4 = 19
#VT_I8 = 20
#VT_UI8 = 21
#VT_INT = 22
#VT_UINT = 23
#VT_VOID = 24
#VT_HRESULT = 25
#VT_PTR = 26
#VT_SAFEARRAY = 27
#VT_CARRAY = 28
#VT_USERDEFINED = 29
#VT_LPSTR = 30
#VT_LPWSTR = 31
#VT_RECORD = 36
#VT_FILETIME = 64
#VT_BLOB = 65
#VT_STREAM = 66
#VT_STORAGE = 67
#VT_STREAMED_OBJECT = 68
#VT_STORED_OBJECT = 69
#VT_BLOB_OBJECT = 70
#VT_CF = 71
#VT_CLSID = 72
#VT_BSTR_BLOB = $0fff
#VT_VECTOR = $1000
#VT_ARRAY = $2000
#VT_BYREF = $4000
#VT_RESERVED = $8000
#VT_ILLEGAL = $ffff
#VT_ILLEGALMASKED = $0fff
#VT_TYPEMASK = $0fff
EndEnumeration
#BEFORENAVIGATE = 250
#DOCUMENTCOMPLETE = 259
Structure DispatchFunctions
QueryInterface.l
AddRef.l
Release.l
GetTypeInfoCount.l
GetTypeInfo.l
GetIDsOfNames.l
Invoke.l
EndStructure
Structure DispatchObject
*IDispatch.IDispatch
ObjectCount.l
GadgetID.l
EndStructure
Global Depth
Global NewList dispatchObject.DispatchObject()
Procedure DocumentComplete(*THIS.DispatchObject,*pDisp.IDispatch, *URL.Variant)
depth = depth + PeekL(*Url\bstrval-4)
EndProcedure
Procedure.l AddRef(*THIS.DispatchObject)
*THIS\ObjectCount + 1
ProcedureReturn *THIS\ObjectCount
EndProcedure
Procedure.l QueryInterface(*THIS.DispatchObject, *iid.GUID, *Object.LONG)
If CompareMemory(*iid, ?IID_IUnknown, SizeOf(GUID)) Or CompareMemory(*iid, ?IID_IDispatch, SizeOf(GUID))
*Object\l = *THIS
AddRef(*THIS.DispatchObject)
ProcedureReturn #S_OK
Else
*Object\l = 0
ProcedureReturn #E_NOINTERFACE
EndIf
EndProcedure
Procedure.l Release(*THIS.DispatchObject)
*THIS\ObjectCount - 1
ProcedureReturn *THIS\ObjectCount
EndProcedure
Procedure GetTypeInfoCount(*THIS.DispatchObject, pctinfo)
ProcedureReturn #E_NOTIMPL
EndProcedure
Procedure GetTypeInfo(*THIS.DispatchObject, iTInfo, lcid, ppTInfo )
ProcedureReturn #E_NOTIMPL
EndProcedure
Procedure GetIDsOfNames(*THIS.DispatchObject, riid, rgszNames, cNames, lcid, rgDispId) : EndProcedure
Procedure Invoke(*THIS.DispatchObject, dispIdMember, riid, lcid, wFlags, *pDispParams.DISPPARAMS, pVarResult, pExcepInfo, puArgErr)
Select dispIDMember
Case #BEFORENAVIGATE
*params1.VARIANT = *pDispParams\rgvarg +(SizeOf(VARIANT)*6)
*params2.VARIANT = *pDispParams\rgvarg +(SizeOf(VARIANT)*5)
*params3.VARIANT = *pDispParams\rgvarg +(SizeOf(VARIANT)*4)
*params4.VARIANT = *pDispParams\rgvarg +(SizeOf(VARIANT)*3)
*params5.VARIANT = *pDispParams\rgvarg +(SizeOf(VARIANT)*2)
*params6.VARIANT = *pDispParams\rgvarg +(SizeOf(VARIANT)*1)
*params7.VARIANT = *pDispParams\rgvarg +(SizeOf(VARIANT)*0)
Case #DOCUMENTCOMPLETE
*params1.VARIANT = *pDispParams\rgvarg +(SizeOf(VARIANT)*1)
*params2.VARIANT = *pDispParams\rgvarg +(SizeOf(VARIANT)*0)
DocumentComplete(*THIS,*params1\pDispVal, *params2\pvarVal)
EndSelect
EndProcedure
Procedure CaptureImage(iX.i, iY.i, iW.i, iH.i, iGdt)
;---------------------------------------------------
Define hRgn = CreateRectRgn_(iX,iY,iW,iH)
Define sImgName.s = "F:\RASHAD_Test.png"
Define hImage.i = CreateImage(0,iW,iH)
;Define DC.i = GetDC_(GadgetID(iGdt))
Define DCex.i = GetDCEx_(GadgetID(iGdt),hRgn,#DCX_CACHE)
Define hdc.i = StartDrawing(ImageOutput(0))
BitBlt_(hdc,0,0,iW,iH,DCex,iX,iY,#SRCCOPY)
StopDrawing()
If IsImage(0)
SaveImage(0, sImgName, #PB_ImagePlugin_PNG, 24)
FreeImage(0)
EndIf
DeleteObject_(hdc)
DeleteObject_(DCex)
EndProcedure
Procedure WndProc(hwnd, uMsg, wParam, lParam)
result = #PB_ProcessPureBasicEvents
Select uMsg
Case #WM_NOTIFY
Case #WM_SIZE
ResizeGadget(2,10,WindowHeight(0)- 55,80,24)
ResizeGadget(3,100,WindowHeight(0)- 55,80,24)
ResizeGadget(4,200,WindowHeight(0)- 55,80,24)
ResizeGadget(0,10,10,WindowWidth(0)-20,WindowHeight(0)- 72)
EndSelect
ProcedureReturn result
EndProcedure
OpenWindow(0,0,0,1020,650,"Auto WebGadget",#PB_Window_SystemMenu | #PB_Window_ScreenCentered|#PB_Window_SizeGadget)
CreateStatusBar(0, WindowID(0))
AddStatusBarField(100)
AddStatusBarField(300)
AddStatusBarField(300)
ScrollAreaGadget(0,10,10,1000,578,10000,10000,#PB_ScrollArea_Flat)
;WebGadget(1,0,0,1000,620, "http://www.purebasic.com")
;WebGadget(1,0,0,1000,620, "http://www.google.com")
WebGadget(1,0,0,1000,618, "http://www.qinbiying.co.uk")
CloseGadgetList()
ButtonGadget(2,10,595,80,24,"Save As MHT")
ButtonGadget(3,100,595,80,24,"Adjust")
ButtonGadget(4,200,595,80,24,"Save As BMP")
AddElement(DispatchObject())
DispatchObject()\IDispatch = ?dispatchFunctions
DispatchObject()\GadgetID=0
webBrowser.IWebBrowser2 = GetWindowLongPtr_(GadgetID(1), #GWL_USERDATA)
webBrowser\QueryInterface(?IID_IConnectionPointContainer, @connectionPointContainer.IConnectionPointContainer)
connectionPointContainer\findconnectionpoint(?IID_DWebBrowserEvents2, @connectionPoint.IConnectionPoint)
connectionPoint\Advise(DispatchObject(), @Cookie)
connectionPoint\release()
connectionPointContainer\release()
SetWindowCallback(@WndProc())
Repeat
If GetGadgetAttribute(1, #PB_Web_Busy) = 1 And Flag = 0
Status$ = "Busy"
StatusBarText(0, 0, Status$,#PB_StatusBar_Center )
DisableGadget(2,1)
DisableGadget(3,1)
DisableGadget(4,1)
ElseIf GetGadgetAttribute(1, #PB_Web_Busy) = 0 And Flag = 0
ResizeGadget(1,0,0,#PB_Ignore,depth*2+800)
Status$ = "Finished"
StatusBarText(0, 0 , Status$,#PB_StatusBar_Center )
StatusBarText(0, 1 , "WebPage Width : " +Str(GadgetWidth(1)))
StatusBarText(0, 2 , "WebPage Height : " +Str(GadgetHeight(1)+800))
DisableGadget(2,0)
DisableGadget(3,0)
Flag = 1
EndIf
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
Quit = 1
Case #PB_Event_Gadget
Select EventGadget()
Case 2
filename$ = ""
filename_Unicode = AllocateMemory(Len(filename$)*2+2)
MultiByteToWideChar_(#CP_ACP, 0, @filename$, -1, filename_Unicode, Len(filename$)*2+2)
filename_BSTR = SysAllocString_(filename_Unicode)
VariantIn.VARIANT
VariantIn\vt = #VT_BSTR
VariantIn\bstrVal = filename_BSTR
If webBrowser\ExecWB(#OLECMDID_SAVEAS, #OLECMDEXECOPT_PROMPTUSER, @VariantIn, 0) = #S_OK
MessageRequester("","Saved successfully")
Else
MessageRequester("","could not save file")
EndIf
FreeMemory(filename_Unicode)
SysFreeString_(filename_BSTR)
; Case 3
; ResizeWindow(0,0,0,1020,1100)
; ResizeGadget(2,10,1050,80,24)
; ResizeGadget(3,100,1050,80,24)
; ResizeGadget(4,200,1050,80,24)
; ResizeGadget(0,10,10,1000,1000)
; ResizeGadget(1,0,0,1000,1000)
; If webBrowser\ExecWB(#OLECMDID_ZOOM, #OLECMDEXECOPT_PROMPTUSER, 2, 0) = #S_OK
; MessageRequester("","Saved successfully")
; Else
; MessageRequester("","could not save file")
; EndIf
; DisableGadget(4,0)
;
; Case 3
; CaptureImage(0,0,1000,depth*2+800,1)
EndSelect
EndSelect
Until Quit = 1
End
DataSection
dispatchFunctions:
Data.l @QueryInterface(),@AddRef(),@Release(),@GetTypeInfoCount()
Data.l @GetTypeInfo(),@GetIDsOfNames(),@Invoke()
IID_IWebBrowser2:
Data.l $D30C1661
Data.w $CDAF, $11D0
Data.b $8A, $3E, $00, $C0, $4F, $C9, $E2, $6E
IID_IConnectionPointContainer:
Data.l $B196B284
Data.w $BAB4, $101A
Data.b $B6, $9C, $00, $AA, $00, $34, $1D, $07
IID_IDispatch:
Data.l $00020400
Data.w $0000, $0000
Data.b $C0, $00, $00, $00, $00, $00, $00, $46
IID_IUnknown:
Data.l $00000000
Data.w $0000, $0000
Data.b $C0, $00, $00, $00, $00, $00, $00, $46
IID_DWebBrowserEvents2:
Data.l $34A715A0
Data.w $6587, $11D0
Data.b $92, $4A, $00, $20, $AF, $C7, $AC, $4D
EndDataSection