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

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

[复制链接]
发表于 2003-12-22 16:59:03 | 显示全部楼层 |阅读模式
利用IE的命令直接操作WebBrowser控件
9 }7 e% A6 T, w  s' A/ E1 u1 C4 F
通常,我们对CHtmlView/WebBrowser控件进行打印、查看源文件、查找等操作麻烦的不得了7 ?  Y# }  a6 p: K! V4 w
详见http://support.microsoft.com/support/kb/articles/Q156/7/32.ASP3 o: S* Z4 F; ~' M

9 Q" P. \- ?4 ^3 p9 d! ]其次就是打开“Internet选项”、“添加到收藏夹”等方面的麻烦:
& L- m: e: Z1 n( n6 @# T详见http://www.csdn.net/Expert/TopicView1.asp?id=620932$ H- W) l# h+ Q/ I9 q

* i! w" J$ w! t( B: i下面介绍的方法能够迅捷的通过短短几行代码完成上述操作,并且你还能完成一些特殊的操作(比如让IE控件进入像frontpage那样的编辑状态等等)
' R' w8 J/ @) g% `& g' h* Q; c& ~! U. L% L( B# ~& [5 z
! v) S  C' s" M8 }' ?) ^. {
首先,在你的工程里填加对MsHtmcid.h的支持:: w+ B1 I, h7 o  z& |# t9 c
" ^" k8 h! y% |3 K5 r
#include <MsHtmcid.h> //你可以在VC的头文件的目录中找到它,5 K2 a$ s, l+ d$ q% h& ^0 X# o0 ~. Q
                                    //推荐你到MS网站下载最新文件以获得对IE6命令的支持。
) d9 s4 w2 e. ]
) r; ]8 A' F' B* {
, G/ i: Q9 p; b' C; o# k5 [然后你所要做的仅仅是找到IE控件的Internet Explorer_server窗口句柄发送命令给它。' ~$ u& v: Y! I4 u2 @" G
下面给出部分演示,看了演示你就知道该怎么做了。
6 Y% \/ n- Q# C8 `2 p! K0 S' t% l# p) j0 b6 O) t: [" a5 g
将WebBrowser切换至编辑状态:
- G+ O9 \* x5 @. ^( [9 [% {! Q! W/ ]* W4 d' s! \
void CWebBrowser2::OnGotoEditMode() ! K4 r- _4 \6 d
{
* k! z( B# t$ D5 P( ] CWnd* pwndIEShell = NULL;* ?& @  C+ m& _' q, f. n7 {$ I; S
CWnd* pwndIEHTML = NULL;
" [0 j: x1 {7 L. J3 C* m
+ U! ^) L, a; s& H8 N pwndIEShell = this->GetWindow(GW_CHILD); //this是CWebBrowser2指针
  I+ x. A1 P! w+ M if (pwndIEShell)
+ T" K! ?5 L7 w- @- G {
' O& v+ d+ I' ?2 v  pwndIEHTML = pwndIEShell->GetWindow(GW_CHILD); //WebBrowser控件的窗口关系你可以通过spy++来观察,这里不累赘9 F. V; d; e6 F: u% j, H, U! F- G
}
/ b! M4 Q, Q  K/ h8 b" U
# S; a# T$ `$ n2 C+ ~& N* i if(pwndIEHTML != NULL)7 ^1 z7 T! W: M5 L1 E4 c
{2 {# _* P% G& O+ |+ l$ b
  WPARAM wParam = MAKELONG(IDM_EDITMODE, 1);//IDM_EDITMODE换为IDM_BROWSEMODE就返回浏览模式
8 s7 U) C5 j9 z& j/ F9 [! Y  pwndIEHTML->SendMessage(WM_COMMAND, wParam, (LPARAM)pwndIEHTML->m_hWnd);
+ v$ |  G; o8 C) L; ^, E } * f! {2 h5 h! t! S( J3 l" Y
}5 J2 n, x: i6 F" H  n; V

; J: a9 n1 p& j7 f之后你会发现WebBrowser控件变的跟frontpage一样(早知道这样不用DHtmlEdit控件了,哈)
0 u) T* Z- N3 P/ J# W% A" b4 k% Q6 W" T4 `& j& Q- j
CHtmlView的实现跟上面稍有不同,因为多了个CFormView的缘故,具体代码如下:
5 B: n" X, z- F3 ?
9 f$ H1 {: ?- f4 R- \# uvoid CYourhtmlView::OnAddtoFavorites()
8 t$ d% z* s( k4 C+ }. Q. H2 Q2 k{
+ R# h7 S* e' R+ z- _ CWnd* pwndWebControl = NULL;) `! g* ^" k" I4 c: Q* S$ k
CWnd* pwndIEShell = NULL;- @6 o" V' @5 ^0 O9 g. v
CWnd* pwndIEHTML = NULL;$ {. Z* m* Q  ?
+ ]2 r) k, I( M
pwndWebControl = GetWindow(GW_CHILD);( G  J( O$ Y* X" _
if(pwndWebControl == NULL)
! t# {( K+ x- G0 E  return;' j* \! }% L5 |2 G  F
pwndIEShell = pwndWebControl->GetWindow(GW_CHILD); 8 T: v4 e2 u  Q* `' E
if (pwndIEShell)
  r# k* q2 y4 a {
% X4 p- J/ B% V) c5 @! n" i# p  pwndIEHTML = pwndIEShell->GetWindow(GW_CHILD);7 H2 g2 E/ Y- y, u( s9 j7 q
}
/ Z& y. r/ Z7 D  X& s* n' ^. [8 n1 D 2 ~% v5 k' g) J* j
if(pwndIEHTML != NULL)
, m0 ]5 b4 m, o {  x6 I, I6 h8 E
  WPARAM wParam = MAKELONG(IDM_ADDFAVORITES, 1);//添加到收藏夹,换成IDM_OPTIONS就是打开internet选项。
# }# d) c' T$ s+ X, P9 H* E  pwndIEHTML->SendMessage(WM_COMMAND, wParam, (LPARAM)pwndIEHTML->m_hWnd);  Q1 [" M, x: Z' d. z+ p4 b
}  
. C9 f$ k2 @( b4 h+ v  }}# p7 R# S' ~, r3 J: w7 S- |
3 u% {1 K) k% `/ @
通过改变wParam ,你可以实现几乎IE所有的已知的命令(另存为...、打印预览、创建桌面快捷方式等等)和一些未知的命令(比如进入编辑模式等等)。7 L  o9 _4 m" @1 Q' W7 w5 D% N& w2 O
. w1 C% q7 Q6 A2 k; Z. J
好了,就介绍到这,具体的你可以通过观察MsHtmcid.h和实践来了解。
' S) d2 _2 a0 E  m: Z; f. M" W最后,希望通过直接发送命令消息的方法能使你的工作事半功倍!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-6-19 12:36 , Processed in 0.014372 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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