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

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

[复制链接]
发表于 2003-12-22 16:59:03 | 显示全部楼层 |阅读模式
利用IE的命令直接操作WebBrowser控件" n% a# B6 Z' ?
+ [( V, p  a/ f  K
通常,我们对CHtmlView/WebBrowser控件进行打印、查看源文件、查找等操作麻烦的不得了7 r& b0 c5 v& p+ a6 v
详见http://support.microsoft.com/support/kb/articles/Q156/7/32.ASP7 J5 t" Z  n4 M2 f2 r
8 f6 W4 e  Z  y! ?3 Y  M
其次就是打开“Internet选项”、“添加到收藏夹”等方面的麻烦:9 @; O. c6 \6 I9 h7 S+ x
详见http://www.csdn.net/Expert/TopicView1.asp?id=620932$ o! `: V1 J) }/ G
# \% x! `3 J; o6 G# a
下面介绍的方法能够迅捷的通过短短几行代码完成上述操作,并且你还能完成一些特殊的操作(比如让IE控件进入像frontpage那样的编辑状态等等)
5 o0 m' m& Z% s" R1 U  h' X$ `# _2 g4 F( @

( P9 o( q3 P$ I$ O. r# J( p首先,在你的工程里填加对MsHtmcid.h的支持:/ o# u( `. F; I/ A! I: ~' Y
; B( Z' q8 j: D* f- D8 [" i& G
#include <MsHtmcid.h> //你可以在VC的头文件的目录中找到它,
7 p5 ~2 A- m; |$ H9 s9 d; b' r                                    //推荐你到MS网站下载最新文件以获得对IE6命令的支持。$ z6 W' F  j8 q, ?" w& P, Z; Z

: f, ]2 B- o% S& N  a$ \( N; \
; E( O' P2 `0 U然后你所要做的仅仅是找到IE控件的Internet Explorer_server窗口句柄发送命令给它。5 x5 V9 D! C; n/ A. P
下面给出部分演示,看了演示你就知道该怎么做了。' }4 z  s. J. E+ c, }0 o5 ~

: n3 y$ a/ G# N3 g将WebBrowser切换至编辑状态:/ k+ U0 s5 |: `, G

5 u2 ?& ?5 L6 p  d* s) X) b2 Evoid CWebBrowser2::OnGotoEditMode()
$ W# \4 {- p6 z5 P{; J+ y/ T' Y9 m  a  L" J6 w" l
CWnd* pwndIEShell = NULL;
9 {# y6 x, O/ V$ B# S2 j CWnd* pwndIEHTML = NULL;
: I- ^/ d: F7 W. m8 x! e% G : v4 F' ^9 j3 x3 [. E' ^& |
pwndIEShell = this->GetWindow(GW_CHILD); //this是CWebBrowser2指针: Z2 q, M; l0 v6 |  Q8 R
if (pwndIEShell)% M( {. ?$ k: J% R& L: m7 |
{
2 B; S( C4 c& F7 p/ j4 S  A6 h: `/ l  pwndIEHTML = pwndIEShell->GetWindow(GW_CHILD); //WebBrowser控件的窗口关系你可以通过spy++来观察,这里不累赘- z+ N2 e  y' w) p* l' G7 ^5 g5 V
}& W' H7 Q4 L, R' V' h
! y! C/ \2 H- S# \0 G
if(pwndIEHTML != NULL)8 q9 c& T. N/ N% j# r9 ~3 E
{6 [& b7 ?$ O2 |' U5 l
  WPARAM wParam = MAKELONG(IDM_EDITMODE, 1);//IDM_EDITMODE换为IDM_BROWSEMODE就返回浏览模式+ w, N) |- ?! i& q* ^
  pwndIEHTML->SendMessage(WM_COMMAND, wParam, (LPARAM)pwndIEHTML->m_hWnd);
- W2 D& ?* d0 D( n1 ~' q } " g& C- S& ]& ]2 Q- v. x
}
! W9 ]8 c* }2 L' K0 w
! [* z, A1 D# U' ~; U之后你会发现WebBrowser控件变的跟frontpage一样(早知道这样不用DHtmlEdit控件了,哈)
$ p$ l) c( M/ o- r
+ ^# N1 F( J) k# n, T3 MCHtmlView的实现跟上面稍有不同,因为多了个CFormView的缘故,具体代码如下:8 v8 J7 S8 \8 r0 x+ {

) @# h6 @- T& J- ^9 T. s# r* pvoid CYourhtmlView::OnAddtoFavorites()   a+ O' a5 i; J
{4 E4 _; b' |4 D6 E
CWnd* pwndWebControl = NULL;9 H/ O, \. K6 l$ w
CWnd* pwndIEShell = NULL;, Z) a( u4 F) H
CWnd* pwndIEHTML = NULL;0 {2 \/ T# H2 ~4 K7 R
5 }+ N# K: D2 F( {8 O0 i* I
pwndWebControl = GetWindow(GW_CHILD);
. h0 U+ F; U& W$ t if(pwndWebControl == NULL)
$ {2 ], O9 A& T! g, W3 ~  return;& {. o) t' E% W8 I$ `  [
pwndIEShell = pwndWebControl->GetWindow(GW_CHILD); # I  x7 f' T: j2 ?8 w
if (pwndIEShell)
1 M/ L3 f" J" x0 v' p {; {5 s( p- h+ F9 G8 g. l
  pwndIEHTML = pwndIEShell->GetWindow(GW_CHILD);5 F9 M; f* U* Y# `/ F7 u
}( a. L* _: P  E. n
7 G1 i3 r* B6 ?. ]
if(pwndIEHTML != NULL)+ S' @! S) H  z3 ?& D& O
{, x0 [2 t! I4 e, u
  WPARAM wParam = MAKELONG(IDM_ADDFAVORITES, 1);//添加到收藏夹,换成IDM_OPTIONS就是打开internet选项。
' n3 A7 c9 v9 H9 w$ t7 l  pwndIEHTML->SendMessage(WM_COMMAND, wParam, (LPARAM)pwndIEHTML->m_hWnd);
! X, }* S/ D5 R" _: r% O* l. [6 V }  * Y" G) B( X$ P$ d
}
8 P- Y$ C5 P9 h# \
7 o. {% Z  k. G* ~* I- N/ _通过改变wParam ,你可以实现几乎IE所有的已知的命令(另存为...、打印预览、创建桌面快捷方式等等)和一些未知的命令(比如进入编辑模式等等)。
2 a% O8 I1 {+ R5 G8 {6 F3 V+ y2 o
好了,就介绍到这,具体的你可以通过观察MsHtmcid.h和实践来了解。. `; ]. N' X* S. F
最后,希望通过直接发送命令消息的方法能使你的工作事半功倍!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-8-9 10:25 , Processed in 0.034800 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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