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

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

[复制链接]
发表于 2003-12-22 16:59:03 | 显示全部楼层 |阅读模式
利用IE的命令直接操作WebBrowser控件
0 n* V' T- S, t# I5 R5 s- b+ n/ t! |# f' u
通常,我们对CHtmlView/WebBrowser控件进行打印、查看源文件、查找等操作麻烦的不得了  r, t+ h3 T* V6 a0 c
详见http://support.microsoft.com/support/kb/articles/Q156/7/32.ASP$ d# u% T4 b% M

. D% q0 @# n$ V其次就是打开“Internet选项”、“添加到收藏夹”等方面的麻烦:* Y$ ?% Y  v- J' r0 K
详见http://www.csdn.net/Expert/TopicView1.asp?id=620932
) L, q7 [# l1 D+ w$ v
/ M) V: J/ a5 @5 O! U下面介绍的方法能够迅捷的通过短短几行代码完成上述操作,并且你还能完成一些特殊的操作(比如让IE控件进入像frontpage那样的编辑状态等等)
4 `  U: f% e- X9 j! v( X4 G) s$ s
1 ~& X" ~; l1 H5 ?4 c& Z% d
首先,在你的工程里填加对MsHtmcid.h的支持:
* @+ w9 N- e; j8 r) z" N. `4 p9 i7 O5 j1 o' B
#include <MsHtmcid.h> //你可以在VC的头文件的目录中找到它,
4 w0 X2 f$ c% _# q. o& l# n                                    //推荐你到MS网站下载最新文件以获得对IE6命令的支持。, T" G+ @% R+ v; q" V# V$ v# t' u
( C) z- ~, W$ ^

3 p* m7 b. X7 ~& T然后你所要做的仅仅是找到IE控件的Internet Explorer_server窗口句柄发送命令给它。
( a' F6 I1 R( a- K9 w下面给出部分演示,看了演示你就知道该怎么做了。
4 c0 T- ~" ^: }: l4 a
9 R) ^+ e- _$ t1 L" U+ ^2 Z将WebBrowser切换至编辑状态:
1 x# n& d. S/ x' @, \  F2 B' ]
0 ]7 ^0 o" N! y4 m8 z0 |- evoid CWebBrowser2::OnGotoEditMode() 2 X. ~' R  b' X/ D) y+ H! R
{2 C8 P7 o+ a+ W* l: j9 C7 e5 O+ e
CWnd* pwndIEShell = NULL;
1 u6 J/ g2 P5 }6 e$ j' u1 A CWnd* pwndIEHTML = NULL;9 j9 b, D9 f9 D6 g  n, e7 r2 ~" E

1 P# T6 y. N, v! y1 h pwndIEShell = this->GetWindow(GW_CHILD); //this是CWebBrowser2指针
& i6 x: [1 {6 p# f if (pwndIEShell)
' T5 h& l! q6 d" P2 ]$ A' F: l {. J/ j- s  r8 ~. K' s+ e
  pwndIEHTML = pwndIEShell->GetWindow(GW_CHILD); //WebBrowser控件的窗口关系你可以通过spy++来观察,这里不累赘# v: J' ?$ Q5 J# g) X9 B
}+ i' k/ q# e8 K$ _6 ^6 n

5 ?' S+ [3 H3 v1 ?/ k if(pwndIEHTML != NULL)
9 F" W# Y0 n3 v8 Q1 g2 ~! F4 y {0 [& R$ l9 O/ y; i
  WPARAM wParam = MAKELONG(IDM_EDITMODE, 1);//IDM_EDITMODE换为IDM_BROWSEMODE就返回浏览模式/ |( ~' |9 L5 U; s4 p7 T% P9 c
  pwndIEHTML->SendMessage(WM_COMMAND, wParam, (LPARAM)pwndIEHTML->m_hWnd);, W! J7 d2 p; }+ N5 v* H7 m
} 4 o, j/ T. O7 Z+ A( I' Q
}
8 t& e. z/ K  K+ x3 x0 z: \& N9 l8 G3 Q( V( ^
之后你会发现WebBrowser控件变的跟frontpage一样(早知道这样不用DHtmlEdit控件了,哈)& X+ D) v  c  |/ J# f

! _) u9 F" t: h" ]6 j, c; A, BCHtmlView的实现跟上面稍有不同,因为多了个CFormView的缘故,具体代码如下:8 e$ o1 h3 c% Y% J4 L( g1 o

9 b/ p5 e: T! T$ Wvoid CYourhtmlView::OnAddtoFavorites() , P- t3 B0 t$ o- E3 ]* i1 O
{3 {8 U% G) m! U* P+ B
CWnd* pwndWebControl = NULL;) _! K; z  t6 y
CWnd* pwndIEShell = NULL;
% }9 J5 c1 h4 z CWnd* pwndIEHTML = NULL;; E, n( M1 F( _$ b# s# H( h

! I& e" V+ ~& T1 J- i1 @8 ]5 c pwndWebControl = GetWindow(GW_CHILD);
0 O5 E" q5 h# t if(pwndWebControl == NULL)
! R$ s$ F8 E8 ^* D  return;  ?+ _: }9 \8 ^' I. }; g4 O( x5 r
pwndIEShell = pwndWebControl->GetWindow(GW_CHILD);
6 ^$ t* f  i& L$ F if (pwndIEShell)$ M, w2 O8 j4 ]! o
{+ L9 H$ g4 l$ n# }' ?
  pwndIEHTML = pwndIEShell->GetWindow(GW_CHILD);' W( z6 B" h$ M  O
}3 z# `9 j8 W  i7 \0 m' x7 m+ |
3 s8 K- `4 T. G. }  x. u
if(pwndIEHTML != NULL)$ z% _- B0 q! `, a: Q
{
6 K5 l! N3 Y5 A! D+ T# X' {6 q  WPARAM wParam = MAKELONG(IDM_ADDFAVORITES, 1);//添加到收藏夹,换成IDM_OPTIONS就是打开internet选项。. ~  h1 D+ S8 y  C2 W# j0 a* ^
  pwndIEHTML->SendMessage(WM_COMMAND, wParam, (LPARAM)pwndIEHTML->m_hWnd);6 {- O: A* v) o- Y5 E5 K
}  8 x5 k( C- |+ }7 Z( j. o( R: D
}
9 ~3 P3 Q& G6 E% ?# u% S! y- y* ]) K+ f: X) g8 a
通过改变wParam ,你可以实现几乎IE所有的已知的命令(另存为...、打印预览、创建桌面快捷方式等等)和一些未知的命令(比如进入编辑模式等等)。
, j4 R2 U2 `0 N' N8 m( S7 C. u' g
3 d  F6 U8 D# }; n2 F好了,就介绍到这,具体的你可以通过观察MsHtmcid.h和实践来了解。. p3 k; n' X6 b+ |5 y8 m
最后,希望通过直接发送命令消息的方法能使你的工作事半功倍!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-6-18 09:13 , Processed in 0.016911 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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