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

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

[复制链接]
发表于 2003-12-22 16:59:03 | 显示全部楼层 |阅读模式
利用IE的命令直接操作WebBrowser控件
" `% {2 ?% E; ~" Y* u+ V* j+ l& A) u" I; R9 A
通常,我们对CHtmlView/WebBrowser控件进行打印、查看源文件、查找等操作麻烦的不得了
, G0 x0 k0 l# J: X: @* A/ S  ^详见http://support.microsoft.com/support/kb/articles/Q156/7/32.ASP
" M$ ?: [6 `8 u# _, C! |3 o8 C+ {9 o2 v3 J' _
其次就是打开“Internet选项”、“添加到收藏夹”等方面的麻烦:
, o3 x/ x+ G& `详见http://www.csdn.net/Expert/TopicView1.asp?id=6209322 a8 S3 r% ~, s! y0 U

% b  E' O9 m' x: S* ?! R/ E% ^/ J下面介绍的方法能够迅捷的通过短短几行代码完成上述操作,并且你还能完成一些特殊的操作(比如让IE控件进入像frontpage那样的编辑状态等等)
( R7 t# N7 |/ S  o$ |2 }
/ p; T/ v+ c- ?5 Z, d( v
. H2 W$ G9 K8 H/ U5 m首先,在你的工程里填加对MsHtmcid.h的支持:
! }8 b) s* O" P' Y3 [
$ R8 p1 t* @; r3 n #include <MsHtmcid.h> //你可以在VC的头文件的目录中找到它,7 X7 G; n2 F. x
                                    //推荐你到MS网站下载最新文件以获得对IE6命令的支持。
& g! E. L$ @% y2 o% x& M+ ?. L9 v" f, R2 d  J/ n  B' ]1 A

2 z. g5 k/ R+ c: z然后你所要做的仅仅是找到IE控件的Internet Explorer_server窗口句柄发送命令给它。
! I. P2 B+ q6 X' T1 M% @下面给出部分演示,看了演示你就知道该怎么做了。; H$ D: y  G. c$ i# W
# R& i1 E  c0 a( D. d
将WebBrowser切换至编辑状态:; x8 Z$ x5 T( d
6 S- v6 S9 ]$ V" G
void CWebBrowser2::OnGotoEditMode()
: h, z3 O3 w* j9 T1 O5 @( [{
/ O3 V* b, r6 {0 Z CWnd* pwndIEShell = NULL;
; S  V  Z; b: e CWnd* pwndIEHTML = NULL;# l* K7 F* A" B

: W$ [5 I; X  B+ Q pwndIEShell = this->GetWindow(GW_CHILD); //this是CWebBrowser2指针5 Q  q& }" w- p" N& {% t* b
if (pwndIEShell)$ o4 G' g& b& z
{$ E4 ~: R; ~5 u
  pwndIEHTML = pwndIEShell->GetWindow(GW_CHILD); //WebBrowser控件的窗口关系你可以通过spy++来观察,这里不累赘$ q8 d( \9 r  e& B6 H
}
8 U5 K( n, f) J* f# v - ^5 A) ~$ }  ~) u* m# Y3 T
if(pwndIEHTML != NULL)
2 @$ ^/ I/ A. P1 V& c {
5 M4 c- i8 s& N1 Y2 C9 b  WPARAM wParam = MAKELONG(IDM_EDITMODE, 1);//IDM_EDITMODE换为IDM_BROWSEMODE就返回浏览模式2 A, k" p8 _# i+ ^5 l* Q  E. H$ a
  pwndIEHTML->SendMessage(WM_COMMAND, wParam, (LPARAM)pwndIEHTML->m_hWnd);
# a: o2 r# `6 s& ]0 z }
) S2 k/ V& p7 e3 S  u: x! \2 r' g! W5 t}
# c0 E" S0 G2 \7 r) w3 @$ n. Z$ I/ W! B( c0 ?- U% I  K/ f! n7 d
之后你会发现WebBrowser控件变的跟frontpage一样(早知道这样不用DHtmlEdit控件了,哈)5 r/ @, \- p6 z& G! W  W: L

; s1 c7 y7 o, j+ B$ _CHtmlView的实现跟上面稍有不同,因为多了个CFormView的缘故,具体代码如下:5 C0 c- k' O- a2 n. n

+ y- O% o, ]) ~! s+ i  ~8 pvoid CYourhtmlView::OnAddtoFavorites() 5 `$ O% k8 A1 d4 e" W5 p0 c* D8 ?2 q
{6 k2 K. Z( m, v, D: s/ s
CWnd* pwndWebControl = NULL;
! c8 N) y8 E/ z$ p# `8 K1 V7 e CWnd* pwndIEShell = NULL;& k% f4 i% }8 E
CWnd* pwndIEHTML = NULL;& X! Z- I" d& z& b6 \' g, Y3 j8 i9 f4 G
5 L8 v3 r* a, n5 S
pwndWebControl = GetWindow(GW_CHILD);' U+ t$ @7 s1 _( ?& _4 g2 Z
if(pwndWebControl == NULL)
! N+ Q4 O6 s, N0 x) ^5 Y  return;' N6 M1 {6 J# J6 E, Z( h
pwndIEShell = pwndWebControl->GetWindow(GW_CHILD);
8 E, e$ Q, b8 N) ?' U9 ] if (pwndIEShell). S5 ]# m/ k, ~8 G
{
3 ?5 v: }7 s. [- p, Y  pwndIEHTML = pwndIEShell->GetWindow(GW_CHILD);
  ]- c/ D" M7 k }; D! A% {1 T4 G  [0 @' U
: v+ I" g9 f+ P" i0 s+ y
if(pwndIEHTML != NULL)" C0 N* ~# L! C! e6 A
{) B; x! T" ?1 U3 Y  t# ^! u2 ]
  WPARAM wParam = MAKELONG(IDM_ADDFAVORITES, 1);//添加到收藏夹,换成IDM_OPTIONS就是打开internet选项。1 R/ `' a9 l, Z+ D
  pwndIEHTML->SendMessage(WM_COMMAND, wParam, (LPARAM)pwndIEHTML->m_hWnd);
# g8 Z+ B2 A# I% n }  
: L, G6 g1 O6 y2 ^0 J}
( L/ d6 P$ a$ Z9 c% ]8 }
0 u; s  A* }; {通过改变wParam ,你可以实现几乎IE所有的已知的命令(另存为...、打印预览、创建桌面快捷方式等等)和一些未知的命令(比如进入编辑模式等等)。  s! u4 U6 d: Q
; K& r2 M. n6 m7 Q( s" N" }) c
好了,就介绍到这,具体的你可以通过观察MsHtmcid.h和实践来了解。
  M/ D. W. ]2 @最后,希望通过直接发送命令消息的方法能使你的工作事半功倍!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-5-5 04:47 , Processed in 0.016373 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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