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

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

[复制链接]
发表于 2003-12-22 16:59:03 | 显示全部楼层 |阅读模式
利用IE的命令直接操作WebBrowser控件4 `( A$ B. \) n# X$ U* j

4 u9 h& m5 r, h" W: t通常,我们对CHtmlView/WebBrowser控件进行打印、查看源文件、查找等操作麻烦的不得了
' U8 P; O) |: v; B* s& `详见http://support.microsoft.com/support/kb/articles/Q156/7/32.ASP+ E1 ]* K* e: r* `; u0 W
3 B- h/ m+ G& R  y7 z, S2 F
其次就是打开“Internet选项”、“添加到收藏夹”等方面的麻烦:
6 e$ B% p6 [8 h" Q. H详见http://www.csdn.net/Expert/TopicView1.asp?id=620932: {2 m3 W, O! D4 X9 U; d
$ B- b& [, \6 u3 s( w
下面介绍的方法能够迅捷的通过短短几行代码完成上述操作,并且你还能完成一些特殊的操作(比如让IE控件进入像frontpage那样的编辑状态等等)
& k5 {% y5 i* [/ A; V' u- |4 ^' |# o2 S7 u- \" T: g. i
0 I( z: ^5 J8 y, v3 f
首先,在你的工程里填加对MsHtmcid.h的支持:+ o* ^6 _+ j) J2 P

7 M0 }: j& b2 v& o  ]7 R1 v  f #include <MsHtmcid.h> //你可以在VC的头文件的目录中找到它,
, j8 d2 Z1 \/ M9 ]) u) R1 m0 I                                    //推荐你到MS网站下载最新文件以获得对IE6命令的支持。. g# P# [6 q5 H. X3 F. }1 L

1 W" @) P, |9 w; Z, S. s: [/ g% C- I& R3 y6 M; C5 g
然后你所要做的仅仅是找到IE控件的Internet Explorer_server窗口句柄发送命令给它。* k# _+ J' Q$ q/ ~
下面给出部分演示,看了演示你就知道该怎么做了。
1 q; _+ M& K( S: C- _
0 ~+ r0 b/ @. P  `& a& h# t9 S- K将WebBrowser切换至编辑状态:* w3 ?/ q8 M* \. Y
$ U! g2 t$ T& `' `$ A5 C$ X
void CWebBrowser2::OnGotoEditMode() ' g5 u5 C9 _* @: U5 J
{% L, _1 v3 I* J/ h* S
CWnd* pwndIEShell = NULL;
3 e7 J( W$ U; e! @# q: A+ C- z$ C CWnd* pwndIEHTML = NULL;% ~8 c0 ]' _) Q# F

" @# o. V+ s6 U* Z- D pwndIEShell = this->GetWindow(GW_CHILD); //this是CWebBrowser2指针; `% r6 _9 ~3 x0 l' M: E9 G
if (pwndIEShell)4 [( o; J# ?. I; L8 k! Z. t
{0 j) r  s' ?: ~: r
  pwndIEHTML = pwndIEShell->GetWindow(GW_CHILD); //WebBrowser控件的窗口关系你可以通过spy++来观察,这里不累赘
1 _, T5 V$ X8 F3 k  C }& I$ m# v! q0 G) h! K) t; [) L
, P' e; W! L! t9 W" t+ [+ c" u
if(pwndIEHTML != NULL)
7 d% w8 a( J! y6 O3 \$ o# O5 z6 V {, A- P4 K4 P2 G2 d) E5 o
  WPARAM wParam = MAKELONG(IDM_EDITMODE, 1);//IDM_EDITMODE换为IDM_BROWSEMODE就返回浏览模式
7 Z$ ]3 t- |" ~; {) s6 R0 j8 K( s  pwndIEHTML->SendMessage(WM_COMMAND, wParam, (LPARAM)pwndIEHTML->m_hWnd);! n! W2 y+ Z( B5 y. i0 W
} % }2 o5 {1 Z. {# ^
}
) I/ }1 `" c, S7 f
# z' V5 d  R3 e之后你会发现WebBrowser控件变的跟frontpage一样(早知道这样不用DHtmlEdit控件了,哈)- G# W0 a* z; u

0 T9 H0 x3 [% R' K7 BCHtmlView的实现跟上面稍有不同,因为多了个CFormView的缘故,具体代码如下:# K) Q, y8 L% w- ^2 ]! {
+ r5 C3 q  u& @
void CYourhtmlView::OnAddtoFavorites()
! s, |4 s9 l2 w. N, S# `; J{
7 }) t: k" |, b% V5 h& a CWnd* pwndWebControl = NULL;
' r: d  V( X8 M3 M CWnd* pwndIEShell = NULL;# x9 t- G7 @1 ?3 p  X3 t/ {9 z
CWnd* pwndIEHTML = NULL;1 ~( h+ F- @. k6 S- b. u

% q) A8 W. Z) F- l pwndWebControl = GetWindow(GW_CHILD);. U. w# t( }  U6 v" X
if(pwndWebControl == NULL)
' Z& V3 Q9 r+ |. X' R) Z$ W  return;9 |5 `! A6 S/ v, V) w0 `& P
pwndIEShell = pwndWebControl->GetWindow(GW_CHILD); 8 o: S6 D4 A. h' S$ V' y7 p( r0 E
if (pwndIEShell)7 S/ y$ w. A5 s/ U' j; x
{
# f/ O- V8 j1 m. F) M: N( E5 A  pwndIEHTML = pwndIEShell->GetWindow(GW_CHILD);
6 U! H. X! \5 Z: G  h0 O }2 M! T! I4 m, }3 p

3 M9 D7 G" b: k& [: w# @ if(pwndIEHTML != NULL)' v% Y6 S$ F" h; [+ G7 E  P
{
; O6 h" _* N5 c! o  K% h  WPARAM wParam = MAKELONG(IDM_ADDFAVORITES, 1);//添加到收藏夹,换成IDM_OPTIONS就是打开internet选项。' ^% R, x4 Q( v% H# T  s
  pwndIEHTML->SendMessage(WM_COMMAND, wParam, (LPARAM)pwndIEHTML->m_hWnd);& I- E2 K0 i' x, H9 e
}  
# `" H: j  L- @( ~) i  v6 m}
; c/ h6 |7 O; g9 y' n1 Z0 Y+ s" H  e* p2 n
通过改变wParam ,你可以实现几乎IE所有的已知的命令(另存为...、打印预览、创建桌面快捷方式等等)和一些未知的命令(比如进入编辑模式等等)。
- i4 Z/ `2 {+ N6 _2 P% s, y
/ N. M0 T" S* r% E+ C$ h0 ^. v好了,就介绍到这,具体的你可以通过观察MsHtmcid.h和实践来了解。
9 N: ~; l" h: Q  W0 n1 g最后,希望通过直接发送命令消息的方法能使你的工作事半功倍!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-5-2 09:00 , Processed in 0.020190 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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