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

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

[复制链接]
发表于 2003-12-22 16:59:03 | 显示全部楼层 |阅读模式
利用IE的命令直接操作WebBrowser控件
# }* V9 b2 H3 j- J- `* L+ O
% t( |0 d+ Q2 [" y; i6 n' P6 {通常,我们对CHtmlView/WebBrowser控件进行打印、查看源文件、查找等操作麻烦的不得了7 [: J% l3 V# j
详见http://support.microsoft.com/support/kb/articles/Q156/7/32.ASP9 G4 X4 \* D" ]9 q# c  `1 h
' e1 f5 ~0 a( x2 a1 W% v% V
其次就是打开“Internet选项”、“添加到收藏夹”等方面的麻烦:
' k) K2 @* T5 @# a3 C: N! @' H详见http://www.csdn.net/Expert/TopicView1.asp?id=620932- E: j5 L" L- F0 D: ?
5 ~1 h% g- G3 @1 F8 y/ i
下面介绍的方法能够迅捷的通过短短几行代码完成上述操作,并且你还能完成一些特殊的操作(比如让IE控件进入像frontpage那样的编辑状态等等)
# w! C. v. w  A. O1 {3 H8 w
! H4 k/ x3 Z; ?4 Q8 J
$ H  ?1 N& H6 b& F) b8 C* u! a首先,在你的工程里填加对MsHtmcid.h的支持:, W# c6 C7 O  h$ E

9 U2 ?( X8 {3 r" {9 T/ |( b #include <MsHtmcid.h> //你可以在VC的头文件的目录中找到它,
0 Z7 v9 ~% h( P4 m/ D                                    //推荐你到MS网站下载最新文件以获得对IE6命令的支持。& Q+ T" E: `8 L2 D

; _0 Y& K# B# T& q
) Z% O& C( `- i8 _3 y然后你所要做的仅仅是找到IE控件的Internet Explorer_server窗口句柄发送命令给它。
% f6 M- H+ C! D! H+ n* h0 d, K下面给出部分演示,看了演示你就知道该怎么做了。
* _; d' o  |0 w* m* K4 G+ F2 u4 W0 r/ Y. d( v- ]( U
将WebBrowser切换至编辑状态:
1 J. ^; O$ ~  u# y) f) ]7 G- l8 |. B' @6 b; {
void CWebBrowser2::OnGotoEditMode()
9 N9 J4 [8 B9 ~( B8 r3 R$ V{
3 {7 J6 u6 G8 `8 Z CWnd* pwndIEShell = NULL;' g9 l0 Q- P/ B9 j: u( l; g8 W; N
CWnd* pwndIEHTML = NULL;
5 ?4 a  t8 u# l$ c6 C1 v 7 r! z" b& T5 e4 [" w: y  {
pwndIEShell = this->GetWindow(GW_CHILD); //this是CWebBrowser2指针
6 w9 |3 A1 ?6 x* b) f! p if (pwndIEShell). D" H+ G0 h: Z# x1 f. F* e# v% a
{7 m) _/ S% {+ a2 @9 b1 n2 P+ u
  pwndIEHTML = pwndIEShell->GetWindow(GW_CHILD); //WebBrowser控件的窗口关系你可以通过spy++来观察,这里不累赘- n% J! ]$ ]8 R
}
" A$ m# v4 D1 V" v7 F
  x" |' F" O$ R% z& K7 h if(pwndIEHTML != NULL)" N. ~' V0 B( n/ W3 W- R7 _; [% v
{9 b) W, |% z/ W. f4 s/ v
  WPARAM wParam = MAKELONG(IDM_EDITMODE, 1);//IDM_EDITMODE换为IDM_BROWSEMODE就返回浏览模式' }) u: Q- c. n( @- M
  pwndIEHTML->SendMessage(WM_COMMAND, wParam, (LPARAM)pwndIEHTML->m_hWnd);2 V8 v. _" N& m. |9 |$ M
} ( g0 I3 R  |# v+ J( o$ @! w
}' N2 E& v3 q5 Y
3 b1 T, d9 |( g, z
之后你会发现WebBrowser控件变的跟frontpage一样(早知道这样不用DHtmlEdit控件了,哈)* D- ]; b) O3 v8 |  a
) O! n0 E8 w2 M( D: d
CHtmlView的实现跟上面稍有不同,因为多了个CFormView的缘故,具体代码如下:1 x/ Q6 w' S  ~
: y& L9 I  z  w* b( ]7 d0 ~
void CYourhtmlView::OnAddtoFavorites()
; p- x8 w! D% s& M" D, ^{
4 i* e$ @5 J" c7 l, R  ^3 |& n CWnd* pwndWebControl = NULL;5 ~: A' J/ ]" E* v7 v
CWnd* pwndIEShell = NULL;
, i5 h5 n/ s1 C" o CWnd* pwndIEHTML = NULL;; l* e5 G3 ^/ ^- Q# M! _3 b% p

1 p% l9 s7 @3 O pwndWebControl = GetWindow(GW_CHILD);
. [$ a/ ]; v: a; l+ M& U if(pwndWebControl == NULL)4 @8 v) N% ?( z5 @& s) b1 m/ p
  return;  Y' }% S. S' x7 ?* T8 v* {4 }
pwndIEShell = pwndWebControl->GetWindow(GW_CHILD); - u3 t' u( ^+ \  t* C
if (pwndIEShell)
$ w' ?' i  d+ ?* h3 S* I {
2 j2 u  @% [9 A8 c# S  pwndIEHTML = pwndIEShell->GetWindow(GW_CHILD);
! I' g4 n/ f: ]! K }/ z9 P' _8 b- C+ q+ i% u6 i7 O

$ R+ L: b' V" V7 e if(pwndIEHTML != NULL)& ?9 e# u6 t' ~3 Y
{- q; h, r& F* ?; P% w4 F, K
  WPARAM wParam = MAKELONG(IDM_ADDFAVORITES, 1);//添加到收藏夹,换成IDM_OPTIONS就是打开internet选项。4 X$ ]0 C# [# ?& H: |1 N
  pwndIEHTML->SendMessage(WM_COMMAND, wParam, (LPARAM)pwndIEHTML->m_hWnd);2 w/ f( x/ P; x: [* Q
}  
4 M9 S2 v* J! p/ }2 x$ `2 \}# J4 ^1 m5 y  G3 Y# S

* b* ]0 j4 {: p! G* F: K通过改变wParam ,你可以实现几乎IE所有的已知的命令(另存为...、打印预览、创建桌面快捷方式等等)和一些未知的命令(比如进入编辑模式等等)。
& U! X2 X  P+ g3 f; |1 v  i$ o  P5 |' R) }( ~. i3 G
好了,就介绍到这,具体的你可以通过观察MsHtmcid.h和实践来了解。
/ ?" j+ C& _0 _最后,希望通过直接发送命令消息的方法能使你的工作事半功倍!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-6-20 04:08 , Processed in 0.039167 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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