- Open the requested HTML file as a string.
- Replace all internal occurrences of "href", "src" attributes with empty or null value.
- Replace all internal occurrences of "<link>", "<script>" tags with empty or null value.
-Save string as new temp HTML file.
-Open file in WebGadget.
I'm already working on this, but please report back if you get there first.
Code: Select all
;EnableExplicit
;------------------------------------------------------------------------------
;- * IDispatch implementation
;------------------------------------------------------------------------------
;- Constants
#DISPID_AMBIENT_DLCONTROL = -5512
#DLCTL_DLIMAGES = $00000010
#DLCTL_VIDEOS = $00000020
#DLCTL_BGSOUNDS = $00000040
#DLCTL_NO_SCRIPTS = $00000080
#DLCTL_NO_JAVA = $00000100
#DLCTL_NO_RUNACTIVEXCTLS = $00000200
#DLCTL_NO_DLACTIVEXCTLS = $00000400
#DLCTL_DOWNLOADONLY = $00000800
#DLCTL_NO_FRAMEDOWNLOAD = $00001000
#DLCTL_RESYNCHRONIZE = $00002000
#DLCTL_PRAGMA_NO_CACHE = $00004000
#DLCTL_NO_BEHAVIORS = $00008000
#DLCTL_NO_METACHARSET = $00010000
#DLCTL_URL_ENCODING_DISABLE_UTF8 = $00020000
#DLCTL_URL_ENCODING_ENABLE_UTF8 = $00040000
#DLCTL_FORCEOFFLINE = $10000000
#DLCTL_NO_CLIENTPULL = $20000000
#DLCTL_SILENT = $40000000
#DLCTL_OFFLINEIFNOTCONNECTED = $80000000
#DLCTL_OFFLINE = #DLCTL_OFFLINEIFNOTCONNECTED
;------------------------------------------------------------------------------
;- Structures
Structure IDispatch_Functions
QueryInterface.i
AddRef.i
Release.i
GetTypeInfoCount.i
GetTypeInfo.i
GetIDsOfNames.i
Invoke.i
EndStructure
Structure IDispatch_Object
*IDispatch.IDispatch
RefCount.l
EndStructure
Global NewList g_IDispatch_Objects.IDispatch_Object()
;------------------------------------------------------------------------------
;- IUnknown methods
Procedure IDispatch_QueryInterface(*THIS.IDispatch_Object, *iid.IID, *Object.INTEGER)
If *Object = 0
ProcedureReturn #E_INVALIDARG
ElseIf CompareMemory(*iid, ?IID_IUnknown, SizeOf(IID)) Or CompareMemory(*iid, ?IID_IDispatch, SizeOf(IID))
*Object\i = *THIS
*THIS\RefCount + 1
ProcedureReturn #S_OK
Else
*Object\i = 0
ProcedureReturn #E_NOINTERFACE
EndIf
EndProcedure
Procedure IDispatch_AddRef(*THIS.IDispatch_Object)
*THIS\RefCount + 1
ProcedureReturn *THIS\RefCount
EndProcedure
Procedure IDispatch_Release(*THIS.IDispatch_Object)
*THIS\RefCount - 1
If *THIS\RefCount <= 0
ChangeCurrentElement(g_IDispatch_Objects(), *THIS)
DeleteElement(g_IDispatch_Objects())
ProcedureReturn 0
Else
ProcedureReturn *THIS\RefCount
EndIf
EndProcedure
;------------------------------------------------------------------------------
;- IDispatch methods
Procedure IDispatch_GetTypeInfoCount(*THIS.IDispatch_Object, *pctinfo.INTEGER)
ProcedureReturn #E_NOTIMPL
EndProcedure
Procedure IDispatch_GetTypeInfo(*THIS.IDispatch_Object, iTInfo.l, lcid.l, *pptInfo.INTEGER)
ProcedureReturn #E_NOTIMPL
EndProcedure
Procedure IDispatch_GetIDsOfNames(*THIS.IDispatch_Object, *riid.IID, rgszNames.i, cNames.l, lcid.l, *rgDispID.INTEGER)
ProcedureReturn #E_NOTIMPL
EndProcedure
Procedure IDispatch_Invoke(*THIS.IDispatch_Object, dispIdMember.l, *riid.IID, lcid.l, wFlags.w, *pDispParams.DISPPARAMS, *pVarResult.Variant, pExcpInfo.i, puArgErr.i)
If dispIdMember = #DISPID_AMBIENT_DLCONTROL
*pVarResult\vt = #VT_I4
; *pVarResult\lVal = #DLCTL_NO_JAVA | #DLCTL_NO_DLACTIVEXCTLS | #DLCTL_NO_RUNACTIVEXCTLS | #DLCTL_SILENT
*pVarResult\lVal = #DLCTL_OFFLINEIFNOTCONNECTED | #DLCTL_FORCEOFFLINE | #DLCTL_NO_JAVA | #DLCTL_NO_SCRIPTS | #DLCTL_NO_DLACTIVEXCTLS | #DLCTL_NO_RUNACTIVEXCTLS | #DLCTL_SILENT
Debug "**** IDispatch::Invoke() #DISPID_AMBIENT_DLCONTROL"
Debug *pVarResult\lVal
Debug "****"
ProcedureReturn #S_OK
EndIf
ProcedureReturn #DISP_E_MEMBERNOTFOUND
EndProcedure
;------------------------------------------------------------------------------
;- * IOleClientSite implementation
;------------------------------------------------------------------------------
;- Structures
Structure IOleClientSite_Functions
QueryInterface.i
AddRef.i
Release.i
SaveObject.i
GetMoniker.i
GetContainer.i
ShowObject.i
OnShowWindow.i
RequestNewObjectLayout.i
EndStructure
Structure IOleClientSite_Object
*IOleClientSite.IOleClientSite
RefCount.l
EndStructure
Global NewList g_IOleClientSite_Objects.IOleClientSite_Object()
;------------------------------------------------------------------------------
;- IUnknown methods
Procedure IOleClientSite_QueryInterface(*THIS.IOleClientSite_Object, *iid.IID, *Object.INTEGER)
If *Object = 0
ProcedureReturn #E_INVALIDARG
ElseIf CompareMemory(*iid, ?IID_IUnknown, SizeOf(IID)) Or CompareMemory(*iid, ?IID_IOleClientSite, SizeOf(IID))
*Object\i = *THIS
*THIS\RefCount + 1
ProcedureReturn #S_OK
; return pointer to IDispatch object (IDispatch is queried by the webbrowser control on its initialization)
ElseIf CompareMemory(*iid, ?IID_IDispatch, SizeOf(IID))
*Object\i = @g_IDispatch_Objects()
ProcedureReturn #S_OK
Else
*Object\i = 0
ProcedureReturn #E_NOINTERFACE
EndIf
EndProcedure
Procedure IOleClientSite_AddRef(*THIS.IOleClientSite_Object)
*THIS\RefCount + 1
ProcedureReturn *THIS\RefCount
EndProcedure
Procedure IOleClientSite_Release(*THIS.IOleClientSite_Object)
*THIS\RefCount - 1
If *THIS\RefCount <= 0
ChangeCurrentElement(g_IOleClientSite_Objects(), *THIS)
DeleteElement(g_IOleClientSite_Objects())
ProcedureReturn 0
Else
ProcedureReturn *THIS\RefCount
EndIf
EndProcedure
;------------------------------------------------------------------------------
;- IOleClientSite methods
Procedure IOleClientSite_SaveObject(*THIS.IOleClientSite_Object)
ProcedureReturn #E_NOTIMPL
EndProcedure
Procedure IOleClientSite_GetMoniker(*THIS.IOleClientSite_Object, dwAssign.l, dwWhichMoniker.l, mk.i )
ProcedureReturn #E_NOTIMPL
EndProcedure
Procedure IOleClientSite_GetContainer(*THIS.IOleClientSite_Object, container.i)
ProcedureReturn #E_NOTIMPL
EndProcedure
Procedure IOleClientSite_ShowObject(*THIS.IOleClientSite_Object)
ProcedureReturn #E_NOTIMPL
EndProcedure
Procedure IOleClientSite_OnShowWindow(*THIS.IOleClientSite_Object, fShow.l)
ProcedureReturn #E_NOTIMPL
EndProcedure
Procedure IOleClientSite_RequestNewObjectLayout(*THIS.IOleClientSite_Object)
ProcedureReturn #E_NOTIMPL
EndProcedure
Procedure ResizeWebgadget(gd.i, x.l, y.l, width.l, height.l, redraw.b = #True)
Define.i hwGd
Define.IWebBrowser2 wb
Define.IOleObject oObj
Define.IOleInPlaceObject ipObj
Define.RECT rc
hwGd = GadgetID(gd)
wb = GetWindowLongPtr_(hwGd, #GWLP_USERDATA)
If wb
If wb\QueryInterface(?IID_IOleObject, @oObj) = #S_OK
If oObj\QueryInterface(?IID_IOleInPlaceObject, @ipObj) = #S_OK
;Use MoveWindow() or ResizeGadget()
MoveWindow_(hwGd, x, y, width, height, redraw)
;ResizeGadget(gd, x, y, width, height) maybe this calls SetObjectRects() again ?
GetClientRect_(hwGd, @rc)
ipObj\SetObjectRects(@rc, @rc)
ipObj\Release()
EndIf
oObj\Release()
EndIf
EndIf
EndProcedure
;------------------------------------------------------------------------------
;- * Main program
Enumeration
#Window_Main
EndEnumeration
Enumeration
#Button_Start
#Web_0
EndEnumeration
Define.IOleObject oleObject
Define.IOleControl oleControl
Define.i Event, WindowID, GadgetID, EventType
If OpenWindow(#Window_Main, 302, 15, 800, 620, "pb-klicker", #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_SizeGadget )
ButtonGadget(#Button_Start, 10, 570, 110, 40, "Start")
WebGadget(#Web_0, 10, 10, 780, 550, "about:blank")
; WebGadget initialization
Global myBrowser.IWebBrowser2 = GetWindowLongPtr_(GadgetID(#Web_0), #GWLP_USERDATA)
If myBrowser\QueryInterface(?IID_IOleObject, @oleObject) = #S_OK
; new IDispatch object
AddElement(g_IDispatch_Objects())
g_IDispatch_Objects()\IDispatch = ?_IDispatch_Functions
; new IOleClientSite object
AddElement(g_IOleClientSite_Objects())
g_IOleClientSite_Objects()\IOleClientSite = ?_IOleClientSite_Functions
; tell the webbrowser client about our IOleClientSite object
If oleObject\SetClientSite(@g_IOleClientSite_Objects()) = #S_OK
If myBrowser\QueryInterface(?IID_IOleControl, @oleControl) = #S_OK
; tell the webbrowser control that Ambient Properties have changed so it queries our IOleClientSite object for the IDispatch interface and calls IDispatch::Invoke with DISPID_AMBIENT_DLCONTROL
oleControl\OnAmbientPropertyChange(#DISPID_AMBIENT_DLCONTROL)
oleControl\Release()
EndIf
EndIf
oleObject\Release()
EndIf
EndIf
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
;ShellExecute_(#Null, @"open", @"c:\users\mmras\NetDisabler_x64.exe", @" /E", @"C:\users\mmras\", #SW_NORMAL)
Quit = 1
Case #PB_Event_SizeWindow
ResizeWebgadget(#Web_0,10,10,WindowWidth(#Window_Main)-20,WindowHeight(#Window_Main)-70)
ResizeGadget(#Button_Start,10,WindowHeight(#Window_Main)-50,110, 40)
Case #PB_Event_Gadget
Select EventGadget()
Case #Button_Start
;ShellExecute_(#Null, @"open", @"c:\users\mmras\NetDisabler_x64.exe", @" /D", @"C:\users\mmras\", #SW_NORMAL)
;Delay(2000)
Filename.S = "webpage"
If ReadFile(0, GetHomeDirectory()+Filename+".html")
While Eof(0) = 0
Text.S = Text.S + ReadString(0)
Wend
CloseFile(0)
Text = ReplaceString(Text, "href", "y")
Text = ReplaceString(Text, "src", "x")
Text = ReplaceString(Text, "http://", "")
Text = ReplaceString(Text, "https://", "")
Text = ReplaceString(Text, "ftp://", "")
Text = ReplaceString(Text, "sftp://", "")
Text = ReplaceString(Text, "smtp://", "")
Text = ReplaceString(Text, "mailto:", "")
If CreateFile(0, GetHomeDirectory()+Filename+"2.html")
WriteStringN(0, Text)
CloseFile(0)
EndIf
EndIf
web$ = GetHomeDirectory()+Filename+"2.html"
SetGadgetText(#Web_0, web$) ;; full path to local html file
EndSelect
EndSelect
Until Quit = 1
End
;- Data section
DataSection
_IOleClientSite_Functions:
Data.i @IOleClientSite_QueryInterface()
Data.i @IOleClientSite_AddRef()
Data.i @IOleClientSite_Release()
Data.i @IOleClientSite_SaveObject()
Data.i @IOleClientSite_GetMoniker()
Data.i @IOleClientSite_GetContainer()
Data.i @IOleClientSite_ShowObject()
Data.i @IOleClientSite_OnShowWindow()
Data.i @IOleClientSite_RequestNewObjectLayout()
; IOleClientSite
; {00000118-0000-0000-C000-000000000046}
IID_IOleClientSite:
Data.l $00000118
Data.w $0000, $0000
Data.b $C0, $00, $00, $00, $00, $00, $00, $46
; IOleObject
; {00000112-0000-0000-C000-000000000046}
IID_IOleObject:
Data.l $00000112
Data.w $0000, $0000
Data.b $C0, $00, $00, $00, $00, $00, $00, $46
; IOleControl
; {B196B288-BAB4-101A-B69C-00AA00341D07}
IID_IOleControl:
Data.l $B196B288
Data.w $BAB4, $101A
Data.b $B6, $9C, $00, $AA, $00, $34, $1D, $07
;("00000113-0000-0000-C000-000000000046")
IID_IOleInPlaceObject:
Data.l $00000113
Data.w $0000, $0000
Data.b $C0, $00, $00, $00, $00, $00, $00, $46
_IDispatch_Functions:
Data.i @IDispatch_QueryInterface()
Data.i @IDispatch_AddRef()
Data.i @IDispatch_Release()
Data.i @IDispatch_GetTypeInfoCount()
Data.i @IDispatch_GetTypeInfo()
Data.i @IDispatch_GetIDsOfNames()
Data.i @IDispatch_Invoke()
IID_IUnknown: ; {00000000-0000-0000-C000-000000000046}
Data.l $00000000
Data.w $0000, $0000
Data.b $C0, $00, $00, $00, $00, $00, $00, $46
IID_IDispatch: ; {00020400-0000-0000-C000-000000000046}
Data.l $00020400
Data.w $0000, $0000
Data.b $C0, $00, $00, $00, $00, $00, $00, $46
EndDataSection