找回密码
 注册
搜索
查看: 4140|回复: 0

利用IE的命令直接操作WebBrowser控件

[复制链接]
发表于 2003-12-22 16:59:03 | 显示全部楼层 |阅读模式
利用IE的命令直接操作WebBrowser控件$ c4 f, k/ w3 E) x: o" d
! @; L& s9 f+ b6 G4 @8 ]: }/ F
通常,我们对CHtmlView/WebBrowser控件进行打印、查看源文件、查找等操作麻烦的不得了- P4 D. N  T5 i' D
详见http://support.microsoft.com/support/kb/articles/Q156/7/32.ASP& m4 Y3 ~1 [8 }7 l! d
: Q. w) T- ]0 Q' A, k
其次就是打开“Internet选项”、“添加到收藏夹”等方面的麻烦:
0 d% {: z. R  q# l0 {5 `0 T' L详见http://www.csdn.net/Expert/TopicView1.asp?id=620932
4 A. I2 Z+ D- O8 Q2 u8 ]+ ^" b: S; @; k* W; Q( U- W' Z
下面介绍的方法能够迅捷的通过短短几行代码完成上述操作,并且你还能完成一些特殊的操作(比如让IE控件进入像frontpage那样的编辑状态等等)
4 O& `7 {% r1 z8 q9 x+ M' O1 T. ^) w2 q; M
/ A$ {4 T: f9 Y( w
首先,在你的工程里填加对MsHtmcid.h的支持:
8 L0 n+ f/ s/ r8 ^9 c- ^4 m7 q6 _3 q/ t3 _
#include <MsHtmcid.h> //你可以在VC的头文件的目录中找到它,4 I( g8 i' d& k& l3 Y6 H9 J. _8 e
                                    //推荐你到MS网站下载最新文件以获得对IE6命令的支持。; p' D/ Y$ c3 J" _" ^
( S" v- m$ u9 f* M9 `5 }
5 w7 r) u' Y5 W8 ?6 E; O
然后你所要做的仅仅是找到IE控件的Internet Explorer_server窗口句柄发送命令给它。7 N; s" u$ G0 V
下面给出部分演示,看了演示你就知道该怎么做了。
0 B) \2 C3 t2 `6 ~. }) s& S
  f1 x2 U4 d# q  x# ^! R# W# W将WebBrowser切换至编辑状态:
0 h! l+ u4 ~! A2 }! p5 K/ O1 \! X; Z! r1 F% m
void CWebBrowser2::OnGotoEditMode() ! \' z' a. c2 `9 v3 k
{
- }' z0 c/ ]+ A2 F9 g, M) q, n CWnd* pwndIEShell = NULL;
: P  Q' `' u! D/ r+ [) ^0 R CWnd* pwndIEHTML = NULL;
" _/ o( N! n5 G" Y* J* u4 E9 V
- k1 r$ @% o' a# L. { pwndIEShell = this->GetWindow(GW_CHILD); //this是CWebBrowser2指针( `+ z( k' J8 b; G' y5 J/ o
if (pwndIEShell)
8 @2 X4 C! C' Q, o8 r {- c" J4 Z% l, ~0 @/ ~3 A' m
  pwndIEHTML = pwndIEShell->GetWindow(GW_CHILD); //WebBrowser控件的窗口关系你可以通过spy++来观察,这里不累赘" v. f) j& A1 [" G* ~; _" l4 j/ x
}. ^& Q5 `7 O( E; W( c9 x
8 O% ~: @. m; ]- M
if(pwndIEHTML != NULL)
3 a' h) `7 ^) p( B+ b& \ {
( x9 f/ O/ e  J& ~: {1 V+ Y- b5 C  WPARAM wParam = MAKELONG(IDM_EDITMODE, 1);//IDM_EDITMODE换为IDM_BROWSEMODE就返回浏览模式1 P" l1 B2 n( x2 w, K2 L3 J
  pwndIEHTML->SendMessage(WM_COMMAND, wParam, (LPARAM)pwndIEHTML->m_hWnd);
/ N" \: Q- |' Y } & X" t1 r8 y( V7 t6 b) t' |
}1 }  {7 K1 w/ u
( Q; U' W( D/ v$ g) x# Q: U
之后你会发现WebBrowser控件变的跟frontpage一样(早知道这样不用DHtmlEdit控件了,哈)
) ]' U6 O1 g5 @
0 P1 m- `; B4 ^; |0 xCHtmlView的实现跟上面稍有不同,因为多了个CFormView的缘故,具体代码如下:4 f, h; n' m9 ^1 c6 \& D
& u7 e  ^) v& D1 _5 q8 |9 O2 l
void CYourhtmlView::OnAddtoFavorites() 0 D! a6 z5 Q2 X
{
0 Z. L4 X  M' v8 x CWnd* pwndWebControl = NULL;
& L. o% H4 q6 V4 j! l CWnd* pwndIEShell = NULL;- f4 a) s( x: X8 \0 A1 g
CWnd* pwndIEHTML = NULL;
4 t( j7 ~; ^# [0 k/ T* F& c+ r# R7 I$ U/ `9 x) c5 z( N4 C) U
pwndWebControl = GetWindow(GW_CHILD);+ ]  D7 y6 f5 v) ~' k* T
if(pwndWebControl == NULL)
+ W* B) f6 C' S$ K/ x  return;
. j, n; ^* W/ R) m& { pwndIEShell = pwndWebControl->GetWindow(GW_CHILD);
& {! O* o& N3 C if (pwndIEShell)4 |$ h, j& p( W; j" F
{; f( d2 `0 I7 R$ l9 G0 H' Q
  pwndIEHTML = pwndIEShell->GetWindow(GW_CHILD);+ n/ u' n, r' `, b9 B0 K
}
; A6 Z5 p+ {, x 2 q7 d+ F9 u. G& p$ n/ c; _: \
if(pwndIEHTML != NULL)
' E) a& @6 R2 }; w# @1 x {' N" x  Q5 `7 R( ]/ R9 |' m
  WPARAM wParam = MAKELONG(IDM_ADDFAVORITES, 1);//添加到收藏夹,换成IDM_OPTIONS就是打开internet选项。. s8 O6 k& ]+ ?
  pwndIEHTML->SendMessage(WM_COMMAND, wParam, (LPARAM)pwndIEHTML->m_hWnd);
2 Q4 X2 Y2 @/ W# c2 t$ x" a }  
' [  B) m( {% E6 P}
. E/ L) `9 {; k' o0 ?% y, ?+ u& C$ C' U) e  B8 @* _
通过改变wParam ,你可以实现几乎IE所有的已知的命令(另存为...、打印预览、创建桌面快捷方式等等)和一些未知的命令(比如进入编辑模式等等)。! F% _- S7 t) @/ ?

7 Y% Z' `2 u& ~% h- \7 Y5 d% [好了,就介绍到这,具体的你可以通过观察MsHtmcid.h和实践来了解。
7 p, D* F+ A* Y+ y* R5 }最后,希望通过直接发送命令消息的方法能使你的工作事半功倍!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|宁德市腾云网络科技有限公司 ( 闽ICP备2022007940号-5|闽公网安备 35092202000206号 )

GMT+8, 2025-9-30 09:09 , Processed in 0.034260 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表