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

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

[复制链接]
发表于 2003-12-22 16:59:03 | 显示全部楼层 |阅读模式
利用IE的命令直接操作WebBrowser控件
3 Z. @0 Q2 m& v, `! |! p
% b" @1 \5 ~* R. h+ X4 X" x3 ^1 _通常,我们对CHtmlView/WebBrowser控件进行打印、查看源文件、查找等操作麻烦的不得了
9 y0 `+ m) B6 I% V详见http://support.microsoft.com/support/kb/articles/Q156/7/32.ASP
) z* v. o* b' q; I
- y* i9 F, ]% q3 m+ h7 p其次就是打开“Internet选项”、“添加到收藏夹”等方面的麻烦:
* `1 A) i  f$ |- {详见http://www.csdn.net/Expert/TopicView1.asp?id=620932
1 c6 P, E. _: S1 P# T8 G) q0 k2 @! q& n$ x' i/ S5 K
下面介绍的方法能够迅捷的通过短短几行代码完成上述操作,并且你还能完成一些特殊的操作(比如让IE控件进入像frontpage那样的编辑状态等等)
! ^* G8 Z  s% \# _0 O6 N! j' }5 d
" ?8 H$ |& [& }- g6 h, [4 S# @3 E& I
首先,在你的工程里填加对MsHtmcid.h的支持:; h/ N6 r2 G7 F# `! d0 @0 ^

9 T5 R" k! i0 n! M9 K #include <MsHtmcid.h> //你可以在VC的头文件的目录中找到它,# H5 J. V& ~7 j7 |, I0 {
                                    //推荐你到MS网站下载最新文件以获得对IE6命令的支持。% E6 l2 a+ p0 l- y% V! d

  v8 [; F1 {3 R6 l
4 Y' Q8 t* l4 Z% ]  _% s然后你所要做的仅仅是找到IE控件的Internet Explorer_server窗口句柄发送命令给它。9 c) ^+ M+ z# S2 O' a, H& D
下面给出部分演示,看了演示你就知道该怎么做了。& A; f( i" u1 O

# S% J! a- P( u将WebBrowser切换至编辑状态:: p0 @- g3 R, P+ m, I2 }: O$ `

2 W+ _2 j) Q6 V# e0 m, \5 wvoid CWebBrowser2::OnGotoEditMode()
% n6 p* E9 `( S- p$ k{
7 X2 b8 |+ [% D5 K3 {+ [* V8 v CWnd* pwndIEShell = NULL;
0 _. |4 x& O1 Z" E" z. x CWnd* pwndIEHTML = NULL;/ d" R4 v, C7 ^, f- g
4 B4 S7 P1 N( K* x* a1 O6 q2 |- h
pwndIEShell = this->GetWindow(GW_CHILD); //this是CWebBrowser2指针
$ I2 f4 m: {& g& G if (pwndIEShell)
$ |, E: I' v, ]: N {5 }4 F, ~4 ]. V  r9 e6 r( g1 H
  pwndIEHTML = pwndIEShell->GetWindow(GW_CHILD); //WebBrowser控件的窗口关系你可以通过spy++来观察,这里不累赘1 w" P' A; z& [# T
}
3 T/ r. G: w' j9 l' S
% @/ z+ U* D) j0 V if(pwndIEHTML != NULL)1 y7 U# D' P- Q- C/ }* A
{
- r0 p' h! u# h$ x6 [) O/ M1 V  WPARAM wParam = MAKELONG(IDM_EDITMODE, 1);//IDM_EDITMODE换为IDM_BROWSEMODE就返回浏览模式. f/ @! ~$ Y' Y3 r- B
  pwndIEHTML->SendMessage(WM_COMMAND, wParam, (LPARAM)pwndIEHTML->m_hWnd);7 ]7 F) u# q0 ?. v! c2 D& @  @
}
6 ~8 y( ^: A  Q7 [}
* I( z1 ]8 G; `: i7 \! u- `, d8 X; G# k; C. g" S( E% L' w! n
之后你会发现WebBrowser控件变的跟frontpage一样(早知道这样不用DHtmlEdit控件了,哈); i( a( W8 F+ j2 m: H  H7 t. C

$ y; y# m: s( _  A6 e9 eCHtmlView的实现跟上面稍有不同,因为多了个CFormView的缘故,具体代码如下:( X: x( ?( _& t! D" ^
4 ?1 @& |- X8 Q+ x
void CYourhtmlView::OnAddtoFavorites()
* \3 e+ x+ q+ d3 }{
+ o& W1 a8 a; [( P( h CWnd* pwndWebControl = NULL;
7 R% P6 B1 f/ u6 C/ o* h CWnd* pwndIEShell = NULL;6 r7 @' \5 F7 t4 P) j# }2 J
CWnd* pwndIEHTML = NULL;
3 e8 A. D$ {* b9 W/ `2 c
5 P$ O3 f2 }  U pwndWebControl = GetWindow(GW_CHILD);' W' d% e4 M: M' v
if(pwndWebControl == NULL)$ [$ k& p% B- U0 {( n6 R, g
  return;
8 B; @, t: A4 h& t$ d; ` pwndIEShell = pwndWebControl->GetWindow(GW_CHILD);
+ g. M# k) d3 Z5 \& S if (pwndIEShell)
& k+ h5 s( |- N {
8 @/ z) m) Z  B* A3 Y: v( h  pwndIEHTML = pwndIEShell->GetWindow(GW_CHILD);0 L1 J6 A$ u8 \# i4 H  `
}
: r* k! p! B1 U. ] ) Q5 q5 Y: C- q! k2 @" I- N0 }3 A
if(pwndIEHTML != NULL)
$ X+ |/ z% _( K9 ?; t$ D {
. Y& `7 F7 o, k% M5 @# ~+ x/ ?9 p  WPARAM wParam = MAKELONG(IDM_ADDFAVORITES, 1);//添加到收藏夹,换成IDM_OPTIONS就是打开internet选项。  d5 d2 x  X. R: C$ [' M; Q
  pwndIEHTML->SendMessage(WM_COMMAND, wParam, (LPARAM)pwndIEHTML->m_hWnd);  r2 o- p8 F# F/ E
}  
0 j' s0 J* R! g}
% k$ c' U& s: `" r
) t% l* `9 u# Z; k' p通过改变wParam ,你可以实现几乎IE所有的已知的命令(另存为...、打印预览、创建桌面快捷方式等等)和一些未知的命令(比如进入编辑模式等等)。" B* f+ c, K9 z1 w9 i2 p! e8 o3 K
, a' i$ L  ~. [. w" @4 D! M& g
好了,就介绍到这,具体的你可以通过观察MsHtmcid.h和实践来了解。
+ R( m5 \1 m  X最后,希望通过直接发送命令消息的方法能使你的工作事半功倍!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-5-2 10:21 , Processed in 0.017797 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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