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

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

[复制链接]
发表于 2003-12-22 16:59:03 | 显示全部楼层 |阅读模式
利用IE的命令直接操作WebBrowser控件# |$ t( h1 t5 k
! K8 F5 k4 T* n
通常,我们对CHtmlView/WebBrowser控件进行打印、查看源文件、查找等操作麻烦的不得了
8 R+ |! A. ]" u9 E6 S' M( `" a详见http://support.microsoft.com/support/kb/articles/Q156/7/32.ASP! e+ A3 W9 O" L4 r' _0 V3 u& O# j3 f2 w

& N; L7 @3 i: Z6 ]其次就是打开“Internet选项”、“添加到收藏夹”等方面的麻烦:
. ^2 u& m$ t0 X详见http://www.csdn.net/Expert/TopicView1.asp?id=620932  @$ b* Z, Q* E6 y( ]) M+ |
) A' b7 ~( \3 y& O8 `' W# i
下面介绍的方法能够迅捷的通过短短几行代码完成上述操作,并且你还能完成一些特殊的操作(比如让IE控件进入像frontpage那样的编辑状态等等)6 X6 d6 P. E  O) l& C/ |8 ?( V3 V

4 K% M8 t& @' K( |0 C$ {( G& M3 ]1 P: I: a" g
首先,在你的工程里填加对MsHtmcid.h的支持:& |2 \+ l6 e- T( ~
1 p3 T/ f' l8 q6 ]9 u/ f; T
#include <MsHtmcid.h> //你可以在VC的头文件的目录中找到它,
' ]( N# C3 \' f. ^                                    //推荐你到MS网站下载最新文件以获得对IE6命令的支持。, @+ @1 Q0 h  C8 F. c
' w$ a! E( L/ T# E
* D/ R, q- G$ K3 m- j
然后你所要做的仅仅是找到IE控件的Internet Explorer_server窗口句柄发送命令给它。2 [* z5 ~) y# @4 K! M# _
下面给出部分演示,看了演示你就知道该怎么做了。3 v9 z- }( _4 B* y7 n, q/ a! X7 D
: i6 X: `. D3 p
将WebBrowser切换至编辑状态:- G/ r  |2 o5 g% h+ u8 R: G
5 _2 n5 C9 @  A8 w& u/ B' [
void CWebBrowser2::OnGotoEditMode()
( g. C- @$ U- ~% ^{
* R# k$ [3 _9 x5 A# W* u: C CWnd* pwndIEShell = NULL;  c& I2 H" f- L# D# M; ?6 Y$ H% o
CWnd* pwndIEHTML = NULL;8 ?  _2 ]2 _0 f: {
& ]9 [; Y8 J  U) @% `& F- q
pwndIEShell = this->GetWindow(GW_CHILD); //this是CWebBrowser2指针2 p% x2 U3 m4 |
if (pwndIEShell)- _0 }9 a# @+ M% I3 }; v6 W
{
% m; j' @  b; }7 Y  pwndIEHTML = pwndIEShell->GetWindow(GW_CHILD); //WebBrowser控件的窗口关系你可以通过spy++来观察,这里不累赘; H  p  k. {5 n7 g+ }$ f
}" ]3 `  T5 M3 L& T7 C7 u& m

( ~/ D* t# m, [: v) }2 g) C if(pwndIEHTML != NULL)
+ [7 e0 U6 z& _# T {0 n, n  _3 ]1 a! Y+ @; w
  WPARAM wParam = MAKELONG(IDM_EDITMODE, 1);//IDM_EDITMODE换为IDM_BROWSEMODE就返回浏览模式1 O. K% H8 k: a- N
  pwndIEHTML->SendMessage(WM_COMMAND, wParam, (LPARAM)pwndIEHTML->m_hWnd);
7 @0 X, k6 s. ~! t# Q } 9 l6 [5 p7 N1 e* T* O$ V8 j, h% m& F
}5 Z& \7 \6 [" e" n) {
/ t% D1 M8 U+ f" L8 f9 b& N
之后你会发现WebBrowser控件变的跟frontpage一样(早知道这样不用DHtmlEdit控件了,哈)
* M  w6 n  H8 o& _; |1 O# Z( [
( @* S# a  z- H) V. k7 E/ L4 e) |CHtmlView的实现跟上面稍有不同,因为多了个CFormView的缘故,具体代码如下:( ]4 A. l$ z# q  Z5 i* ]1 v* T
3 Z% d6 D) L% N4 Y, ?* `
void CYourhtmlView::OnAddtoFavorites()
& P1 w7 L' p; {3 C{& r! T" H  {9 T; `# e
CWnd* pwndWebControl = NULL;
1 D! T  a  ]/ x$ h" ~0 Y: W- I, l CWnd* pwndIEShell = NULL;
$ q, M3 a% k8 q; _9 F  b5 t CWnd* pwndIEHTML = NULL;
4 Z* w! [% e, u7 W& q3 R' j+ \9 c  u% j
pwndWebControl = GetWindow(GW_CHILD);9 n* f$ `# ^4 Z. m+ y' t
if(pwndWebControl == NULL)
5 R- A& X1 B& F  return;& i5 |* k. Y6 X8 a3 V0 C2 D) N+ ?
pwndIEShell = pwndWebControl->GetWindow(GW_CHILD); 1 W; z9 q. Q: p
if (pwndIEShell)8 U& R' r: F2 X6 M, x& F$ i4 V/ W
{- G1 ]* a. i. o4 k! J1 R" R# ?
  pwndIEHTML = pwndIEShell->GetWindow(GW_CHILD);
# n0 G* v1 b' b  @# c, H }# ^4 q& C) l6 C, K: F

/ \; p1 [. h) r# U) M if(pwndIEHTML != NULL)
) n' W$ p+ T- @* j# R. m' S/ j2 P {2 W) P+ X6 z6 b7 T' `3 G
  WPARAM wParam = MAKELONG(IDM_ADDFAVORITES, 1);//添加到收藏夹,换成IDM_OPTIONS就是打开internet选项。
1 w% W4 l! n, s* S, B, a  pwndIEHTML->SendMessage(WM_COMMAND, wParam, (LPARAM)pwndIEHTML->m_hWnd);  q5 }5 X8 }# I: ^6 a9 R# [
}  
# B( K& T% C* Q6 U( n. p}) Y2 y2 C, A- s: q5 E2 F+ ^
0 T# y0 S: {; W" q* W: j( }
通过改变wParam ,你可以实现几乎IE所有的已知的命令(另存为...、打印预览、创建桌面快捷方式等等)和一些未知的命令(比如进入编辑模式等等)。, g7 r$ f' @, z  @9 V, \
5 j0 p9 b" M+ ]: \2 `
好了,就介绍到这,具体的你可以通过观察MsHtmcid.h和实践来了解。8 _) k/ f) W. R- f5 Y3 F
最后,希望通过直接发送命令消息的方法能使你的工作事半功倍!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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