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

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

[复制链接]
发表于 2003-12-22 16:59:03 | 显示全部楼层 |阅读模式
利用IE的命令直接操作WebBrowser控件
6 I6 t& P5 u2 J' o. k6 [. @- W
, ~, c* q: C+ d/ a: r0 ~: p通常,我们对CHtmlView/WebBrowser控件进行打印、查看源文件、查找等操作麻烦的不得了
/ R/ h9 Z' m, r% `详见http://support.microsoft.com/support/kb/articles/Q156/7/32.ASP
- J4 @# R3 b/ {, X) ~, A2 j+ o  f+ e6 `9 W# n9 W2 o
其次就是打开“Internet选项”、“添加到收藏夹”等方面的麻烦:
; ~/ U+ E0 \) v/ p8 z+ J详见http://www.csdn.net/Expert/TopicView1.asp?id=620932
; P+ S& u: E5 D: w! B* J( p7 Y& L& K
下面介绍的方法能够迅捷的通过短短几行代码完成上述操作,并且你还能完成一些特殊的操作(比如让IE控件进入像frontpage那样的编辑状态等等)! A4 o+ }, T! O1 g: ^0 n7 K
( ^6 g' x, ~( [+ U5 S: u

" O0 P! }% }; u, `/ L- M% f" f- s首先,在你的工程里填加对MsHtmcid.h的支持:3 G5 P$ ]1 v9 O
3 t! W- g5 d& ?3 ]
#include <MsHtmcid.h> //你可以在VC的头文件的目录中找到它,) Y, L( @% l: `0 H$ _
                                    //推荐你到MS网站下载最新文件以获得对IE6命令的支持。
7 c" ?* i" c, x2 J1 T* k, [: c1 L: ~7 ^6 M# i4 }: }" q: A
0 Z- p. Q& I( |
然后你所要做的仅仅是找到IE控件的Internet Explorer_server窗口句柄发送命令给它。0 c5 q. X. s+ r  Z
下面给出部分演示,看了演示你就知道该怎么做了。' \1 z1 [) I! L7 V- r- I

' U" [& U- a4 {5 q( u将WebBrowser切换至编辑状态:& g9 |( y& a7 r0 M- u

4 e8 O% \6 [* g' U% jvoid CWebBrowser2::OnGotoEditMode()
! [7 n) R& Z4 q8 e{. ?8 e5 o/ l- s2 H: ?5 W" \
CWnd* pwndIEShell = NULL;
! T( l7 B" }" `6 ]0 m CWnd* pwndIEHTML = NULL;
7 l1 r3 s: ]8 K$ U2 I
+ }  t& j( z) M( a$ v: H pwndIEShell = this->GetWindow(GW_CHILD); //this是CWebBrowser2指针
& S% j8 W, V% q5 }' d6 } if (pwndIEShell)
) S1 M' t2 g# | {6 }' Y2 ]7 k% Z; i  c7 ~
  pwndIEHTML = pwndIEShell->GetWindow(GW_CHILD); //WebBrowser控件的窗口关系你可以通过spy++来观察,这里不累赘
# i! O1 Y6 b1 Q# s }
, y& y) g* E* M
, V  L# _& W8 S/ S$ A1 F& n if(pwndIEHTML != NULL)/ h6 z+ a. i+ q" B6 S' ^, @% |- p
{
/ v1 w$ `$ ~7 [( k  WPARAM wParam = MAKELONG(IDM_EDITMODE, 1);//IDM_EDITMODE换为IDM_BROWSEMODE就返回浏览模式
, ]0 L. m4 ?6 G  pwndIEHTML->SendMessage(WM_COMMAND, wParam, (LPARAM)pwndIEHTML->m_hWnd);$ _6 ?7 s  L( \( [0 b' J* O& Y- v. O& f( G
}
+ L  h0 D. v' e* L; c! s% Z$ F: X}
! x2 Q' b. K: d. x+ R1 g
3 \" `4 \5 [. L$ m7 D之后你会发现WebBrowser控件变的跟frontpage一样(早知道这样不用DHtmlEdit控件了,哈)
+ N6 ~  q0 Z. T; B" o5 v
) K6 i8 U! u) ]CHtmlView的实现跟上面稍有不同,因为多了个CFormView的缘故,具体代码如下:
9 Z! a# t% @- D/ W
- T& p8 z$ ]( ^4 e; k# ]/ \void CYourhtmlView::OnAddtoFavorites()
! Y) f: @8 {3 V4 j2 e0 z{
$ V& a/ B; W! n( N6 p4 f CWnd* pwndWebControl = NULL;
0 {7 t8 \6 ^7 U! f" t: `6 t CWnd* pwndIEShell = NULL;3 ?5 ~/ n* b" X5 Q0 B
CWnd* pwndIEHTML = NULL;$ b- @1 e* S* x/ K! C; `9 Q
/ d& _' Q4 U! ?7 ^
pwndWebControl = GetWindow(GW_CHILD);
3 X" ?2 W- e+ ^/ Z3 V if(pwndWebControl == NULL)
- k! N8 h, `- }2 e% a; A9 `  return;- M' l2 o5 k4 Y% n- [4 u5 T" D1 X
pwndIEShell = pwndWebControl->GetWindow(GW_CHILD); ( I4 Y0 n$ [% b# W4 }# w& X: E
if (pwndIEShell)
' Y( @# t) W- b& j; d* Z4 H! B4 k* @ {
0 ]$ {% q4 C. I, c  h) i3 g) D& A  pwndIEHTML = pwndIEShell->GetWindow(GW_CHILD);) M3 N+ `/ @, q* T/ H& L
}
2 R' V/ @' W. i; r # ?( E+ N4 B: t& i! Z
if(pwndIEHTML != NULL)
; |1 {" X  r5 S& n {
' v4 V' y2 ]( H. b  WPARAM wParam = MAKELONG(IDM_ADDFAVORITES, 1);//添加到收藏夹,换成IDM_OPTIONS就是打开internet选项。
2 f/ U7 `! w3 ^/ O$ Y. `2 b' u  pwndIEHTML->SendMessage(WM_COMMAND, wParam, (LPARAM)pwndIEHTML->m_hWnd);8 y! }" y8 G; G/ j& x. Z
}  6 q& L+ I$ i" N
}
- G9 N, @! h& ?- _/ m4 Z1 R3 u. u* o& @5 o3 T7 a$ I
通过改变wParam ,你可以实现几乎IE所有的已知的命令(另存为...、打印预览、创建桌面快捷方式等等)和一些未知的命令(比如进入编辑模式等等)。$ e! Y& z, v% v. T. K% g" I
% `" t; O5 z% G: n8 g7 r  B
好了,就介绍到这,具体的你可以通过观察MsHtmcid.h和实践来了解。5 a$ V  q0 e* j. @1 G3 p5 u) @
最后,希望通过直接发送命令消息的方法能使你的工作事半功倍!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-9-30 11:17 , Processed in 0.036206 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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