13,822
社区成员
发帖
与我相关
我的任务
分享
#include <Mshtml.h>
#include "SHDocVw_OCX.h"
bool CrnRunJavaScript(
IHTMLDocument2 *spDoc,
LPSTR lpScript,
LPSTR lpLang//LPSTR lpLang = "JScript";
){//通过IHTMLDocument2接口控制IE执行javascript和vbscript代码
IHTMLWindow2 *pWin;
VARIANT vRet;
bool bRet = false;
if(spDoc != NULL){
try{
spDoc->get_parentWindow(&pWin);
if(pWin != NULL){
try{
pWin->execScript(WideString(lpScript), WideString(lpLang), &vRet);
bRet = true;
}__finally{
pWin = NULL;
}
}
}__finally{
spDoc == NULL;
}
}
return bRet;
}
void __fastcall TForm1::Button1Click(TObject *Sender)
{
DWORD TheProcessID, ErrorCode;
HWND TheWindowHandle=FindWindowEx(NULL,NULL,"IEFrame",NULL);
if(!TheWindowHandle){//如果找不到IE窗口
Application->BringToFront();
ShowMessage("Internet Explorer浏览器没有启动,操作取消");
return;
}
typedef TComInterface<IHTMLDocument2, &IID_IHTMLDocument2> IHTMLDocument2Ptr;
TCppShellWindows * ptrShellWin = new TCppShellWindows(this);
//long nCount=ptrShellWin->get_Count();//取得浏览器实例个数
//或:ptrShellWin->Count//取得浏览器实例个数
//ShowMessage(nCount);//显示结果
for(long i = 0; i < ptrShellWin->Count; i++){//i的值按IE的启动顺序
//TVariantInParam va(i);//编译时提示:W8053 'TVariantInParam' is obsolete,因此用下面的
TVariant va(i);
IWebBrowser2Ptr ptrWebBrowser( (IDispatch *) ptrShellWin->Item(va));
BSTR BSTRType;
ptrWebBrowser->get_Type(&BSTRType);
//获取文档的类型,如果是IE窗口,则会返回"HTML 文档",否则BSTRType被设为NULL
if(BSTRType){
SysFreeString(BSTRType);
IHTMLDocument2Ptr ptrHTMLDoc(ptrWebBrowser->get_Document());
if((IHTMLDocument2 *)ptrHTMLDoc != NULL){
IHTMLDocument2 *HTMLDocument = NULL;
if(SUCCEEDED(ptrHTMLDoc->QueryInterface(IID_IHTMLDocument2,(LPVOID*)&HTMLDocument))){
LPSTR lpLang = "JScript";
CrnRunJavaScript(HTMLDocument,Memo1->Text.c_str(),lpLang);
//对话框在IE中出现,如果不关闭程序将处于锁定状态
//javascript:window.clipboardData.setData("Text",document.getElementById("ifm0").src); alert("复制到剪贴板成功");
//javascript:window.clipboardData.setData("Text",document.getElementById("ifm0").src);
//javascript:alert("俺就是那个对话框");
}
}
}
}
delete ptrShellWin;
}