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

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

[复制链接]
发表于 2003-12-22 16:59:03 | 显示全部楼层 |阅读模式
利用IE的命令直接操作WebBrowser控件
  N$ L) [2 I3 R! i# E0 T! `& z
( y. E: b3 J/ l# c# r通常,我们对CHtmlView/WebBrowser控件进行打印、查看源文件、查找等操作麻烦的不得了
# b( p  u# o: ]' G8 H) F详见http://support.microsoft.com/support/kb/articles/Q156/7/32.ASP( k# N' K3 X4 t6 b3 O/ C
' |" @- T7 V4 o8 l9 }
其次就是打开“Internet选项”、“添加到收藏夹”等方面的麻烦:( e- P5 g8 [- a5 f
详见http://www.csdn.net/Expert/TopicView1.asp?id=620932
3 H* }. s+ x/ g8 S3 [6 R! ~# i" {& |, q2 P) `4 k/ F* v3 S
下面介绍的方法能够迅捷的通过短短几行代码完成上述操作,并且你还能完成一些特殊的操作(比如让IE控件进入像frontpage那样的编辑状态等等)0 O: @1 [4 R+ e' R3 W9 u
+ w4 b2 h3 ~( j3 Q

0 m4 b/ Y0 Y, B' K; {1 Z  B* `首先,在你的工程里填加对MsHtmcid.h的支持:  v  J8 n& @. F7 u
! `  ?, A. g- }; F) `
#include <MsHtmcid.h> //你可以在VC的头文件的目录中找到它,7 i' A: v& O# i" o* A) D
                                    //推荐你到MS网站下载最新文件以获得对IE6命令的支持。
% s% b6 y9 y1 q- m' _7 S
0 p* q# E* u5 R( H: G: I1 P& I7 w6 c% H' I9 A% t% O% s' A
然后你所要做的仅仅是找到IE控件的Internet Explorer_server窗口句柄发送命令给它。4 Y6 G8 L) c6 ]! B) I
下面给出部分演示,看了演示你就知道该怎么做了。- c8 E4 X: G& L4 U8 \! M

0 S. {2 B/ O3 G" ]. R, L将WebBrowser切换至编辑状态:# a, b$ o, O# ^1 @+ A
2 v4 I2 T4 m% U3 j- o% y: ]
void CWebBrowser2::OnGotoEditMode()
& t( Q+ O6 p! \' a/ ]{
2 u6 U) v9 G; M/ y CWnd* pwndIEShell = NULL;
' g+ J5 A0 O5 R2 ~ CWnd* pwndIEHTML = NULL;
7 x, q" T8 _" b4 {( i
8 p9 \7 x3 W2 h2 t pwndIEShell = this->GetWindow(GW_CHILD); //this是CWebBrowser2指针+ x2 b) t6 I. u# w. g& L
if (pwndIEShell)
! y% f8 ]. O9 ]# I {+ `( ?8 w  o  D* V
  pwndIEHTML = pwndIEShell->GetWindow(GW_CHILD); //WebBrowser控件的窗口关系你可以通过spy++来观察,这里不累赘; A& \# V1 a4 ^1 S) W% h
}
) R4 E  r- F: W ( i( {/ I' k$ J, e
if(pwndIEHTML != NULL)
& c0 \8 H7 }4 r# _6 b {7 p% w* Z  e. x2 L; f. p
  WPARAM wParam = MAKELONG(IDM_EDITMODE, 1);//IDM_EDITMODE换为IDM_BROWSEMODE就返回浏览模式% }! F- M, m3 k
  pwndIEHTML->SendMessage(WM_COMMAND, wParam, (LPARAM)pwndIEHTML->m_hWnd);4 \2 I# c, s! _3 h4 k; K2 c
}
' J$ G" h0 R  d% F}
& _: m) o- R+ B/ i. }/ O; L) U3 p+ H
之后你会发现WebBrowser控件变的跟frontpage一样(早知道这样不用DHtmlEdit控件了,哈)/ n* ^' L  e/ w- D) \1 n- Y: h; N
3 L. I! {3 Y# {* C: @1 }$ Z/ C
CHtmlView的实现跟上面稍有不同,因为多了个CFormView的缘故,具体代码如下:2 F/ u( N$ b% @( N6 f
1 N# o# {- R5 R" |
void CYourhtmlView::OnAddtoFavorites()
( x( j8 _/ \; p6 M! p{! F- `! B, i7 E- J( P
CWnd* pwndWebControl = NULL;5 J! z. f5 g8 ~2 v2 ?
CWnd* pwndIEShell = NULL;
! b3 {& a* T% r8 b CWnd* pwndIEHTML = NULL;
) F. A8 E# G, R3 L7 r9 T+ e! x: }& Y3 ~: j3 C, X* L. y; Y
pwndWebControl = GetWindow(GW_CHILD);. @4 ?% r: @* n  V. o/ P
if(pwndWebControl == NULL)) M0 S) Q7 H& K# Z& l7 g
  return;  m6 x) e! q* T5 Z( I" K5 K" [
pwndIEShell = pwndWebControl->GetWindow(GW_CHILD); - F' A, G9 R% g+ j# W- R! A6 N) H
if (pwndIEShell)0 X) ]! T) M6 @& n- f7 A0 h
{
9 {* Z3 B* L; g! E1 T  pwndIEHTML = pwndIEShell->GetWindow(GW_CHILD);& r' g, Z/ n- b* g7 y# @' |, u
}
2 p5 V3 c  I8 m$ L6 k3 r
# P( h! ?) f$ ^- B& Q* o6 J7 N if(pwndIEHTML != NULL)
% {) l  V( q5 E& d) M; S) J {
6 F# e/ \- w4 X! @0 w$ @  WPARAM wParam = MAKELONG(IDM_ADDFAVORITES, 1);//添加到收藏夹,换成IDM_OPTIONS就是打开internet选项。
: [5 t* C! |& |$ V2 z' F  pwndIEHTML->SendMessage(WM_COMMAND, wParam, (LPARAM)pwndIEHTML->m_hWnd);! ^+ `. i0 K1 w$ z. n, {6 w' G
}  6 P. z/ a$ M7 _. |; U
}
8 e. F8 F- W5 O9 L8 E3 f
9 l* g) n5 H! i通过改变wParam ,你可以实现几乎IE所有的已知的命令(另存为...、打印预览、创建桌面快捷方式等等)和一些未知的命令(比如进入编辑模式等等)。
2 h7 Z& ^$ t* n, m; v  T5 H' \* I8 }2 P/ k, t. Q( }) r* U- P  |
好了,就介绍到这,具体的你可以通过观察MsHtmcid.h和实践来了解。
3 k& e8 g+ [+ U最后,希望通过直接发送命令消息的方法能使你的工作事半功倍!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-6-18 08:45 , Processed in 0.018681 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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