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

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

[复制链接]
发表于 2003-12-22 16:59:03 | 显示全部楼层 |阅读模式
利用IE的命令直接操作WebBrowser控件& x+ B' L! ]# R
6 _0 A( Q( c" {! E
通常,我们对CHtmlView/WebBrowser控件进行打印、查看源文件、查找等操作麻烦的不得了
4 K. y, r  W0 s& E4 |详见http://support.microsoft.com/support/kb/articles/Q156/7/32.ASP
8 c* ?1 K( |/ D; Z+ X* V; Z
# ], I( N! b! P4 [9 R其次就是打开“Internet选项”、“添加到收藏夹”等方面的麻烦:
8 X/ s/ R" B: X: j1 p, b. }6 J- U详见http://www.csdn.net/Expert/TopicView1.asp?id=6209329 ^1 B% q4 t) `7 f' v

3 w. M. K( [0 @% r) d下面介绍的方法能够迅捷的通过短短几行代码完成上述操作,并且你还能完成一些特殊的操作(比如让IE控件进入像frontpage那样的编辑状态等等)/ ?. K% i: ^; p4 `

+ z! N  s: L; _; }
5 `& x" ?3 U+ U' s0 M3 B9 v  u首先,在你的工程里填加对MsHtmcid.h的支持:
) F2 k" R6 ?* k2 K( E2 B" i
0 T3 j$ w1 G. s3 B# a9 s. v #include <MsHtmcid.h> //你可以在VC的头文件的目录中找到它,
' m$ n4 c7 N" Z# K* N9 M* c- t; H                                    //推荐你到MS网站下载最新文件以获得对IE6命令的支持。
* y+ J7 R: R6 P2 p& B$ b
5 y6 p3 f: ^: d) G( c# w) ]& g. v# B+ j8 q  C. {! Y7 O
然后你所要做的仅仅是找到IE控件的Internet Explorer_server窗口句柄发送命令给它。
# x; o# @7 [3 W( E. s' B下面给出部分演示,看了演示你就知道该怎么做了。
: P* N0 B8 w3 D
' E0 A3 a* j1 B, N$ _8 w; ^3 L. @将WebBrowser切换至编辑状态:
& u; T! P8 r+ G" t7 N  r1 S0 e( q1 J, a  d; Z
void CWebBrowser2::OnGotoEditMode()
: K- w3 ?9 ~3 x# ]9 b{8 f8 g3 _& l3 i/ G$ W7 U0 A2 t
CWnd* pwndIEShell = NULL;
1 P$ p( M- z; X, u CWnd* pwndIEHTML = NULL;" H' F2 i" I  Z1 g  K7 R

6 z9 x' @9 q3 L& {1 n pwndIEShell = this->GetWindow(GW_CHILD); //this是CWebBrowser2指针
& o, i6 }" {1 W/ ^, H; m+ r if (pwndIEShell)
8 C4 @0 M) |( }) T) X1 ~+ x* O {2 g7 `: `* Y- g. [' _8 Y
  pwndIEHTML = pwndIEShell->GetWindow(GW_CHILD); //WebBrowser控件的窗口关系你可以通过spy++来观察,这里不累赘
- g- \8 h; M& o4 ?; p4 R# a }
% \( a# j" r8 D5 w0 g6 ]5 a   Y" T/ ~2 Q0 M: V
if(pwndIEHTML != NULL)
& q: p' O& C: Q2 W8 g# n {5 ^- [" X+ M9 Y3 F& M$ Z
  WPARAM wParam = MAKELONG(IDM_EDITMODE, 1);//IDM_EDITMODE换为IDM_BROWSEMODE就返回浏览模式
. j; c; Q5 A# g) x, D6 }( K) x+ ?0 V  pwndIEHTML->SendMessage(WM_COMMAND, wParam, (LPARAM)pwndIEHTML->m_hWnd);
8 n7 c; q) \4 U4 y+ r9 ^6 Q } ( ?0 m6 j+ b+ W$ b& a; _5 ]
}. C* N% u( k! K$ S. _
+ ~# J2 a+ l+ ^  u% m9 k- V: T
之后你会发现WebBrowser控件变的跟frontpage一样(早知道这样不用DHtmlEdit控件了,哈)1 U3 t7 _  q- l- C5 a) U

5 D. B% a6 j' }0 v3 s8 eCHtmlView的实现跟上面稍有不同,因为多了个CFormView的缘故,具体代码如下:" \7 ?; S5 \- q2 J+ A. Q7 H1 z
* @! @. C# ?! D* |" X& U8 k
void CYourhtmlView::OnAddtoFavorites()
! W: \7 N( B/ K{
6 E& t2 i  e# g+ x CWnd* pwndWebControl = NULL;
- a# U- B6 `" J) z CWnd* pwndIEShell = NULL;; W7 q7 X! p7 [/ H: X5 r4 j
CWnd* pwndIEHTML = NULL;7 V9 A, ^% Q' D% \8 L  G" @
! T$ u: l. M0 A2 U& Q+ ]4 H5 V
pwndWebControl = GetWindow(GW_CHILD);3 Z( m/ Q3 U; x) g2 L2 [
if(pwndWebControl == NULL)
0 e, E5 D5 P: M" m3 i  [2 ]7 K  return;9 r9 t* @, L( G+ c& R, S! ~# ^
pwndIEShell = pwndWebControl->GetWindow(GW_CHILD);
' I: r7 u! k* `; ~' X' a if (pwndIEShell)
+ g% D: L2 P8 y3 L {" a) i' H( T/ b9 q. s% Z3 i1 u& O
  pwndIEHTML = pwndIEShell->GetWindow(GW_CHILD);
3 K& P1 S) [$ I! n, y+ g  k8 h" h }) I9 `+ T! I. T

7 _% Q4 C) |, A$ k6 v8 _7 X  U& O3 a if(pwndIEHTML != NULL), _3 o! l* M; O0 Y. h! k
{
' ?  i6 r& d0 d2 O6 _' G5 `  WPARAM wParam = MAKELONG(IDM_ADDFAVORITES, 1);//添加到收藏夹,换成IDM_OPTIONS就是打开internet选项。9 ^6 c( m) j" Z! Y" d6 j# f) n9 d
  pwndIEHTML->SendMessage(WM_COMMAND, wParam, (LPARAM)pwndIEHTML->m_hWnd);
! c' r  E+ a' ^* D0 K }  
6 o# w- h2 g1 ~4 Z& m; q3 U}
: E$ @! B! f2 O3 e0 r+ Z6 q( U- C/ C. G+ s
通过改变wParam ,你可以实现几乎IE所有的已知的命令(另存为...、打印预览、创建桌面快捷方式等等)和一些未知的命令(比如进入编辑模式等等)。
! `" `( R" w, L/ a, X+ V4 `3 P4 v' F5 H3 b
好了,就介绍到这,具体的你可以通过观察MsHtmcid.h和实践来了解。6 J+ O# c! i$ _" J
最后,希望通过直接发送命令消息的方法能使你的工作事半功倍!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-9-30 11:01 , Processed in 0.035967 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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