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

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

[复制链接]
发表于 2003-12-22 16:59:03 | 显示全部楼层 |阅读模式
利用IE的命令直接操作WebBrowser控件
, P0 {0 t) C1 j2 L2 ?  G8 D7 \1 M- G# n: @
通常,我们对CHtmlView/WebBrowser控件进行打印、查看源文件、查找等操作麻烦的不得了
2 N: D+ U" M; m& u详见http://support.microsoft.com/support/kb/articles/Q156/7/32.ASP6 \* F4 c- U5 q; r% D2 `" E1 S

4 K; G& e' D" [8 E7 T+ H  N其次就是打开“Internet选项”、“添加到收藏夹”等方面的麻烦:6 {: u- A! L  S
详见http://www.csdn.net/Expert/TopicView1.asp?id=620932
$ O" T$ I. N0 h2 f* }' d; M' o6 M1 |: L) z8 Q/ @% j9 |+ j7 T9 t8 f
下面介绍的方法能够迅捷的通过短短几行代码完成上述操作,并且你还能完成一些特殊的操作(比如让IE控件进入像frontpage那样的编辑状态等等)! u: V( A7 w4 @: I; g% R

4 u" Q# J! A1 @& X; i2 ~! o
% o5 ^) s1 k% F3 k- P; s首先,在你的工程里填加对MsHtmcid.h的支持:
' {7 ]) F& U3 I7 S/ j
! [8 K& l! O; {. N1 w  T* x #include <MsHtmcid.h> //你可以在VC的头文件的目录中找到它,: K! S0 O: E5 j" ]; r. [
                                    //推荐你到MS网站下载最新文件以获得对IE6命令的支持。  H- ~, ?' H. n0 O! z- `+ b0 c

, ^; }! O2 g( p" A" F% W. c! W
% e1 d5 t6 }: f* e; @然后你所要做的仅仅是找到IE控件的Internet Explorer_server窗口句柄发送命令给它。
. ?3 g) O6 U7 Q% l下面给出部分演示,看了演示你就知道该怎么做了。7 O3 I2 C0 [! ~+ F: B  W: p

8 N2 Z6 E( B8 U4 w将WebBrowser切换至编辑状态:$ U4 I, |0 W9 F7 T, {1 N6 \
# g9 Z# _5 F& P$ `
void CWebBrowser2::OnGotoEditMode()   X9 B1 F2 D. D& u+ B
{: U4 Y, F! o/ ^2 a1 A" r  x: B
CWnd* pwndIEShell = NULL;( {0 p+ W7 w- H9 B
CWnd* pwndIEHTML = NULL;6 h! d% B3 I! z% @
0 w* A4 J4 V3 ^
pwndIEShell = this->GetWindow(GW_CHILD); //this是CWebBrowser2指针  O$ J2 o: `/ [- _
if (pwndIEShell); ?, ]- O* N( e% @1 M. B. c
{8 A% g0 e% N! j# w3 g) ?0 l
  pwndIEHTML = pwndIEShell->GetWindow(GW_CHILD); //WebBrowser控件的窗口关系你可以通过spy++来观察,这里不累赘& O- W, L& z5 W% S
}
0 Y( {5 |2 _& O1 _
! y$ M/ H+ A2 Y* T if(pwndIEHTML != NULL)
* {+ B" L6 f& A& F( R {8 {" m5 p9 B+ c7 ?+ Z1 I/ |- }
  WPARAM wParam = MAKELONG(IDM_EDITMODE, 1);//IDM_EDITMODE换为IDM_BROWSEMODE就返回浏览模式
5 C; e+ d' y$ t' t2 z  pwndIEHTML->SendMessage(WM_COMMAND, wParam, (LPARAM)pwndIEHTML->m_hWnd);- e% V9 u' b- q; ?, N6 R& T( p' k
} / f- Q4 U" r* ~, y% p& I3 l) ?* r
}, v8 U- L' E6 m: @" A- j& M1 a
% p- @. l# I1 k1 |( N
之后你会发现WebBrowser控件变的跟frontpage一样(早知道这样不用DHtmlEdit控件了,哈)
. i' G' M4 k5 M- Y, ?2 k8 m( v  A$ t- V; e
CHtmlView的实现跟上面稍有不同,因为多了个CFormView的缘故,具体代码如下:# k1 C+ C, p; k+ h% `  w3 Z# F

; r8 J- U5 `# @# u8 Bvoid CYourhtmlView::OnAddtoFavorites()
0 P& ?% W; Z5 r) ?" D. |6 N{( P/ D  J6 e  ~7 R( Y$ x$ q# @
CWnd* pwndWebControl = NULL;* \* {' N( f) n6 B& B; i! G
CWnd* pwndIEShell = NULL;/ j8 z9 e5 i' b: ~4 B
CWnd* pwndIEHTML = NULL;9 C  s6 O  t2 B5 i  o/ w7 B

( u8 l! Q6 A, Z' n& P pwndWebControl = GetWindow(GW_CHILD);
) ]8 e/ w. o( o5 x0 Z, w if(pwndWebControl == NULL)
7 ~' L. u5 S, E3 H5 B  ^1 N4 @7 {  return;6 s. ]0 \. L" x0 E* i: R
pwndIEShell = pwndWebControl->GetWindow(GW_CHILD); 8 W8 i& n$ P3 _5 G1 r
if (pwndIEShell). z! ^+ ?- w7 e9 Y' @, g  s' g0 j
{) a+ I5 S9 N+ R. H, t$ @
  pwndIEHTML = pwndIEShell->GetWindow(GW_CHILD);( R' P2 T+ u; p9 H$ o3 B* O8 e0 x
}. H3 W+ a' L1 M& z# e9 E$ l' W

* d. K" k1 F0 [# n3 w" P if(pwndIEHTML != NULL)* w% L( o( k8 ?2 M5 y; h
{+ D4 r) f) Y: k7 u$ z) W  F
  WPARAM wParam = MAKELONG(IDM_ADDFAVORITES, 1);//添加到收藏夹,换成IDM_OPTIONS就是打开internet选项。
1 S# H& ^) |* `2 C, r4 x/ v. J  pwndIEHTML->SendMessage(WM_COMMAND, wParam, (LPARAM)pwndIEHTML->m_hWnd);
$ N3 k3 P: P! b( n0 L& V }  
2 m) `  V/ [: u5 f) y1 Z# X* `6 H}
9 Q1 ?0 r' y" k0 \3 j# v/ n: e6 V) _, y
通过改变wParam ,你可以实现几乎IE所有的已知的命令(另存为...、打印预览、创建桌面快捷方式等等)和一些未知的命令(比如进入编辑模式等等)。$ Y& a* e5 f- L0 ^" l& q' I. [/ K
, `2 k3 Y4 V" i5 ^& |
好了,就介绍到这,具体的你可以通过观察MsHtmcid.h和实践来了解。& H+ _$ M1 N7 |+ K4 z
最后,希望通过直接发送命令消息的方法能使你的工作事半功倍!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-10-2 00:11 , Processed in 0.016517 second(s), 14 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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