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

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

[复制链接]
发表于 2003-12-22 16:59:03 | 显示全部楼层 |阅读模式
利用IE的命令直接操作WebBrowser控件
8 N* g, [* s+ \, P2 o  s* I4 c' T' N1 D9 ^: _" S
通常,我们对CHtmlView/WebBrowser控件进行打印、查看源文件、查找等操作麻烦的不得了
& F. i' ]. ]1 L8 {% [  t8 L2 B. n详见http://support.microsoft.com/support/kb/articles/Q156/7/32.ASP
' I7 K+ _  Y( }' U" h' B# T# e- _6 g/ E
其次就是打开“Internet选项”、“添加到收藏夹”等方面的麻烦:
6 z% k+ U% a  T7 |1 u+ l详见http://www.csdn.net/Expert/TopicView1.asp?id=620932
2 {+ }5 z" l7 b) i6 x" z% @) l& A# p. m  _
下面介绍的方法能够迅捷的通过短短几行代码完成上述操作,并且你还能完成一些特殊的操作(比如让IE控件进入像frontpage那样的编辑状态等等)
0 g, v. f2 ~6 |  `1 H  l: G3 X6 O

; x2 v/ P7 H7 E首先,在你的工程里填加对MsHtmcid.h的支持:/ \" m0 P# F1 g
# w6 D% H  R( A) G* Z
#include <MsHtmcid.h> //你可以在VC的头文件的目录中找到它,
1 e) S2 P+ R4 t! R% O                                    //推荐你到MS网站下载最新文件以获得对IE6命令的支持。
6 r( i# _) P6 \# R: a; O/ H6 u
; f6 I; \, {, p" \$ ]* Z, O7 C1 ]! l9 L2 _7 u4 X
然后你所要做的仅仅是找到IE控件的Internet Explorer_server窗口句柄发送命令给它。
% b+ ]6 A- y; [下面给出部分演示,看了演示你就知道该怎么做了。
# ~, ?7 i6 U* k/ \5 s- ~% ]( b: c/ o+ |4 G; `% @' i0 ^$ \) x1 Q
将WebBrowser切换至编辑状态:
4 T* M: p2 K, M: j/ d7 H
7 @0 p. m& i- d5 {: |# q; Jvoid CWebBrowser2::OnGotoEditMode()
9 F; h* t, q/ f4 s- l{* m' R! |' U4 g
CWnd* pwndIEShell = NULL;( ?* q4 J; `  f' W- S: {, _) n
CWnd* pwndIEHTML = NULL;/ [0 x% O; K0 O( c% R, p; y

4 z+ A  v" |5 D pwndIEShell = this->GetWindow(GW_CHILD); //this是CWebBrowser2指针
6 P4 @- Q. T7 s  r0 D if (pwndIEShell)" S' P/ A7 b- S6 o2 T: u
{8 L  R. E4 e2 r0 c% s6 K
  pwndIEHTML = pwndIEShell->GetWindow(GW_CHILD); //WebBrowser控件的窗口关系你可以通过spy++来观察,这里不累赘! b1 T' e( Q8 W& t! Z
}
: o* |9 m7 ?; m7 F. C  |; U
- v8 L; l7 w% w8 S if(pwndIEHTML != NULL)" @4 u* |' N! o$ T
{+ b1 \( v# d! M# K
  WPARAM wParam = MAKELONG(IDM_EDITMODE, 1);//IDM_EDITMODE换为IDM_BROWSEMODE就返回浏览模式
# Y& q4 T' m" Y8 _' m  pwndIEHTML->SendMessage(WM_COMMAND, wParam, (LPARAM)pwndIEHTML->m_hWnd);
7 L. m! v- ]: n2 X: |' I2 i  F% E }
  _1 K  l* d* O2 L2 j}
' q  j6 l. M! y- e) g5 M
2 v" C0 v! z. b1 d! A. ~1 t之后你会发现WebBrowser控件变的跟frontpage一样(早知道这样不用DHtmlEdit控件了,哈)
, X$ S9 H- I2 d9 i+ z1 i4 C/ l0 \0 E7 ^; S$ i. N0 N! C
CHtmlView的实现跟上面稍有不同,因为多了个CFormView的缘故,具体代码如下:' ^5 |% _( ~" d# a
: w# Z$ i; m' e, U; r# }# _4 j
void CYourhtmlView::OnAddtoFavorites() ( L4 `2 D& p+ v$ s
{
/ }9 B# W6 U, ^) K. G( @: ^ CWnd* pwndWebControl = NULL;4 s; M% g+ `, x
CWnd* pwndIEShell = NULL;
2 u5 O6 `4 j& Z' h& U2 ~2 d+ G* ] CWnd* pwndIEHTML = NULL;
; J1 K! o* z9 s+ p8 k. m9 q/ h& h
pwndWebControl = GetWindow(GW_CHILD);
6 g6 f, G" e6 r- X% N) T: {1 J+ w if(pwndWebControl == NULL)
- P; S% G- E; R6 m3 S! N# [9 o  return;3 a* F4 _& G' y
pwndIEShell = pwndWebControl->GetWindow(GW_CHILD); * R; F- g" D7 S/ J7 t) G5 s, G$ x
if (pwndIEShell)5 o  ]' D6 M" X+ Q
{* j( x6 T* S) l1 p* s- I
  pwndIEHTML = pwndIEShell->GetWindow(GW_CHILD);
; a' E6 d& o+ c% P }& Q" e- v7 f  g4 c3 N
( l6 ]6 M$ t8 m3 f9 o# b" C& Z
if(pwndIEHTML != NULL)
9 k. G1 ?7 T7 B: k2 N {: j' p, A. j1 t, P7 D# R1 |
  WPARAM wParam = MAKELONG(IDM_ADDFAVORITES, 1);//添加到收藏夹,换成IDM_OPTIONS就是打开internet选项。5 v# o0 ~, [: Z
  pwndIEHTML->SendMessage(WM_COMMAND, wParam, (LPARAM)pwndIEHTML->m_hWnd);
' N$ T4 v( g4 B$ b }  & A0 g$ ^" }, |7 F8 B
}0 O. S" W2 I* K6 J0 q- y0 c/ |) I
3 }( w( b1 G0 c4 l
通过改变wParam ,你可以实现几乎IE所有的已知的命令(另存为...、打印预览、创建桌面快捷方式等等)和一些未知的命令(比如进入编辑模式等等)。
! Z- o3 J  u; |2 Q; J% Z2 N
3 g; l/ q  r9 u, d2 P好了,就介绍到这,具体的你可以通过观察MsHtmcid.h和实践来了解。) W( A6 N- o1 {5 ]& B  B) K% q/ h
最后,希望通过直接发送命令消息的方法能使你的工作事半功倍!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-11-14 18:04 , Processed in 0.017722 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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