|
利用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最后,希望通过直接发送命令消息的方法能使你的工作事半功倍! |
|