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

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

[复制链接]
发表于 2003-12-22 16:59:03 | 显示全部楼层 |阅读模式
利用IE的命令直接操作WebBrowser控件
2 t8 `# d/ ?; v- p7 ]9 N2 o! t3 ^' Q
通常,我们对CHtmlView/WebBrowser控件进行打印、查看源文件、查找等操作麻烦的不得了6 z9 t! c: n& W2 n1 g. K
详见http://support.microsoft.com/support/kb/articles/Q156/7/32.ASP1 k. d+ z- J" U- _) Y8 w( v

7 z' B/ r! V' ?8 R! |: f其次就是打开“Internet选项”、“添加到收藏夹”等方面的麻烦:2 s" ]$ X5 f8 C% A9 l  j8 m! o
详见http://www.csdn.net/Expert/TopicView1.asp?id=6209321 \3 _9 r( H. D7 d+ t

$ \  S7 `& D: D下面介绍的方法能够迅捷的通过短短几行代码完成上述操作,并且你还能完成一些特殊的操作(比如让IE控件进入像frontpage那样的编辑状态等等)0 C; x! E# _9 E% }- _' L

# d7 x1 l( X4 [- o: p
8 A2 I4 D( m3 ~. ?. @首先,在你的工程里填加对MsHtmcid.h的支持:5 `+ A. k( X- ^9 }0 p( {2 L
9 ^( F  e1 b2 b1 g$ k" e' h( o
#include <MsHtmcid.h> //你可以在VC的头文件的目录中找到它,7 y; }( e( S7 `; Y
                                    //推荐你到MS网站下载最新文件以获得对IE6命令的支持。! E' w% |7 O& \( j  u  f
9 j! w6 X9 d& U2 e8 l' s8 J  C4 C
  i; T+ E' V' [% y
然后你所要做的仅仅是找到IE控件的Internet Explorer_server窗口句柄发送命令给它。
3 v9 _$ s0 c% P$ ^下面给出部分演示,看了演示你就知道该怎么做了。
, q. R; g! j5 d* E. ?* D+ z- Q, [8 R2 s7 W
将WebBrowser切换至编辑状态:6 c8 ?' q* L: X9 J) [+ ~6 L
% k1 j/ c; t! l% I
void CWebBrowser2::OnGotoEditMode()
4 X, J: @. ]" C5 U{
( F* ?4 d; V8 ^/ _$ g CWnd* pwndIEShell = NULL;7 @+ m3 n0 U. u) Z, X. X
CWnd* pwndIEHTML = NULL;3 u5 \' c- V& ^/ ?
3 h! S3 J. v8 R  g
pwndIEShell = this->GetWindow(GW_CHILD); //this是CWebBrowser2指针9 ^& d: r  X! F) n# `: |
if (pwndIEShell)1 ]6 c  p* i- c, W9 [, H  t
{
# @# p9 v0 f0 Y& |  B  pwndIEHTML = pwndIEShell->GetWindow(GW_CHILD); //WebBrowser控件的窗口关系你可以通过spy++来观察,这里不累赘: R! ]0 A4 O" Q5 |( Q6 \, O  K
}0 z7 R% n( D+ c5 d, Q2 j
0 H3 ?" ]) }0 x4 [9 T+ ^9 a- r
if(pwndIEHTML != NULL)
: s8 x; j+ l' z4 t0 w- i: j  d {
) Q! W9 p. Z% X4 p0 n# D  WPARAM wParam = MAKELONG(IDM_EDITMODE, 1);//IDM_EDITMODE换为IDM_BROWSEMODE就返回浏览模式" H. S7 m7 }$ l+ m
  pwndIEHTML->SendMessage(WM_COMMAND, wParam, (LPARAM)pwndIEHTML->m_hWnd);
0 Z8 y7 l3 ~; W! `7 |+ W }
. J1 D$ e1 X) r}0 B  [, S% _7 g& N! b

5 ~' q# y; _$ }之后你会发现WebBrowser控件变的跟frontpage一样(早知道这样不用DHtmlEdit控件了,哈)) d" K# G: {' X) b* ^" O

0 m5 e- a. ^, p2 O# ]4 r6 [CHtmlView的实现跟上面稍有不同,因为多了个CFormView的缘故,具体代码如下:. {' I4 w- U* t2 V! ?
" I0 f+ R  v* o* K; ]
void CYourhtmlView::OnAddtoFavorites() 6 c4 g7 v: G( g: Y) k
{
) {1 b3 k- E& V' |; n CWnd* pwndWebControl = NULL;* c2 W; S, k. Z) }+ c* A, `( S
CWnd* pwndIEShell = NULL;8 \! l  z: m5 k: ?8 A5 q
CWnd* pwndIEHTML = NULL;# t1 p& H9 ]! P" q

- `6 p$ u/ X  D- b  b; p pwndWebControl = GetWindow(GW_CHILD);3 m! i6 R$ t2 m  E. j9 j
if(pwndWebControl == NULL)$ B, g6 e9 w+ y" u6 N. x
  return;7 a0 h& u/ o( S# K- q! }9 P: T, j
pwndIEShell = pwndWebControl->GetWindow(GW_CHILD); ! j, }1 H! j/ u/ R. |' O
if (pwndIEShell)
( H/ T8 _$ u7 \& Z' F  Q& P {) ^1 q% H0 n  {7 t8 m8 A
  pwndIEHTML = pwndIEShell->GetWindow(GW_CHILD);: {/ O: Z( b4 P, h8 E& Q3 z7 H
}* x: [- S/ H+ O" y( d
: t8 \! e# D& c% n2 U7 ^, n
if(pwndIEHTML != NULL)
6 N$ L$ b2 E2 d- j  Q {* o: J. L1 g3 t) d
  WPARAM wParam = MAKELONG(IDM_ADDFAVORITES, 1);//添加到收藏夹,换成IDM_OPTIONS就是打开internet选项。+ }/ b8 B% G% N. o* w* T
  pwndIEHTML->SendMessage(WM_COMMAND, wParam, (LPARAM)pwndIEHTML->m_hWnd);
3 ^: n* V+ r& B9 M  D7 L) [ }  
) \9 {* ^5 C! I}
$ l3 F8 t7 [1 }" q9 g: C5 j) S8 I9 J- p0 G9 @" n8 @' A5 O, B
通过改变wParam ,你可以实现几乎IE所有的已知的命令(另存为...、打印预览、创建桌面快捷方式等等)和一些未知的命令(比如进入编辑模式等等)。% R7 h+ \. Q4 A1 A
0 L7 S8 e+ [: J. z- d( H
好了,就介绍到这,具体的你可以通过观察MsHtmcid.h和实践来了解。3 t: @) Z* }* K; J0 I
最后,希望通过直接发送命令消息的方法能使你的工作事半功倍!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-11-14 19:59 , Processed in 0.018451 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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