找回密码
 注册
查看: 4559|回复: 0

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

[复制链接]
发表于 2003-12-22 16:59:03 | 显示全部楼层 |阅读模式
利用IE的命令直接操作WebBrowser控件
* x- R8 \- c/ K0 _( d0 o4 L2 C  Z& y/ h
通常,我们对CHtmlView/WebBrowser控件进行打印、查看源文件、查找等操作麻烦的不得了
8 g4 n# {% _$ g# u  q详见http://support.microsoft.com/support/kb/articles/Q156/7/32.ASP
" z) E4 r" [& j/ D6 w7 v& n/ Y2 F4 G: @! N/ d! D/ o/ H
其次就是打开“Internet选项”、“添加到收藏夹”等方面的麻烦:
% `) L0 C# S7 E3 O4 m详见http://www.csdn.net/Expert/TopicView1.asp?id=620932
7 u. a, F4 H# W) l6 @# p2 \1 [" K, n* _5 `( \# f+ T' y* z
下面介绍的方法能够迅捷的通过短短几行代码完成上述操作,并且你还能完成一些特殊的操作(比如让IE控件进入像frontpage那样的编辑状态等等)
8 X3 \- l/ p1 i& U6 _" t
- @: o2 q" a( A( W0 g4 c
! J" S3 j: U6 C& f! i: I6 Z首先,在你的工程里填加对MsHtmcid.h的支持:+ `, C$ [: Q. Z
. m! r  V1 _. g. r+ z+ g! b, R
#include <MsHtmcid.h> //你可以在VC的头文件的目录中找到它,+ O: C9 T4 P0 u% F
                                    //推荐你到MS网站下载最新文件以获得对IE6命令的支持。7 K) F" g# l6 ~) L* W" ^$ d3 y2 M% K

6 ~2 P6 B8 v  L: A' s6 r% G* h) l' c
然后你所要做的仅仅是找到IE控件的Internet Explorer_server窗口句柄发送命令给它。, `- f( g' }# |; N9 l6 \
下面给出部分演示,看了演示你就知道该怎么做了。
( y0 s& b- l6 U  {! J$ H+ r% z$ z
% U$ {  O# B3 ?9 _1 w" E将WebBrowser切换至编辑状态:
' x  n/ Y& [8 ]5 x0 h5 T  |8 q& r- D. D: g- B; o2 r( {% Q8 \! S
void CWebBrowser2::OnGotoEditMode()
) L) _7 o) S" M{! R8 s9 Q$ b, @, [7 R
CWnd* pwndIEShell = NULL;+ x- B! u# s" `5 M: F
CWnd* pwndIEHTML = NULL;
, s6 v  }6 y% z6 R) K& c
1 p  _# e  C5 s! y2 c6 @% r  G pwndIEShell = this->GetWindow(GW_CHILD); //this是CWebBrowser2指针" e# ^$ c" l" D4 L# z
if (pwndIEShell)
3 E8 \  \6 f3 G5 w+ R4 A8 p {; v. {$ ^4 M5 y& Q2 C8 I5 C( g) m
  pwndIEHTML = pwndIEShell->GetWindow(GW_CHILD); //WebBrowser控件的窗口关系你可以通过spy++来观察,这里不累赘
! V0 C! F& J4 t# N  x2 c) F }
  F4 |5 |3 ^0 w8 Z- U1 X7 f
! k0 B8 f( m; r if(pwndIEHTML != NULL)+ }# ~7 y8 l3 L' `: V
{7 q% \4 u# A/ c1 O" t
  WPARAM wParam = MAKELONG(IDM_EDITMODE, 1);//IDM_EDITMODE换为IDM_BROWSEMODE就返回浏览模式
3 L) }, q8 e" Z  e! Z  pwndIEHTML->SendMessage(WM_COMMAND, wParam, (LPARAM)pwndIEHTML->m_hWnd);
" u5 N) D; S! }1 V( v8 N  t+ D7 P } ) a; @$ T( d3 C
}
7 g$ D2 o; {& Y1 I0 ?3 D$ Q
6 P# P3 ~0 C( Z. w之后你会发现WebBrowser控件变的跟frontpage一样(早知道这样不用DHtmlEdit控件了,哈)7 L" I" }" a3 T
) Z1 s) F$ w. \% j( i3 w. w( ~! `
CHtmlView的实现跟上面稍有不同,因为多了个CFormView的缘故,具体代码如下:5 g9 I' f7 l5 {" t3 D% L; Y8 J

9 o4 x& `5 [% vvoid CYourhtmlView::OnAddtoFavorites() 7 ?* G: c" V$ h1 I5 G  B! E
{9 |" \5 J* o" E1 \
CWnd* pwndWebControl = NULL;
; u$ o: u( P7 N! F CWnd* pwndIEShell = NULL;
# T6 p0 P/ s3 S" q CWnd* pwndIEHTML = NULL;7 s/ T5 T( m7 t2 s0 \; W0 F
) k4 @' g' h1 R: R& [
pwndWebControl = GetWindow(GW_CHILD);8 c9 w5 v$ x. `. S9 Z& e
if(pwndWebControl == NULL)" o9 Z6 V! M  h+ h( A
  return;5 K3 w  b! |, J9 |4 |- t$ Q  N7 Y/ m
pwndIEShell = pwndWebControl->GetWindow(GW_CHILD);
  J' T# E9 C, @6 R; I& o if (pwndIEShell)
& |! |( M/ D$ l. L% g {
. L. b2 R9 C4 ]" O, v+ D  pwndIEHTML = pwndIEShell->GetWindow(GW_CHILD);8 O$ f) z0 H6 G( X9 k/ z: D0 U
}
% Z4 n% y* H3 i" P/ g ; l7 x, k! H/ Q" Q, o# l% C
if(pwndIEHTML != NULL)  N' A. V/ u2 T8 T* I
{
/ c: r& m8 x3 d8 P  l  z  WPARAM wParam = MAKELONG(IDM_ADDFAVORITES, 1);//添加到收藏夹,换成IDM_OPTIONS就是打开internet选项。! U7 _, F0 P! U1 v. f6 R
  pwndIEHTML->SendMessage(WM_COMMAND, wParam, (LPARAM)pwndIEHTML->m_hWnd);
& n  K! X1 B+ a }  
3 k" F, {6 y9 `, u}
7 o" [3 c3 M8 G( V  Z4 B' g
' s! V! A) `  p通过改变wParam ,你可以实现几乎IE所有的已知的命令(另存为...、打印预览、创建桌面快捷方式等等)和一些未知的命令(比如进入编辑模式等等)。
) _  |; ]' F8 |  _& R' B! B; V5 O
1 l! Z4 I! N! u- n  w0 s好了,就介绍到这,具体的你可以通过观察MsHtmcid.h和实践来了解。( r7 O  n* g+ f- R  I4 m% M! F
最后,希望通过直接发送命令消息的方法能使你的工作事半功倍!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-10-2 05:02 , Processed in 0.015265 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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