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

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

[复制链接]
发表于 2003-12-22 16:59:03 | 显示全部楼层 |阅读模式
利用IE的命令直接操作WebBrowser控件
; h5 K# l. A& \" W. x" s5 y
( x; j6 ]% `- m4 {& f通常,我们对CHtmlView/WebBrowser控件进行打印、查看源文件、查找等操作麻烦的不得了% G% M9 d- y) h: `- h4 E. U: k( x* c
详见http://support.microsoft.com/support/kb/articles/Q156/7/32.ASP% M' H: h$ f- v- g0 J0 ]4 n& ^. Z; Y$ q

7 e% X9 k3 `  D' }; g% g其次就是打开“Internet选项”、“添加到收藏夹”等方面的麻烦:/ E- D6 c4 L/ b! G3 A9 p# \
详见http://www.csdn.net/Expert/TopicView1.asp?id=620932& v1 [: c( o) o& K

% |( `: B) ?7 p下面介绍的方法能够迅捷的通过短短几行代码完成上述操作,并且你还能完成一些特殊的操作(比如让IE控件进入像frontpage那样的编辑状态等等)3 M" k8 G( g" p- W0 @- E6 t6 m

1 x" b$ B6 c3 u& z9 R3 `; _5 V$ N* A
首先,在你的工程里填加对MsHtmcid.h的支持:2 C3 x: s8 ?0 Z, a* m% W0 H- D

- Q$ g: {* P' g" K4 e& ] #include <MsHtmcid.h> //你可以在VC的头文件的目录中找到它,
8 k6 Y9 u. t$ l1 C- C% t1 L                                    //推荐你到MS网站下载最新文件以获得对IE6命令的支持。
, {$ T1 [$ a$ |
& I: r0 m3 y- p" _6 I1 l
$ c3 a; h5 ?' ^" }8 |' L然后你所要做的仅仅是找到IE控件的Internet Explorer_server窗口句柄发送命令给它。: `; N/ _6 M, B7 }% C% R
下面给出部分演示,看了演示你就知道该怎么做了。
& i' m2 q% @0 u9 e' H" ?4 B. y0 s" i! @9 e
将WebBrowser切换至编辑状态:# O' q- e0 |4 V% D5 |

1 S1 V  `# _; ~# tvoid CWebBrowser2::OnGotoEditMode() / h6 o* M# J: K; X! `
{$ Z, |( `% L0 e5 V4 S
CWnd* pwndIEShell = NULL;
' b8 D' ?+ s( b- F' a9 v CWnd* pwndIEHTML = NULL;+ q$ p3 c) Z% t$ i/ u2 D

, |, z4 o% ]2 [$ r- P! o5 |5 ^, V& ~ pwndIEShell = this->GetWindow(GW_CHILD); //this是CWebBrowser2指针
2 b, M% e% D9 u$ s* V( w0 r$ w if (pwndIEShell)0 H+ _7 J9 g$ o; t9 B' m* e
{
0 q/ I, B& j7 T7 k  pwndIEHTML = pwndIEShell->GetWindow(GW_CHILD); //WebBrowser控件的窗口关系你可以通过spy++来观察,这里不累赘9 D& C3 @& Y2 _5 ?, o4 ]" ^. D
}
/ @6 B1 H+ O0 ^2 x/ v . N7 x7 D3 n5 e! p0 m8 V
if(pwndIEHTML != NULL)
- ^5 D" z: c4 u# y {  M* D+ k# \# o% v3 i! p% V" }
  WPARAM wParam = MAKELONG(IDM_EDITMODE, 1);//IDM_EDITMODE换为IDM_BROWSEMODE就返回浏览模式
* M& m9 `* _5 f' h) o  pwndIEHTML->SendMessage(WM_COMMAND, wParam, (LPARAM)pwndIEHTML->m_hWnd);
$ b. K; ?" p6 Z+ s3 t3 _ }
. w# V3 R% i6 \1 J1 q3 s# ]$ c3 {  g}
$ ]9 s/ i: E1 W( C  o5 I- m3 O( E" J* ?! C
之后你会发现WebBrowser控件变的跟frontpage一样(早知道这样不用DHtmlEdit控件了,哈)
# a( i/ L2 C& ~$ i1 n) _, M* E- f) g- }# I- B
CHtmlView的实现跟上面稍有不同,因为多了个CFormView的缘故,具体代码如下:" N# Q/ o  a" N7 U, K* u# R

% Z, m/ A5 N* M. t  `* J/ Gvoid CYourhtmlView::OnAddtoFavorites()
5 ~9 N  q; I/ T9 k, @{
2 A4 M: ~) ?8 a" N4 n: U  m CWnd* pwndWebControl = NULL;
9 s( a" D$ c6 J8 ]* l CWnd* pwndIEShell = NULL;# X/ G- y3 m* g0 N# c6 a1 Y: Z
CWnd* pwndIEHTML = NULL;1 q/ `/ e$ y8 |& v* i/ n# l7 o0 p
: \0 ~7 q  J6 C7 y: C
pwndWebControl = GetWindow(GW_CHILD);
, T: f: c0 d' G1 E4 I! J if(pwndWebControl == NULL)
- ~& A+ `5 }0 [' s  return;0 o; ~0 h$ w- t
pwndIEShell = pwndWebControl->GetWindow(GW_CHILD);
3 r/ B6 C  F6 h8 X5 } if (pwndIEShell)
+ \+ S# a5 N4 N+ n4 l {
2 F2 U; _1 O9 s  pwndIEHTML = pwndIEShell->GetWindow(GW_CHILD);
1 O+ G+ E) [6 e8 }" f+ ` }6 u6 m7 m4 _% c2 I! k

, \. c3 l2 g, a' g$ A if(pwndIEHTML != NULL)
6 F5 `! M. P- \8 E6 a+ |5 L {$ Z# f% v. X; i5 Q- y6 e- s/ A3 Y2 z
  WPARAM wParam = MAKELONG(IDM_ADDFAVORITES, 1);//添加到收藏夹,换成IDM_OPTIONS就是打开internet选项。
2 @, S# K' J# R  ^9 W  pwndIEHTML->SendMessage(WM_COMMAND, wParam, (LPARAM)pwndIEHTML->m_hWnd);9 ~: A" s' n5 o) h- B5 j
}  5 C" ?. d" {( u7 s- s
}
: d3 x: n# H( v) ]- T. m3 M0 E* M2 D! i! Q- W8 @! \( B+ g$ l
通过改变wParam ,你可以实现几乎IE所有的已知的命令(另存为...、打印预览、创建桌面快捷方式等等)和一些未知的命令(比如进入编辑模式等等)。+ i( D# Q' ]: N4 m$ k

. l& F# K$ r9 j. Y. T4 j好了,就介绍到这,具体的你可以通过观察MsHtmcid.h和实践来了解。
, f' g; ?# V/ d+ `- a最后,希望通过直接发送命令消息的方法能使你的工作事半功倍!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-8-9 08:48 , Processed in 0.033813 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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