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

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

[复制链接]
发表于 2003-12-22 16:59:03 | 显示全部楼层 |阅读模式
利用IE的命令直接操作WebBrowser控件
1 f9 c: q  @; T( |0 p- ?
$ O, Z( ^0 W0 o& @通常,我们对CHtmlView/WebBrowser控件进行打印、查看源文件、查找等操作麻烦的不得了: S) p% E  F, A/ }/ l+ v
详见http://support.microsoft.com/support/kb/articles/Q156/7/32.ASP: x1 m9 b9 x8 J9 l" m% ^
! o6 n, q( P2 \! d. Y' B
其次就是打开“Internet选项”、“添加到收藏夹”等方面的麻烦:& z$ b, B+ r* r- U' z4 r) S
详见http://www.csdn.net/Expert/TopicView1.asp?id=620932
* t, [: `6 b, H% ^2 x
: Q  ^* a; h  l/ C: x+ B下面介绍的方法能够迅捷的通过短短几行代码完成上述操作,并且你还能完成一些特殊的操作(比如让IE控件进入像frontpage那样的编辑状态等等)
4 v; w7 ]4 _; K% \1 a$ c
' c! r/ c6 o# N: J6 d# H6 ], {. G8 ~; M) o1 Y
首先,在你的工程里填加对MsHtmcid.h的支持:" B- D3 g  c9 H% u- _  [

  b. R. a0 [7 `! Y$ Z# Z! L* b' [ #include <MsHtmcid.h> //你可以在VC的头文件的目录中找到它,4 w" X% M# \) N! C9 c
                                    //推荐你到MS网站下载最新文件以获得对IE6命令的支持。
7 n6 ^8 Y. w2 ~! C6 E
) C! ^7 c) d$ w# V* G' t9 i8 d! e+ p/ [3 z. r, R3 |
然后你所要做的仅仅是找到IE控件的Internet Explorer_server窗口句柄发送命令给它。
: Q8 b. I- W3 x' d+ T8 \下面给出部分演示,看了演示你就知道该怎么做了。/ l. i: A4 B2 i  z' ]; f
* p% A' J7 h7 d9 t; @$ y
将WebBrowser切换至编辑状态:
) h7 t+ q. w+ O7 E9 a
  u: R# l& [8 G, W8 q' Tvoid CWebBrowser2::OnGotoEditMode()
9 B2 K$ r: x1 q; N# a3 ]& i! L{7 Y# _, J/ S2 z, B7 E% {$ E- `9 y
CWnd* pwndIEShell = NULL;
7 V2 V0 @* l' Z7 H! p CWnd* pwndIEHTML = NULL;
6 N& L  ~" P7 {! h  j5 b) L& {
6 h7 b+ [$ `& U& M. |, n6 b+ r* ] pwndIEShell = this->GetWindow(GW_CHILD); //this是CWebBrowser2指针& g/ A  x  A) y1 r8 G5 [  S
if (pwndIEShell)
# s+ G% @/ w" x {
( r8 f6 [# ~* B/ R7 u  pwndIEHTML = pwndIEShell->GetWindow(GW_CHILD); //WebBrowser控件的窗口关系你可以通过spy++来观察,这里不累赘* L9 G9 f2 n/ y; u  o+ C' b. h. e
}& x! Z- e# V9 C7 z% K' [1 y

% c; n2 g: K! v if(pwndIEHTML != NULL)  o: ]9 s/ f# S) N- y; m$ V8 d
{4 g7 i7 U8 w* C; i$ ]( k
  WPARAM wParam = MAKELONG(IDM_EDITMODE, 1);//IDM_EDITMODE换为IDM_BROWSEMODE就返回浏览模式4 c0 p( w- |+ {3 _% p
  pwndIEHTML->SendMessage(WM_COMMAND, wParam, (LPARAM)pwndIEHTML->m_hWnd);
8 j8 @% I" `' @/ r% G }
) j1 a9 k' r8 h}" Z+ f1 z' n, R* b
' o$ h/ V3 O% Z
之后你会发现WebBrowser控件变的跟frontpage一样(早知道这样不用DHtmlEdit控件了,哈)8 B) }  |' F/ X
! S7 t- Q3 _2 _4 [
CHtmlView的实现跟上面稍有不同,因为多了个CFormView的缘故,具体代码如下:
/ p! s+ T& A: g2 u# Q" q4 B
" I. B9 U0 O! R. G: M2 R, [9 mvoid CYourhtmlView::OnAddtoFavorites() ; I8 Y9 i; E: Z2 J7 L  S
{& F2 s2 x* U- L& }: `" k: O: `1 K- ~
CWnd* pwndWebControl = NULL;9 X8 Q; l  E% _  l* v
CWnd* pwndIEShell = NULL;' _/ f' ^8 V& K
CWnd* pwndIEHTML = NULL;
2 l6 X  `* u; r; O9 t% O8 X, `" x
  N1 _) s/ W  H/ B2 J pwndWebControl = GetWindow(GW_CHILD);
% a- G% A8 J/ O, i! m# T if(pwndWebControl == NULL)+ g+ ~; s9 [8 n2 z2 L
  return;
+ I& I( D$ E0 A! M* I' H  s pwndIEShell = pwndWebControl->GetWindow(GW_CHILD); " n: l, `; s7 l- f7 @
if (pwndIEShell)
9 F4 Z8 Y( y; _6 `* w {, ?9 e& K6 q! n$ g! h
  pwndIEHTML = pwndIEShell->GetWindow(GW_CHILD);
& L% h8 c9 Z& I1 k3 a& q }& z+ `% D( n. b# ^. g1 {

- P5 ]  E0 m8 ]* \ if(pwndIEHTML != NULL)* \+ o; ~! G0 _5 Y' O, f8 R
{
$ Q6 M. y- I! E6 o$ y  X# ]  WPARAM wParam = MAKELONG(IDM_ADDFAVORITES, 1);//添加到收藏夹,换成IDM_OPTIONS就是打开internet选项。2 M8 K8 n. R8 Z
  pwndIEHTML->SendMessage(WM_COMMAND, wParam, (LPARAM)pwndIEHTML->m_hWnd);
7 `/ a7 @: h5 S, \7 f# ? }  - G+ ~) o* W; w6 b5 l: i0 O! C9 J
}* n' Z/ R7 W& s, }# R$ ^: N- \
( H" X  G; n5 i* ~9 U$ v$ @# y1 S( E5 ^
通过改变wParam ,你可以实现几乎IE所有的已知的命令(另存为...、打印预览、创建桌面快捷方式等等)和一些未知的命令(比如进入编辑模式等等)。& z  `- N4 Z/ W8 l% l; w# l* a) ?

5 f) J) g8 U$ X% P6 o, _好了,就介绍到这,具体的你可以通过观察MsHtmcid.h和实践来了解。+ h7 ~5 r3 R5 Z
最后,希望通过直接发送命令消息的方法能使你的工作事半功倍!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-11-14 21:50 , Processed in 0.020827 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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