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

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

[复制链接]
发表于 2003-12-22 16:59:03 | 显示全部楼层 |阅读模式
利用IE的命令直接操作WebBrowser控件/ l/ u/ ]7 F! ?& Z9 s6 R" I( u
' k4 }3 Y$ C7 b( ?( s3 q0 L
通常,我们对CHtmlView/WebBrowser控件进行打印、查看源文件、查找等操作麻烦的不得了6 V  P1 K9 [6 t# M; j7 x3 E: z
详见http://support.microsoft.com/support/kb/articles/Q156/7/32.ASP
5 e$ h# z' ^/ E+ y0 z# T
) y1 T  z+ T5 ~. X% A. p7 B其次就是打开“Internet选项”、“添加到收藏夹”等方面的麻烦:- a3 q; V3 i  {5 e
详见http://www.csdn.net/Expert/TopicView1.asp?id=620932
6 ]3 A& L2 m. A$ X1 U3 b0 J: Q9 N
2 J/ B' x1 |0 E) ?下面介绍的方法能够迅捷的通过短短几行代码完成上述操作,并且你还能完成一些特殊的操作(比如让IE控件进入像frontpage那样的编辑状态等等)
/ t( M& P# }/ |2 a
5 d( _# _0 q2 k% b  t* v( O9 z3 N0 Q3 }7 u1 J$ K6 |8 x; D
首先,在你的工程里填加对MsHtmcid.h的支持:
. s5 X( V5 ~: @+ C3 _" z8 C$ y  b- [3 W
#include <MsHtmcid.h> //你可以在VC的头文件的目录中找到它,6 g5 O8 j6 q, L
                                    //推荐你到MS网站下载最新文件以获得对IE6命令的支持。+ e  j: E9 W8 V3 _/ [; B; f2 R; F$ I, c
7 d2 B2 ?8 C3 g
' }  ]- p0 F3 B% V* Q' m
然后你所要做的仅仅是找到IE控件的Internet Explorer_server窗口句柄发送命令给它。
) B; Z$ d6 N+ Q& w* y0 y: F$ ?9 r/ _, U下面给出部分演示,看了演示你就知道该怎么做了。" A3 R; Y9 S) H) W3 B. b! u' L
# w2 u1 r5 |2 B
将WebBrowser切换至编辑状态:
. k1 @' k" l. u2 Z8 W+ J% c0 `/ t* r
void CWebBrowser2::OnGotoEditMode()
+ v8 j0 u3 Z/ W2 Q. \- j! o{
9 ]7 Y  F, S. i9 i: v5 C  X4 d CWnd* pwndIEShell = NULL;
/ |* N, r9 {6 B8 a: D; Z CWnd* pwndIEHTML = NULL;
- A) ?& Z$ N, n/ y/ S6 V  m0 Y' B0 K
4 q  F) {( L7 ^0 d8 C( Y pwndIEShell = this->GetWindow(GW_CHILD); //this是CWebBrowser2指针
4 C& p' \: I5 ~7 h7 ?' W if (pwndIEShell)& V5 p" ~6 t) W& N- |8 z* z
{1 v0 ~2 }  ~3 G$ g+ n9 c
  pwndIEHTML = pwndIEShell->GetWindow(GW_CHILD); //WebBrowser控件的窗口关系你可以通过spy++来观察,这里不累赘
* t" L& D$ O0 m1 \/ |0 J- {) r }! L% i8 [0 F+ n4 v) P3 O) F
( A8 a; V; o$ g$ i* S
if(pwndIEHTML != NULL)
+ X( |/ L6 H, p  ?8 E2 V* s. m {8 Z6 V" p: g# I; U3 p
  WPARAM wParam = MAKELONG(IDM_EDITMODE, 1);//IDM_EDITMODE换为IDM_BROWSEMODE就返回浏览模式
2 o* n6 t: f8 R5 X: ?/ |, S  pwndIEHTML->SendMessage(WM_COMMAND, wParam, (LPARAM)pwndIEHTML->m_hWnd);
+ {+ U- l  ~% x" b  Y! l } ) v# L8 p+ M& p9 ~9 r
}. r5 y" u+ i1 H, q& j

* S* x* d( A  B. z6 L* v" U之后你会发现WebBrowser控件变的跟frontpage一样(早知道这样不用DHtmlEdit控件了,哈)
) [  k- N4 Q1 T# r" F8 S; h1 z* `' @# R* i/ U9 Q
CHtmlView的实现跟上面稍有不同,因为多了个CFormView的缘故,具体代码如下:; k5 u) H7 L+ A* N( |

; N* X5 S+ N1 U# J9 x. Cvoid CYourhtmlView::OnAddtoFavorites()
, P6 Z# O! H5 r: G! T{- |$ R5 n! R, ^# a+ \
CWnd* pwndWebControl = NULL;. b3 q- B# x7 C& W
CWnd* pwndIEShell = NULL;
" _! }/ W5 ]% L! v' m CWnd* pwndIEHTML = NULL;
& r/ K, K1 V8 K8 M8 D1 D3 K; i5 w/ H5 X" V: H
pwndWebControl = GetWindow(GW_CHILD);' Z1 h/ H- l+ o
if(pwndWebControl == NULL)% t9 o! P4 \3 T( _: d# {8 a5 M
  return;& Z$ u5 ^$ i. [* \) s
pwndIEShell = pwndWebControl->GetWindow(GW_CHILD);
6 w3 G- I. }9 a, U if (pwndIEShell)' A8 S3 l/ E# o' T! p1 V9 N8 i
{0 j8 m% W. D' `3 C+ a7 T, T7 ~% M
  pwndIEHTML = pwndIEShell->GetWindow(GW_CHILD);
) U# u: q0 N, f( } }
7 s4 I0 }) ?! |1 [+ h
6 N+ C% d9 a" ^ if(pwndIEHTML != NULL)
0 _, M) z6 f/ q, p' Q {
3 _; e. t) {+ n  H! c6 c  e$ ^0 J  WPARAM wParam = MAKELONG(IDM_ADDFAVORITES, 1);//添加到收藏夹,换成IDM_OPTIONS就是打开internet选项。
/ B, F& Z  ]1 W; \' W  pwndIEHTML->SendMessage(WM_COMMAND, wParam, (LPARAM)pwndIEHTML->m_hWnd);
4 F& W( E  [, c' @  u; q- m9 t4 D }  
/ [5 q0 K1 g$ P. m7 y+ H}% I" D# D- H6 x8 n+ p8 o  H" P+ s

; O+ O( j6 ?! n: v* T  l! H通过改变wParam ,你可以实现几乎IE所有的已知的命令(另存为...、打印预览、创建桌面快捷方式等等)和一些未知的命令(比如进入编辑模式等等)。
+ i. G- t. I) Z- N1 a! _+ N# w  f! t" V. S" f8 m
好了,就介绍到这,具体的你可以通过观察MsHtmcid.h和实践来了解。& Y' m( f  g& x1 }
最后,希望通过直接发送命令消息的方法能使你的工作事半功倍!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-6-19 18:00 , Processed in 0.036670 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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