VerySource

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 812|回复: 2

如何改变程序中嵌入的IE Activex控件中的内容?

[复制链接]

1

主题

1

帖子

2.00

积分

新手上路

Rank: 1

积分
2.00
发表于 2020-1-2 17:50:01 | 显示全部楼层 |阅读模式
如题,想编程序控制页面进行自动化操作,牵扯到自动填写表单然后发送,或者在某些情况下修改页面元素内容,如何实现?
06问题,07年提问
回复

使用道具 举报

0

主题

36

帖子

22.00

积分

新手上路

Rank: 1

积分
22.00
发表于 2020-1-31 09:45:01 | 显示全部楼层
////////////////////////////////////////////////////////
//Fill input field in IE
//If it works, it is written by 深蓝旅者,otherwise I don't
//know who writes it^_^
///////////////////////////////////////////////////////
#import <mshtml.tlb> // Internet Explorer 5
#import <shdocvw.dll>
#include "Shlwapi.h"
#pragma comment(lib,"Shlwapi.lib")
int _tmain(int argc, _TCHAR* argv[])
{
        CoInitialize(NULL);
        SHDocVw::IShellWindowsPtr m_spSHWinds;
        if(m_spSHWinds.CreateInstance(__uuidof(SHDocVw::ShellWindows)) == S_OK)
        {
                IDispatchPtr spDisp;
                long nCount = m_spSHWinds->GetCount();
                for (long i = 0; i < nCount; i++)
                {
                        _variant_t va(i, VT_I4);
                        spDisp = m_spSHWinds->Item(va);
                        SHDocVw::IWebBrowser2Ptr spBrowser(spDisp);
                        if (spBrowser != NULL)
                        {
                                IDispatchPtr spDisp;
                                if(spBrowser->get_Document(&spDisp) == S_OK && spDisp!= 0 )
                                {
                                        MSHTML::IHTMLDocument2Ptr spHtmlDocument(spDisp);
                                        MSHTML::IHTMLElementPtr spHtmlElement;
                                        if(spHtmlDocument==NULL)
                                                continue;
                                        spHtmlDocument->get_body(&spHtmlElement);
                                        if(spHtmlDocument==NULL)
                                                continue;
                                        HRESULT hr;
                                        MSHTML::IHTMLElementCollection* pColl=NULL;
                                        hr=spHtmlDocument->get_all(&pColl);
                                        if(pColl!=NULL&&SUCCEEDED(hr))
                                        {
                                                long lcount = 0;
                                                pColl->get_length(&lcount);
                                                for(int i=0;i<lcount;i++)
                                                {
                                                        _variant_t index;
                                                        index.vt=VT_I4;
                                                        index.intVal=i;
                                                        IDispatchPtr disp;
                                                        disp=pColl->item(index,index);
                                                        if(disp==NULL)
                                                                hr=E_FAIL;
                                                        else
                                                        {
                                                                MSHTML::IHTMLInputElementPtr pInput(disp);
                                                                if(pInput)
                                                                {
                                                                        BSTR bstrtype;
                                                                        pInput->get_type(&bstrtype);
                                                                        printf(_bstr_t(bstrtype));
                                                                        if(StrCmpW(bstrtype,L"text")==0)
                                                                        {
                                                                                pInput->put_value(_bstr_t("fill it"));
                                                                                printf("fill a field\n");
                                                                        }
                                                                        SysFreeString(bstrtype);
                                                                }
                                                        }

                                                }
                                                pColl->Release();
                                        }
                                }

                        }
                }

        }
        else
        {
                printf("Shell Windows interface is not avilable\n");
        }
        CoUninitialize();
        return 0;
}
回复

使用道具 举报

0

主题

36

帖子

22.00

积分

新手上路

Rank: 1

积分
22.00
发表于 2020-1-31 10:18:01 | 显示全部楼层
还有一些代码片断可能对你有些启发
http://www.fruitfruit.com/vc/ie/iehtml.cpp
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|CopyRight © 2008-2023|verysource.com ( 京ICP备17048824号-1 )

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