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

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

[复制链接]
发表于 2003-12-22 16:59:03 | 显示全部楼层 |阅读模式
利用IE的命令直接操作WebBrowser控件# `" I9 G, k3 F( _9 |, ?8 V# M
9 D- [+ \: s( L
通常,我们对CHtmlView/WebBrowser控件进行打印、查看源文件、查找等操作麻烦的不得了( A9 n1 W# L& s9 Z1 v
详见http://support.microsoft.com/support/kb/articles/Q156/7/32.ASP
7 U, Y* W4 c  p1 ~& C( m
% ]; H0 U, i  d7 j8 g( F0 `8 |+ F  E其次就是打开“Internet选项”、“添加到收藏夹”等方面的麻烦:$ d' j5 \: a: I! E
详见http://www.csdn.net/Expert/TopicView1.asp?id=620932
& }- K% V$ x) q* Q( Z2 ~+ r/ u: F1 V( Y% e) N
下面介绍的方法能够迅捷的通过短短几行代码完成上述操作,并且你还能完成一些特殊的操作(比如让IE控件进入像frontpage那样的编辑状态等等)& K0 V$ {1 E, s* X' ~  p

+ E6 s8 n$ A/ n1 X7 Y5 d1 p. J! p
首先,在你的工程里填加对MsHtmcid.h的支持:
9 I* y  q2 I) v% G& h5 M, ?
3 M/ K& ]$ H: d! D; t" f #include <MsHtmcid.h> //你可以在VC的头文件的目录中找到它,  D+ N, E, r+ `; w, o
                                    //推荐你到MS网站下载最新文件以获得对IE6命令的支持。
3 l2 ^! `2 g- ^6 P0 {$ b3 s1 i$ O/ @  z
: y. m4 f9 n2 r1 b
然后你所要做的仅仅是找到IE控件的Internet Explorer_server窗口句柄发送命令给它。
0 q$ X9 H5 ]' J4 T$ }下面给出部分演示,看了演示你就知道该怎么做了。: ~3 b8 B& g6 c& M+ \( h) ?. {6 s" d
0 q. D$ y5 R8 L- b
将WebBrowser切换至编辑状态:
$ Z' B+ O" H  f, G9 m! c$ K6 v$ k8 ^; I( ?# }
void CWebBrowser2::OnGotoEditMode() ) x4 z+ p/ J$ A& B/ C
{8 t% {6 q  b, \3 f" C, s
CWnd* pwndIEShell = NULL;
' j( {# u1 x- b& m: P CWnd* pwndIEHTML = NULL;+ a- [4 ~( n4 f% C' ?$ C0 n

7 w- I# g" O- A! K% P% d7 G pwndIEShell = this->GetWindow(GW_CHILD); //this是CWebBrowser2指针- M" m0 `; O& ]+ I, j' ]7 v7 _0 J# f
if (pwndIEShell)9 K! ^! j: V* U- p
{
( R. C  q; D# D# X/ B2 a  pwndIEHTML = pwndIEShell->GetWindow(GW_CHILD); //WebBrowser控件的窗口关系你可以通过spy++来观察,这里不累赘0 Q* {, |! q" y3 w9 C  W$ \
}
2 b" B) j, |' }8 b" ^) n7 e
. q5 L6 w) `* z% Y; F6 }" J+ A- x1 [ if(pwndIEHTML != NULL)
! d# j, f* E3 o% c {
% [: Z. M3 X3 j$ E) ]; b  WPARAM wParam = MAKELONG(IDM_EDITMODE, 1);//IDM_EDITMODE换为IDM_BROWSEMODE就返回浏览模式4 V; ]  z4 Z  {9 q  o
  pwndIEHTML->SendMessage(WM_COMMAND, wParam, (LPARAM)pwndIEHTML->m_hWnd);
# i* L" ^- {2 U } $ ?$ I' h7 `' _
}+ s% q; f/ x" j  G* V0 R- ?: O+ d

, p8 k# e8 _* @% S" ?之后你会发现WebBrowser控件变的跟frontpage一样(早知道这样不用DHtmlEdit控件了,哈)
" V8 p! ~1 [7 ^: o" N
7 D3 Q, C* i9 I7 M1 hCHtmlView的实现跟上面稍有不同,因为多了个CFormView的缘故,具体代码如下:, e* E5 v; _* ~; U6 y6 y+ T0 |2 M

2 f9 A8 D% E# i' |. V0 K1 avoid CYourhtmlView::OnAddtoFavorites()
1 k" p6 E' P% Y  ]3 k- m{
! G% \% K, N7 `5 Q' I+ _ CWnd* pwndWebControl = NULL;# F& ]( a$ w$ v8 ^6 g5 s9 R
CWnd* pwndIEShell = NULL;
' W2 t" [: Q: x CWnd* pwndIEHTML = NULL;
- A9 g  n3 r- \  P% ~. b2 X$ A/ @+ ^2 w' P
pwndWebControl = GetWindow(GW_CHILD);/ s% Z  K, {4 W0 N% v/ r) @( a" q
if(pwndWebControl == NULL)5 {8 X  @+ n% L' v( G3 c) ^
  return;
5 H! [- d4 |4 c& P& \$ }6 X. \ pwndIEShell = pwndWebControl->GetWindow(GW_CHILD);
8 O, ^7 s- f" e8 f if (pwndIEShell)! c& R5 }- r' ]( W" n6 i4 Q7 g* D
{' f% e1 J7 x  s3 S- L
  pwndIEHTML = pwndIEShell->GetWindow(GW_CHILD);
9 Q# t% K4 n0 O" v( Q1 Y }
7 g8 z) V' p4 y+ K
: g2 k: x  T0 w& }5 C if(pwndIEHTML != NULL)
7 Y) ]% d& K' a, C0 P* a1 X( z {0 }1 v5 T) M7 w, {1 h
  WPARAM wParam = MAKELONG(IDM_ADDFAVORITES, 1);//添加到收藏夹,换成IDM_OPTIONS就是打开internet选项。+ R. ~7 z/ ^$ t; m: w. Y
  pwndIEHTML->SendMessage(WM_COMMAND, wParam, (LPARAM)pwndIEHTML->m_hWnd);5 I* D7 S  c+ C% @0 W! k. Q7 A
}  
5 P) y% ], G- q}' `0 g; ]# l  D# g+ A5 @2 V
, R' Y5 r# }: H+ o0 x
通过改变wParam ,你可以实现几乎IE所有的已知的命令(另存为...、打印预览、创建桌面快捷方式等等)和一些未知的命令(比如进入编辑模式等等)。
$ l' h: A: _$ Z  _% i! F1 b2 J& Z2 C5 R5 K  a3 S
好了,就介绍到这,具体的你可以通过观察MsHtmcid.h和实践来了解。
. v( H7 H# c& I; k) X最后,希望通过直接发送命令消息的方法能使你的工作事半功倍!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-8-9 06:22 , Processed in 0.034296 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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