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

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

[复制链接]
发表于 2003-12-22 16:59:03 | 显示全部楼层 |阅读模式
利用IE的命令直接操作WebBrowser控件+ q/ i9 o7 M# R% H6 O* H
( }2 ?  y( G) b, b
通常,我们对CHtmlView/WebBrowser控件进行打印、查看源文件、查找等操作麻烦的不得了
: w, G  p/ b3 B0 W详见http://support.microsoft.com/support/kb/articles/Q156/7/32.ASP
6 ?( b) l/ m7 d% A! g, P3 ?' j  }
7 }' m9 |# o$ H其次就是打开“Internet选项”、“添加到收藏夹”等方面的麻烦:
% l5 I+ t3 S& c4 ?% M1 V# [详见http://www.csdn.net/Expert/TopicView1.asp?id=620932
& O. h! ^# u0 Z2 _  T! v
& F6 T" e* W$ G6 \% I下面介绍的方法能够迅捷的通过短短几行代码完成上述操作,并且你还能完成一些特殊的操作(比如让IE控件进入像frontpage那样的编辑状态等等)
: y5 f( J8 A4 v+ l- r+ C5 _0 [, P, u0 q
1 u9 |1 _$ F5 V2 R- p- a0 L
首先,在你的工程里填加对MsHtmcid.h的支持:
+ x4 {9 Z( E: v( y) b& o2 {( i+ m' c0 N  v% u# O: v! X, P
#include <MsHtmcid.h> //你可以在VC的头文件的目录中找到它,
* H  x5 U# E+ O                                    //推荐你到MS网站下载最新文件以获得对IE6命令的支持。" f: `4 z6 u6 r7 M- \" T8 z
4 M  b; S" o3 y* a: S4 m4 d, @

) L, G, n+ @- i然后你所要做的仅仅是找到IE控件的Internet Explorer_server窗口句柄发送命令给它。
+ y) u% ~0 R3 m# \0 o下面给出部分演示,看了演示你就知道该怎么做了。
% Y( R3 V* ^' t
+ b) p1 O. a* j将WebBrowser切换至编辑状态:* V1 ^0 p1 d5 {8 O) G3 S

* W5 r3 k1 }& c* C8 h, _5 hvoid CWebBrowser2::OnGotoEditMode() - D6 {1 `8 U0 V/ \
{
# J& n+ I8 R5 E/ l, W0 {% D* S' e  o CWnd* pwndIEShell = NULL;7 t, R, _  Q9 }
CWnd* pwndIEHTML = NULL;
4 `- n5 f8 s/ w) f! O
+ G0 H4 N# |) ~' y! G; U0 p, c2 C( g pwndIEShell = this->GetWindow(GW_CHILD); //this是CWebBrowser2指针7 f9 O/ o: b+ m2 j3 B* V
if (pwndIEShell)" s6 h4 ?+ b# Y. {  s
{
, \' H( u4 V1 D/ I6 C  pwndIEHTML = pwndIEShell->GetWindow(GW_CHILD); //WebBrowser控件的窗口关系你可以通过spy++来观察,这里不累赘
  h3 c6 ?) ]. ^/ O }) B  q9 J+ ?$ k

9 K. f; k2 S5 e$ H* h if(pwndIEHTML != NULL)5 _( N, B+ w  w3 u- J
{2 ?' f) p8 L6 N) @- q8 R4 L. n
  WPARAM wParam = MAKELONG(IDM_EDITMODE, 1);//IDM_EDITMODE换为IDM_BROWSEMODE就返回浏览模式9 B* I! e( q% q, @/ v
  pwndIEHTML->SendMessage(WM_COMMAND, wParam, (LPARAM)pwndIEHTML->m_hWnd);! B! ?, h, R. Q0 r$ Z; t, w
}
' t3 S7 B! I4 y& \}) ^  {0 d9 N. y& a9 [/ G

$ n  K2 O8 w5 C$ s1 E" Z之后你会发现WebBrowser控件变的跟frontpage一样(早知道这样不用DHtmlEdit控件了,哈)
9 T7 _# b- W' f( R4 Y6 ?% Q7 f3 n& a/ j9 |/ r6 T  e+ s8 S1 P/ ^
CHtmlView的实现跟上面稍有不同,因为多了个CFormView的缘故,具体代码如下:
2 S0 j3 n6 I# r& ~$ d: v" x1 W5 @8 n3 [
void CYourhtmlView::OnAddtoFavorites() . ~% i( n( U3 v4 H3 a, x
{0 D* N- @9 s  }8 {2 \1 Q
CWnd* pwndWebControl = NULL;: }# A; k% d9 `& w* m
CWnd* pwndIEShell = NULL;
$ S8 I) D$ y4 U# Z) N8 I) ^ CWnd* pwndIEHTML = NULL;- m( d1 N" ^+ A6 Y8 C: d
( z- O$ ]0 @0 z# u+ v) @# c* s
pwndWebControl = GetWindow(GW_CHILD);9 `1 W" S6 ^9 x9 b6 s# A8 v6 {
if(pwndWebControl == NULL)$ [6 s6 G8 w; J
  return;: r' R8 p% ]# r  l
pwndIEShell = pwndWebControl->GetWindow(GW_CHILD);
# ?, M+ r8 R  h if (pwndIEShell)2 U, Z, E; V8 E' H: D
{: [# m* j# i/ I+ D5 a
  pwndIEHTML = pwndIEShell->GetWindow(GW_CHILD);0 [3 Y8 w: N" q' W  Q
}! Z/ L1 j/ m9 p9 |( E  B% X+ s
2 p; s$ Y. |8 x( r
if(pwndIEHTML != NULL)2 i) H; ^8 e) L
{
4 v; ]3 x/ Q; Y6 N3 S! X  WPARAM wParam = MAKELONG(IDM_ADDFAVORITES, 1);//添加到收藏夹,换成IDM_OPTIONS就是打开internet选项。% x* u$ b  }$ w, J
  pwndIEHTML->SendMessage(WM_COMMAND, wParam, (LPARAM)pwndIEHTML->m_hWnd);
& {# e/ ]3 p3 @& G: t }  : O8 y7 {- ~2 x( q
}7 W- ~3 S- I) L/ [

$ Y! c3 o1 p1 q5 r  `通过改变wParam ,你可以实现几乎IE所有的已知的命令(另存为...、打印预览、创建桌面快捷方式等等)和一些未知的命令(比如进入编辑模式等等)。( d2 v; E; v3 u6 H0 p

& T; \2 ?- @: E  v# |& _$ L- \+ o好了,就介绍到这,具体的你可以通过观察MsHtmcid.h和实践来了解。
/ T% |) P6 Y$ z, ^/ i" R  F3 T最后,希望通过直接发送命令消息的方法能使你的工作事半功倍!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-11-15 03:34 , Processed in 0.023070 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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