龙空技术网

64位汇编语言之COM WebBrowser

汇编语言 486

前言:

如今姐妹们对“cwebbrowserhtml”大约比较讲究,你们都想要了解一些“cwebbrowserhtml”的相关文章。那么小编在网摘上网罗了一些关于“cwebbrowserhtml””的相关资讯,希望同学们能喜欢,同学们快快来学习一下吧!

com 是个很大的课题,本人感觉比驱动还要繁杂,基础知识就不再讲解了,有兴趣的朋友可以看下这本书:

这是运行效果:

本汇编代码已以文档方式导入,以下是部分代码:inter_explorer_WndProc proc  uses rbx rdi rsi _hWin:qword,_uMsg:qword,_wParam:qword,_lParam:qword	LOCAL @rect:RECT	LOCAL @pwnd:qword	local	@stRect:RECT	local	@stPs:PAINTSTRUCT	LOCAL @wc:WNDCLASSEX	LOCAL msg:MSG	LOCAL @hwnd:HWND	LOCAL @flags:qword	LOCAL @ppIOleInPlaceActiveObject:qword		mov rax,_uMsg		.if eax==WM_CREATE	;.elseif eax == WM_MOUSEMOVE				.elseif eax == WM_USER+1		nop	;			invoke IsWindow,_hWin		.if eax {} 0						invoke GetWindow,_hWin,GW_CHILD			mov ebx,eax			invoke GetClassName,rbx,addr @wc,sizeof @wc						invoke lstrcmp,addr @wc,addr Shell_Embedding;若两个字符串相等则返回值为0。			.if eax == 0												mov esi,5				.while sdword ptr  esi }0																												invoke GetWindow,rbx,GW_CHILD					mov rbx,rax					invoke GetClassName,rbx,addr @wc,sizeof @wc								invoke lstrcmp,addr @wc,addr Internet_Explorer_Server;若两个字符串相等则返回值为0。					.if eax == 0						invoke SetFocus,rbx						invoke SetActiveWindow,rbx						invoke SetForegroundWindow,rbx																		mov rbx,pWB2						mov rbx,[rbx]						invoke [rbx+IWebBrowser2Vtbl.QueryInterface],pWB2,addr IID_IOleInPlaceActiveObject,addr @ppIOleInPlaceActiveObject											mov rbx,@ppIOleInPlaceActiveObject						mov rbx,[rbx]											invoke [rbx+_IOleInPlaceActiveObject.OnFrameWindowActivate],@ppIOleInPlaceActiveObject,1										invoke [rbx+_IOleInPlaceActiveObject.iolewindow._IUnknown.Release],@ppIOleInPlaceActiveObject																								.break					.endif								dec esi					.if esi == 0											.break					.endif				.endw							.endif					.endif								.elseif eax == WM_PAINT		invoke	BeginPaint,_hWin,addr @stPs					invoke	EndPaint,_hWin,addr @stPs			.elseif eax==WM_CLOSE	;			invoke CoUninitialize	;	invoke PostQuitMessage,NULL	;	invoke DestroyWindow,child_hwnd	;	invoke DestroyWindow,hWnd		invoke DestroyWindow,_hWin	;	invoke PostQuitMessage,NULL			;;	invoke TerminateThread,rax,0	;	invoke GetCurrentProcess	;	invoke TerminateProcess,rax,0				.elseif eax ==WM_DESTROY		invoke PostQuitMessage,NULL			;	invoke GetCurrentThread	;	invoke TerminateThread,rax,0	;	invoke GetCurrentProcess	;	invoke TerminateProcess,rax,0		.else		invoke DefWindowProc,_hWin,_uMsg,_wParam,_lParam		ret	.endif		mov eax,0	retinter_explorer_WndProc endpinter_explorer_thread proc uses rbx rsi rdi _hWin:qword	LOCAL @rect:RECT	LOCAL	@wc:WNDCLASSEX	LOCAL	@msg:MSG	LOCAL @parenthand:qword		LOCAL @IConnectionPointContainer:qword	LOCAL @DWebBrowserEvents2:qword	LOCAL @IConnectionPoint:qword	LOCAL @varinat:VARIANT	LOCAL @extent:qword	LOCAL @inplace:qword	LOCAL @classhand:qword	LOCAL @stRect:RECT		;	invoke InitCommonControls		invoke CoInitialize, NULL	;	invoke CoInitializeEx,		mov rax,_hWin		mov @parenthand,rax								invoke RtlZeroMemory,addr @wc,sizeof @wc		mov   @wc.cbSize,SIZEOF WNDCLASSEX		mov   @wc.style,CS_HREDRAW or CS_VREDRAW; CS_DBLCLKS;		lea rax,inter_explorer_WndProc		mov   @wc.lpfnWndProc, rax;OFFSET inter_explorer_WndProc		mov   @wc.cbClsExtra,NULL		mov   @wc.cbWndExtra,NULL		push  hInstance		pop   @wc.hInstance		mov   @wc.hbrBackground,COLOR_BTNFACE+1		mov   @wc.lpszMenuName,NULL		lea rax,ClassName_for_html		mov   @wc.lpszClassName,rax;OFFSET ClassName_for_html							invoke LoadCursor,NULL,IDC_ARROW		mov   @wc.hCursor,rax			invoke RegisterClassEx, addr @wc		mov @classhand,rax		invoke GetDlgItem,_hWin,1001		invoke GetClientRect,rax,addr @rect						mov esi,@rect.right			mov edi,@rect.left		sub esi,edi			mov edi, @rect.bottom			sub edi,@rect.top	;	invoke GetDesktopWindow		invoke CreateWindowEx,0h,@classhand,0,WS_CHILD+WS_CLIPSIBLINGS+WS_CLIPCHILDREN,0,0,rsi,rdi,_hWin,11111,hInstance,NULL				mov _iOleClientSiteEx.inplace._frame.window,rax				;invoke SetParent,rax,_hWin;hWnd		invoke ShowWindow,_iOleClientSiteEx.inplace._frame.window,SW_SHOW		invoke UpdateWindow,_iOleClientSiteEx.inplace._frame.window							invoke inihtml								invoke CoGetClassObject,addr CLSID_WebBrowser,CLSCTX_INPROC_SERVER  or CLSCTX_INPROC_HANDLER , 0,addr  IID_IClassFactory, addr punk;CLSCTX_INPROC_SERVER  equ 1 or CLSCTX_INPROC_HANDLER  equ 2   CLSCTX_ALL		.if rax {} S_OK			mov rax,0			ret		.endif		mov rbx,punk		mov rbx,[rbx]		invoke [rbx+fix_IClassFactory.CreateInstance],punk,0,addr IID_IOleObject,addr pObject		.if rax {} S_OK			mov rax,0			ret		.endif		invoke [rbx+fix_IClassFactory._IUnknown.Release],punk				mov rbx,pObject		mov rbx,[rbx]		lea rdx,@_myIOleClientSiteEx		invoke [rbx+fix_IOleObject.SetClientSite],pObject,rdx;		.if rax {} S_OK			mov rax,0			ret		.endif		invoke OleSetContainedObject, pObject,1	; Let browser object know that it is embedded in an OLE container.		.if rax {} S_OK			mov rax,0			ret		.endif				invoke GetClientRect,_hWin,addr @rect		.if rax == 0			mov rax,0			ret		.endif				OLEIVERB_PRIMARY	EQU	0		OLEIVERB_SHOW	EQU	- 1		OLEIVERB_OPEN	EQU	- 2		OLEIVERB_HIDE	EQU	- 3		OLEIVERB_UIACTIVATE	EQU	- 4		OLEIVERB_INPLACEACTIVATE	EQU	- 5		OLEIVERB_DISCARDUNDOSTATE	EQU	- 6								;OLEIVERB_SHOW:显示OLE控件。		;OLEIVERB_OPEN:在另外一个窗口中打开OLE控件。		;OLEIVERB_INPLACEACTIVATE:不带有工具栏和菜单栏的方式。		;OLEIVERB_UIACTIVATE:激活OLE的菜单栏和工具栏。		;OLEIVERB_PRIMARY:打开编辑状态的OLE控件。		;OLEIVERB_DISCARDUNDOSTATE:关闭OLE控件。		;				mov rbx,pObject		mov rbx,[rbx]		lea r9,@_myIOleClientSiteEx		invoke [rbx+fix_IOleObject.DoVerb],pObject,OLEIVERB_INPLACEACTIVATE,0,r9,0, _iOleClientSiteEx.inplace._frame.window,addr @rect			lea rdi, @extent		mov eax,@rect.right		mov [rdi],eax		mov eax,@rect.bottom		mov [rdi+4],eax	;	coinvoke pObject, IOleObject,SetExtent,DVASPECT_CONTENT,rdi						invoke [rbx+fix_IOleObject.SetExtent],pObject,rdi				;	coinvoke pObject, IUnknown_, QueryInterface, addr IID_IOleInPlaceObject, addr @inplace				invoke [rbx+fix_IOleObject._IUnknown.QueryInterface],pObject, addr IID_IOleInPlaceObject, addr @inplace								;	coinvoke @inplace, IOleInPlaceObject,SetObjectRects, addr @rect,addr @rect				mov rbx,@inplace		mov rbx,[rbx]				invoke [rbx+fix_IOleInPlaceObject.SetObjectRects],@inplace, addr @rect,addr @rect		.if eax {} S_OK			mov eax,0			ret		.endif							;	coinvoke pObject, IUnknown_, QueryInterface, addr IID_IWebBrowser2, addr pWB2		mov rbx,pObject		mov rbx,[rbx]			invoke [rbx+fix_IOleObject._IUnknown.QueryInterface],pObject,addr IID_IWebBrowser2, addr pWB2				lea rcx,pWB2		.if eax {} S_OK			mov eax,0			ret		.endif							mov rbx,pWB2		mov rbx,[rbx]		invoke [rbx+IWebBrowser2Vtbl.put_Left],pWB2,0		invoke [rbx+IWebBrowser2Vtbl.put_Top],pWB2,0		mov eax,@rect.right		invoke [rbx+IWebBrowser2Vtbl.put_Width],pWB2,rax		mov eax,@rect.bottom		invoke [rbx+IWebBrowser2Vtbl.put_Height],pWB2,rax						invoke [rbx+IWebBrowser2Vtbl.put_RegisterAsBrowser],pWB2,VARIANT_TRUE	;	invoke [rbx+IWebBrowser2Vtbl.get_HWND],pWB2,addr browser_hwnd	;	invoke [rbx+IWebBrowser2Vtbl.put_Visible],pWB2,VARIANT_TRUE;	;	invoke [rbx+IWebBrowser2Vtbl.put_Silent],pWB2,VARIANT_TRUE;	;	invoke [rbx+IWebBrowser2Vtbl.put_TheaterMode],pWB2,VARIANT_TRUE;					mov rax,browser_hwnd	;	comment %			;	invoke [rbx+IWebBrowser2Vtbl.QueryInterface],pWB2,addr IID_IDispatch,addr ppIDispatch			;	.if eax {} S_OK	;		mov eax,0	;		ret	;	.endif								invoke [rbx+IWebBrowser2Vtbl.get_Application],pWB2,addr pIDispatch				.if eax {} S_OK			mov eax,0			ret		.endif				invoke [rbx+IWebBrowser2Vtbl.QueryInterface],pWB2,addr IID_IConnectionPointContainer,addr @IConnectionPointContainer		.if eax {} S_OK			mov eax,0			ret		.endif				mov rax,@IConnectionPointContainer		mov rbx,[rax]		invoke [rbx+fix_IConnectionPointContainer.FindConnectionPoint],@IConnectionPointContainer,addr DIID_DWebBrowserEvents2,addr pIConnectionPoint_obj		.if eax {} S_OK			mov eax,0			ret		.endif								; IID_IDispatch				;DIID_DWebBrowserEvents2				mov rax,pIConnectionPoint_obj		mov rbx,[rax]		lea rcx,_iOleClientSiteEx.DWebBrowserEvents2._IUnknown.QueryInterface				lea rdi,@_myIOleClientSiteEx		lea rdx,[rdi+18h+18h]				invoke [rbx+fix_IConnectionPoint.Advise],pIConnectionPoint_obj,rdx,addr dwcookie		.if eax {} S_OK			mov eax,0			ret		.endif				invoke [rbx+fix_IConnectionPoint._IUnknown.Release],pIConnectionPoint_obj	;	.if eax {} S_OK	;		mov eax,0	;		ret	;	.endif	;		;			mov rax,@IConnectionPointContainer		mov rbx,[rax]									;计算比例关系			comment ~			invoke GetDlgItem,_hWin,1002	;webbrowser		mov rbx,eax		invoke GetWindowRect,rbx,addr @stRect		invoke ScreenToClient,_hWin,addr @stRect.left		invoke ScreenToClient,_hWin,addr @stRect.right				fild @stRect.left		fild org_main_width		fdivp st(1),st(0)		fstp webbrowser_window.x						fild @stRect.top		fild org_main_higth		fdivp st(1),st(0)		fstp webbrowser_window.y				mov eax,@stRect.left				sub @stRect.right,eax		fild @stRect.right		fild org_main_width		fdivp st(1),st(0)		fstp webbrowser_window._width				mov eax,@stRect.top				sub @stRect.bottom,eax		fild @stRect.bottom		fild org_main_higth		fdivp st(1),st(0)		fstp webbrowser_window.higth												invoke GetDlgItem,_hWin,1005		mov rbx,eax		invoke GetWindowRect,rbx,addr @stRect		invoke ScreenToClient,_hWin,addr @stRect.left		invoke ScreenToClient,_hWin,addr @stRect.right				fild @stRect.left		fild org_main_width		fdivp st(1),st(0)		fstp viewnetaddress.x						fild @stRect.top		fild org_main_higth		fdivp st(1),st(0)		fstp viewnetaddress.y				mov eax,@stRect.left				sub @stRect.right,eax		fild @stRect.right		fild org_main_width		fdivp st(1),st(0)		fstp viewnetaddress._width				mov eax,@stRect.top				sub @stRect.bottom,eax		fild @stRect.bottom		fild org_main_higth		fdivp st(1),st(0)		fstp viewnetaddress.higth								invoke GetDlgItem,_hWin,1003		mov rbx,eax		invoke GetWindowRect,rbx,addr @stRect				invoke ScreenToClient,_hWin,addr @stRect.left		invoke ScreenToClient,_hWin,addr @stRect.right				fild @stRect.left		fild org_main_width		fdivp st(1),st(0)		fstp baiduzhuye.x						fild @stRect.top		fild org_main_higth		fdivp st(1),st(0)		fstp baiduzhuye.y				mov eax,@stRect.left				sub @stRect.right,eax		fild @stRect.right		fild org_main_width		fdivp st(1),st(0)		fstp baiduzhuye._width				mov eax,@stRect.top				sub @stRect.bottom,eax		fild @stRect.bottom		fild org_main_higth		fdivp st(1),st(0)		fstp baiduzhuye.higth						invoke GetDlgItem,_hWin,1001		mov rbx,eax		invoke GetWindowRect,rbx,addr @stRect				invoke ScreenToClient,_hWin,addr @stRect.left		invoke ScreenToClient,_hWin,addr @stRect.right				fild @stRect.left		fild org_main_width		fdivp st(1),st(0)		fstp tencentzhuye.x						fild @stRect.top		fild org_main_higth		fdivp st(1),st(0)		fstp tencentzhuye.y				mov eax,@stRect.left				sub @stRect.right,eax		fild @stRect.right		fild org_main_width		fdivp st(1),st(0)		fstp tencentzhuye._width				mov eax,@stRect.top				sub @stRect.bottom,eax		fild @stRect.bottom		fild org_main_higth		fdivp st(1),st(0)		fstp tencentzhuye.higth								invoke GetDlgItem,_hWin,1004		mov rbx,eax		invoke GetWindowRect,rbx,addr @stRect		invoke ScreenToClient,_hWin,addr @stRect.left		invoke ScreenToClient,_hWin,addr @stRect.right				fild @stRect.left		fild org_main_width		fdivp st(1),st(0)		fstp youselfzhuye.x						fild @stRect.top		fild org_main_higth		fdivp st(1),st(0)		fstp youselfzhuye.y				mov eax,@stRect.left				sub @stRect.right,eax		fild @stRect.right		fild org_main_width		fdivp st(1),st(0)		fstp youselfzhuye._width				mov eax,@stRect.top				sub @stRect.bottom,eax		fild @stRect.bottom		fild org_main_higth		fdivp st(1),st(0)		fstp youselfzhuye.higth				invoke  CreateFontIndirect, addr yahei_8		mov hfont_8,eax				invoke  CreateFontIndirect, addr yahei_9		mov hfont_9,eax		invoke  CreateFontIndirect, addr yahei_10		mov hfont_10,eax		invoke  CreateFontIndirect, addr yahei_11		mov hfont_11,eax		invoke  CreateFontIndirect, addr yahei_12		mov hfont_12,eax		invoke  CreateFontIndirect, addr yahei_14		mov hfont_14,eax		invoke  CreateFontIndirect, addr yahei_16		mov hfont_16,eax			comment ~					invoke MultiByteToWideChar,CP_ACP,0,addr netaddress_aboutblank,-1,addr netbuffer,sizeof netbuffer						mov headbuffer,rax			lea esi,netbuffer			invoke SysAllocString,addr netbuffer			mov hsysstring,rax						mov _VARIANT_buffer.vt,VT_BSTR			mov _VARIANT_buffer.pbstrVal,rax						lea eax, _VARIANT_buffer				mov rbx,pWB2			mov rbx,[rbx]	;		invoke [rbx+IWebBrowser2Vtbl.Navigate2],pWB2,rax,0,0,0,0						invoke SysFreeString,hsysstring						invoke PostMessage,_iOleClientSiteEx.inplace._frame.window,WM_USER+1,0,0					.while TRUE	;	invoke PeekMessage,addr @msg,NULL,0,0,PM_REMOVE		invoke GetMessage,addr @msg,NULL,0,0	 	.if rax == 0	 		.break	 	.endif		;.if eax							invoke TranslateMessage,addr @msg		invoke DispatchMessage,addr @msg			.endw		retinter_explorer_thread endpmovwindow proc uses rbx rsi rdi hWin:qword,id:qword,_x:qword,_y:qword,Porg_rect:qword			local @width:qword	;某个控件的宽度		LOCAL @higth:qword		LOCAL @child_x:qword ;某个控件的x坐标		LOCAL @child_y:qword		LOCAL @rect:RECT			invoke  GetDlgItem,hWin,id			mov rbx,rax			invoke GetWindowRect,rax,addr @rect			invoke ScreenToClient,hWin,addr @rect.left			invoke ScreenToClient,hWin,addr @rect.right			mov rsi,Porg_rect			fild [rsi+RECT.right]			fild [rsi+RECT.left]			fsubp st(1),st (0)	;原始宽度			fld _x			fmul st(0),st (1)	;;原始宽度*缩放率			faddp st(1),st (0)	;;原始宽度+原始宽度*缩放率				fistp @width								fild [rsi+RECT.bottom]			fild [rsi+RECT.top]			fsubp st(1),st (0)	;原始高度			fld _y			fmul st(0),st (1)	;;原始高度*缩放率			faddp st(1),st (0)	;;原始高度+原始高度*缩放率			fistp @higth														fild [rsi+RECT.left];x坐标			fld _x			fmul st(0),st (1)	;;原始x坐标*缩放率			faddp st(1),st (0)			fistp @child_x												fild [rsi+RECT.top];y坐标			fld _y			fmul st(0),st (1)	;;原始y坐标*缩放率			faddp st(1),st (0)		;	fld float05		;	fmulp st(1),st (0)			fistp @child_y														;	sub @child_y,15									mov eax,[rsi+RECT.bottom]			sub eax,[rsi+RECT.top]			.if rax {= @higth			;	mov @higth,rax			.endif																					invoke MoveWindow,rbx,@child_x,@child_y,@width,@higth,TRUE							retmovwindow endpWndProc proc  uses rbx rsi rdi hWin:HWND,uMsg:UINT64,wParam:WPARAM,lParam:LPARAM 	LOCAL @varinat:VARIANT	local	@stPs:PAINTSTRUCT	LOCAL @rect:RECT	LOCAL @x:REAL8	;x轴比例因子	LOCAL @y:real8			local @width:qword	;某个控件的宽度		LOCAL @higth:qword		LOCAL @child_x:qword ;某个控件的x坐标		LOCAL @child_y:qword							mov		rax,uMsg	.if eax==WM_INITDIALOG		push	hWin		pop		hWnd		invoke  GetWindowRect,hWin,addr org_main_rect		invoke ScreenToClient,hWin,addr org_main_rect.left		invoke ScreenToClient,hWin,addr org_main_rect.right		mov eax,org_main_rect.left		sub org_main_rect.right,eax					mov eax,org_main_rect.top		sub org_main_rect.bottom,eax							invoke GetDlgItem,hWin,1002		mov rbx,rax		invoke  GetWindowRect,rax,addr INPUT_EDIT		invoke ScreenToClient,hWin,addr INPUT_EDIT.left	;指向窗口的句柄,此窗口的用户空间将被用来转换。		invoke ScreenToClient,hWin,addr INPUT_EDIT.right								invoke GetDlgItem,hWin,1003				invoke  GetWindowRect,rax,addr GoHome		invoke ScreenToClient,hWin,addr GoHome.left		invoke ScreenToClient,hWin,addr GoHome.right						invoke GetDlgItem,hWin,1004				invoke  GetWindowRect,rax,addr GoBack		invoke ScreenToClient,hWin,addr GoBack.left		invoke ScreenToClient,hWin,addr GoBack.right								invoke GetDlgItem,hWin,1005		invoke  GetWindowRect,rax,addr GoForward		invoke ScreenToClient,hWin,addr GoForward.left		invoke ScreenToClient,hWin,addr GoForward.right				invoke GetDlgItem,hWin,1006		invoke  GetWindowRect,rax,addr GoSTOP		invoke ScreenToClient,hWin,addr GoSTOP.left		invoke ScreenToClient,hWin,addr GoSTOP.right						invoke CreateThread,0,0,addr inter_explorer_thread,hWnd,0,0	.elseif eax == WM_SIZE										.if pWB2 == 0				ret			.endif						invoke GetWindowRect,hWin,addr @rect			invoke ScreenToClient,hWin,addr @rect.left			invoke ScreenToClient,hWin,addr @rect.right						;求缩放的比例因子 (根据主窗口的变化)						finit	;初始浮点寄存器						mov eax,@rect.left			sub @rect.right,eax						mov eax,@rect.top			sub @rect.bottom,eax						fild @rect.right			fild org_main_rect.right			fsubp st(1),st (0)			fild org_main_rect.right			fdivp st(1),st (0)			fstp qword ptr @x									fild @rect.bottom			fild org_main_rect.bottom			fsubp st(1),st (0)			fild org_main_rect.bottom			fdivp st(1),st (0)			fstp qword ptr @y											;	invoke GetDlgItem,hWin,1001		;	invoke GetClientRect,rax,addr org_main_rect									mov @varinat.vt,VT_BOOL			mov @varinat.boolVal,VARIANT_TRUE			mov rbx,pWB2			mov rbx,[rbx]			invoke [rbx+IWebBrowser2Vtbl.put_Resizable],pWB2,addr @varinat												mov @varinat.vt,VT_BOOL			mov @varinat.boolVal,VARIANT_TRUE			mov rbx,pWB2			mov rbx,[rbx]			invoke [rbx+IWebBrowser2Vtbl.put_StatusBar],pWB2,addr @varinat									invoke [rbx+IWebBrowser2Vtbl.put_Left],pWB2,0			invoke [rbx+IWebBrowser2Vtbl.put_Top],pWB2,0			mov eax,@rect.right			invoke [rbx+IWebBrowser2Vtbl.put_Width],pWB2,rax			mov eax,@rect.bottom			invoke [rbx+IWebBrowser2Vtbl.put_Height],pWB2,rax						mov esi,@rect.right			mov edi,@rect.bottom		;	invoke MoveWindow,_iOleClientSiteEx.inplace._frame.window,0,0,org_main_rect.right,org_main_rect.bottom,TRUE			invoke MoveWindow,_iOleClientSiteEx.inplace._frame.window,0,0,rsi,rdi,TRUE									invoke movwindow,hWin,1002,@x,@y,addr INPUT_EDIT			invoke movwindow,hWin,1003,@x,@y,addr GoHome															invoke movwindow,hWin,1004,@x,@y,addr GoBack			invoke movwindow,hWin,1005,@x,@y,addr GoForward						invoke movwindow,hWin,1006,@x,@y,addr GoSTOP				comment ~			mov eax,org_main_rect.left			sub org_main_rect.right,eax						mov eax,org_main_rect.top			sub org_main_rect.bottom,eax						fild org_main_rect.right			fld webbrowser_window.x			fmulp st (1),st (0)			fistp org_main_rect.left					fild org_main_rect.bottom			fld webbrowser_window.y			fmulp st (1),st (0)			fistp org_main_rect.top						fild org_main_rect.right			fld webbrowser_window._width			fmulp st (1),st (0)			fistp org_main_rect.right					fild org_main_rect.bottom			fld webbrowser_window.higth			fmulp st (1),st (0)			fistp org_main_rect.bottom			invoke GetDlgItem,_hWin,1002			mov ebx,eax			invoke MoveWindow,ebx,org_main_rect.left,org_main_rect.top,org_main_rect.right,org_main_rect.bottom,TRUE						mov @varinat.vt,VT_BOOL			mov @varinat.boolVal,VARIANT_TRUE			mov ebx,pWB2			mov ebx,[ebx]			invoke [ebx+IWebBrowser2Vtbl.put_Resizable],pWB2,addr @varinat																		invoke [ebx+IWebBrowser2Vtbl.put_Left],pWB2,0			invoke [ebx+IWebBrowser2Vtbl.put_Top],pWB2,0			mov eax,org_main_rect.right			invoke [ebx+IWebBrowser2Vtbl.put_Width],pWB2,eax			mov eax,org_main_rect.bottom			invoke [ebx+IWebBrowser2Vtbl.put_Height],pWB2,eax												invoke  GetWindowRect,_hWin,addr org_main_rect			invoke ScreenToClient,_hWin,addr org_main_rect.left			invoke ScreenToClient,_hWin,addr org_main_rect.right					mov eax,org_main_rect.left			sub org_main_rect.right,eax						mov eax,org_main_rect.top			sub org_main_rect.bottom,eax						fild org_main_rect.right			fld viewnetaddress.x			fmulp st (1),st (0)			fistp org_main_rect.left					fild org_main_rect.bottom			fld viewnetaddress.y			fmulp st (1),st (0)			fistp org_main_rect.top						fild org_main_rect.right			fld viewnetaddress._width			fmulp st (1),st (0)			fistp org_main_rect.right					fild org_main_rect.bottom			fld viewnetaddress.higth			fmulp st (1),st (0)			fistp org_main_rect.bottom			invoke GetDlgItem,_hWin,1005			mov ebx,eax			invoke MoveWindow,ebx,org_main_rect.left,org_main_rect.top,org_main_rect.right,org_main_rect.bottom,TRUE									invoke  GetWindowRect,_hWin,addr org_main_rect			invoke ScreenToClient,_hWin,addr org_main_rect.left			invoke ScreenToClient,_hWin,addr org_main_rect.right			mov eax,org_main_rect.left			sub org_main_rect.right,eax			mov eax,org_main_rect.top			sub org_main_rect.bottom,eax						fild org_main_rect.right			fld baiduzhuye.x			fmulp st (1),st (0)			fistp org_main_rect.left					fild org_main_rect.bottom			fld baiduzhuye.y			fmulp st (1),st (0)			fistp org_main_rect.top						fild org_main_rect.right			fld baiduzhuye._width			fmulp st (1),st (0)			fistp org_main_rect.right					fild org_main_rect.bottom			fld baiduzhuye.higth			fmulp st (1),st (0)			fistp org_main_rect.bottom			invoke GetDlgItem,_hWin,1003			mov ebx,eax			invoke MoveWindow,ebx,org_main_rect.left,org_main_rect.top,org_main_rect.right,org_main_rect.bottom,TRUE									invoke  GetWindowRect,_hWin,addr org_main_rect			invoke ScreenToClient,_hWin,addr org_main_rect.left			invoke ScreenToClient,_hWin,addr org_main_rect.right			mov eax,org_main_rect.left			sub org_main_rect.right,eax			mov eax,org_main_rect.top			sub org_main_rect.bottom,eax						fild org_main_rect.right			fld tencentzhuye.x			fmulp st (1),st (0)			fistp org_main_rect.left					fild org_main_rect.bottom			fld tencentzhuye.y			fmulp st (1),st (0)			fistp org_main_rect.top						fild org_main_rect.right			fld tencentzhuye._width			fmulp st (1),st (0)			fistp org_main_rect.right					fild org_main_rect.bottom			fld tencentzhuye.higth			fmulp st (1),st (0)			fistp org_main_rect.bottom			invoke GetDlgItem,_hWin,1001			mov ebx,eax			invoke MoveWindow,ebx,org_main_rect.left,org_main_rect.top,org_main_rect.right,org_main_rect.bottom,TRUE									invoke  GetWindowRect,_hWin,addr org_main_rect			invoke ScreenToClient,_hWin,addr org_main_rect.left			invoke ScreenToClient,_hWin,addr org_main_rect.right			mov eax,org_main_rect.left			sub org_main_rect.right,eax			mov eax,org_main_rect.top			sub org_main_rect.bottom,eax						fild org_main_rect.right			fld youselfzhuye.x			fmulp st (1),st (0)			fistp org_main_rect.left					fild org_main_rect.bottom			fld youselfzhuye.y			fmulp st (1),st (0)			fistp org_main_rect.top						fild org_main_rect.right			fld youselfzhuye._width			fmulp st (1),st (0)			fistp org_main_rect.right					fild org_main_rect.bottom			fld youselfzhuye.higth			fmulp st (1),st (0)			fistp org_main_rect.bottom			invoke GetDlgItem,_hWin,1004			mov ebx,eax			invoke MoveWindow,ebx,org_main_rect.left,org_main_rect.top,org_main_rect.right,org_main_rect.bottom,TRUE									;;;;这里是字体的缩放,还没有实现						invoke GetDlgItem,_hWin,1003			mov ebx,eax			invoke  GetWindowDC,ebx			mov @hdc,eax						INVOKE SelectObject,@hdc,hfont_10						invoke GetDlgItemText,_hWin,1003,addr @tempbuffer,sizeof @tempbuffer			mov esi,eax					invoke GetTextExtentPoint32, @hdc,addr @tempbuffer,esi,addr tagSIZE_buffer					invoke ReleaseDC,ebx,@hdc			comment ~								.elseif eax==WM_COMMAND		mov		rax,wParam		and		rax,0FFFFh		.if rax==IDM_FILE_EXIT			invoke SendMessage,hWin,WM_CLOSE,0,0		.elseif rax==IDM_HELP_ABOUT			invoke ShellAbout,hWin,addr AppName,addr AboutMsg,NULL					.elseif eax == 1003			invoke GetDlgItemText,hWin,1002,addr _1003buffer,sizeof _1003buffer			invoke MultiByteToWideChar,CP_ACP,0,addr _1003buffer,-1,addr netbuffer,sizeof netbuffer									lea rsi,netbuffer			invoke SysAllocString,addr netbuffer			mov hsysstring,rax						mov _VARIANT_buffer.vt,VT_BSTR			mov _VARIANT_buffer.pbstrVal,rax						lea rax, _VARIANT_buffer					mov rbx,pWB2			mov rbx,[rbx]			invoke [rbx+IWebBrowser2Vtbl.Navigate2],pWB2,rax,0,0,0,0						invoke SysFreeString,hsysstring						.elseif eax == 1004						mov rbx,pWB2			mov rbx,[rbx]			invoke [rbx+IWebBrowser2Vtbl.GoBack],pWB2								.elseif eax == 1005			mov rbx,pWB2			mov rbx,[rbx]			invoke [rbx+IWebBrowser2Vtbl.GoForward],pWB2						.elseif eax == 1006			mov rbx,pWB2			mov rbx,[rbx]			invoke [rbx+IWebBrowser2Vtbl.Stop],pWB2				.endif;	.elseif eax==WM_SIZE	.elseif eax == WM_PAINT		invoke	BeginPaint,hWin,addr @stPs					invoke	EndPaint,hWin,addr @stPs			.elseif eax==WM_CLOSE		invoke SendMessage, _iOleClientSiteEx.inplace._frame.window,WM_CLOSE,0,0		invoke DestroyWindow,hWin	.elseif uMsg==WM_DESTROY		invoke PostQuitMessage,NULL	.else		invoke DefWindowProc,hWin,uMsg,wParam,lParam		ret	.endif	xor    rax,rax	retWndProc endpend

标签: #cwebbrowserhtml