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

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

[复制链接]
发表于 2003-12-22 16:59:03 | 显示全部楼层 |阅读模式
利用IE的命令直接操作WebBrowser控件
1 ^2 a4 w% ?, x: f3 u, M3 B8 Z6 f4 L* U  N% i' P% d# W2 M- k
通常,我们对CHtmlView/WebBrowser控件进行打印、查看源文件、查找等操作麻烦的不得了
: K( b( \& q' e9 x; h详见http://support.microsoft.com/support/kb/articles/Q156/7/32.ASP
# U$ Z, Q  v/ f2 m4 E- W
8 S2 t' A, E  {! H7 w其次就是打开“Internet选项”、“添加到收藏夹”等方面的麻烦:7 s9 N" o- x6 m
详见http://www.csdn.net/Expert/TopicView1.asp?id=620932' {/ z% c: P$ t+ b: h0 k/ ~* p) K

* X# A5 e' `+ D  Z( ?) T' g下面介绍的方法能够迅捷的通过短短几行代码完成上述操作,并且你还能完成一些特殊的操作(比如让IE控件进入像frontpage那样的编辑状态等等)
- b! u- L. k7 ^) t" N# j4 ]" f# `' L6 N; J
+ k/ l6 o4 S2 \
首先,在你的工程里填加对MsHtmcid.h的支持:
& y7 {5 k" e. P- H) G; Q: V4 ]! L2 N5 W4 p; ]. ]
#include <MsHtmcid.h> //你可以在VC的头文件的目录中找到它,) w1 P3 ?# T) e; x
                                    //推荐你到MS网站下载最新文件以获得对IE6命令的支持。
. U- d4 d; m8 |2 \' K, W
$ ?! V9 x1 ^" D( ]8 P- o0 `  n8 \" p7 {& T& t
然后你所要做的仅仅是找到IE控件的Internet Explorer_server窗口句柄发送命令给它。
4 G  n* `) M' k下面给出部分演示,看了演示你就知道该怎么做了。0 l! I2 ^% M! ^* V& W
' t- F3 X2 J1 H$ Q# @
将WebBrowser切换至编辑状态:
7 ~- l# E$ E- U( V% }8 N. ~2 M! n
; V/ y% i' a5 _* R% m8 T! A+ v0 jvoid CWebBrowser2::OnGotoEditMode()
" V3 \# H+ Y! ]7 f. K{) h" J& f. I$ Y/ B$ C
CWnd* pwndIEShell = NULL;' T3 i6 e5 N0 ?; _
CWnd* pwndIEHTML = NULL;
9 S, M. U$ [. }: @
: ^- J) y* u% S- i( o9 h pwndIEShell = this->GetWindow(GW_CHILD); //this是CWebBrowser2指针: p/ v2 d: C/ w; l  z
if (pwndIEShell)
! N1 ?1 J$ t9 N( I5 r {
. Q$ P# o% j/ s. y1 u  pwndIEHTML = pwndIEShell->GetWindow(GW_CHILD); //WebBrowser控件的窗口关系你可以通过spy++来观察,这里不累赘
) ?+ @2 `+ _' K7 V }
0 U3 A5 g2 `( Z, S7 K
  k2 q) k: J* W- w8 f if(pwndIEHTML != NULL)
5 ^. a6 ^+ \$ x' w( Q' s {; c5 t9 g1 e0 i* N% Z. N6 @# |
  WPARAM wParam = MAKELONG(IDM_EDITMODE, 1);//IDM_EDITMODE换为IDM_BROWSEMODE就返回浏览模式
8 ~# a6 I" z- M- Z9 l  pwndIEHTML->SendMessage(WM_COMMAND, wParam, (LPARAM)pwndIEHTML->m_hWnd);2 ~% o* E  |9 b# ^, f) N7 K3 g
}
' W. j# M% G! W/ W) x* Y}
, |+ m8 X$ f5 e$ ~7 v  T
: P+ z% |: @. v; w! r8 |2 B- P之后你会发现WebBrowser控件变的跟frontpage一样(早知道这样不用DHtmlEdit控件了,哈): `# B4 u6 P& d* N) w$ C( N
( [( b9 M# D  ?; v8 S4 V& ~
CHtmlView的实现跟上面稍有不同,因为多了个CFormView的缘故,具体代码如下:
$ P/ v6 [$ E$ \7 C6 d
1 m/ P5 N. C$ d. \& Nvoid CYourhtmlView::OnAddtoFavorites()
; I3 |# |6 }6 X) l7 v7 k9 w{* A, J( l5 ^" A
CWnd* pwndWebControl = NULL;
+ [: Y5 }, Z9 ^7 g) P4 J* Q4 s. v+ i" l CWnd* pwndIEShell = NULL;0 n1 V7 @2 G$ U  C
CWnd* pwndIEHTML = NULL;' U& p) ]) H4 A+ V- {  l
4 _. f' k8 o) A& q+ R. P9 F
pwndWebControl = GetWindow(GW_CHILD);* J+ a# m* @; j$ c7 u2 r7 N' Q
if(pwndWebControl == NULL)
( X, }, m% Y' ?8 [* Y! C- n- g  return;( ]- a: Y6 ]" q3 [; b! X4 w5 i
pwndIEShell = pwndWebControl->GetWindow(GW_CHILD); : V, B4 k! e" m0 Y
if (pwndIEShell)$ L- U$ G$ H0 T) k  Z
{8 x+ e( H, P- e7 x2 V! T+ j
  pwndIEHTML = pwndIEShell->GetWindow(GW_CHILD);/ K" X1 n% C( U) m
}
6 R6 g' w) n& j
9 ?* Z! a3 ]6 d- H' ~7 l if(pwndIEHTML != NULL)
: H; h0 P" c* ~$ L, ?$ h0 c$ V$ F {" h# \1 l% }* C# G
  WPARAM wParam = MAKELONG(IDM_ADDFAVORITES, 1);//添加到收藏夹,换成IDM_OPTIONS就是打开internet选项。
& Z5 [4 r. q1 @8 w  pwndIEHTML->SendMessage(WM_COMMAND, wParam, (LPARAM)pwndIEHTML->m_hWnd);
: s8 O% K, R7 F; U6 ~5 M }  , K5 h/ {' c" M% P
}
# O+ }7 L: ], I/ D$ Z( G! P. W# Y  C: N! Z& o
通过改变wParam ,你可以实现几乎IE所有的已知的命令(另存为...、打印预览、创建桌面快捷方式等等)和一些未知的命令(比如进入编辑模式等等)。
% A) n0 Z1 S3 B" B- _
5 F# d) R. Y4 d0 E7 \好了,就介绍到这,具体的你可以通过观察MsHtmcid.h和实践来了解。$ j. ]) d+ Y* j% _4 a
最后,希望通过直接发送命令消息的方法能使你的工作事半功倍!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-5-5 09:08 , Processed in 0.014242 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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