如何改变ie窗口大小并向此窗口传送url显示网页我想用vc6做如下工作:
1. 打开一个ie窗口 -- 用ShellExecuteEx或CreateURLMoniker已实现
2. 控制此窗口大小 -- 看了些文章,大致思路:FindWindow()得到需要的窗口的句柄,用SetWindowPos()设置位置和尺寸,但还没试过,不知是否可行
3. 向此窗口传送url并显示网页内容 -- 以前有看过某些软件,在最近打开的ie窗口中,连接并打开自己需要的特定页面。如果没有打开的ie窗口,则自己打开一个。
第三点我没有思路。不知道哪位大虾,可以指点一下,谢谢.

解决方案 »

  1.   

    IHTMLDocument2* pDoc2 = NULL;
    LRESULT lRes;
    HINSTANCE hInst = ::LoadLibrary( _T("OLEACC.DLL") ); UINT nMsg = ::RegisterWindowMessage( _T("WM_HTML_GETOBJECT") );
    ::SendMessageTimeout(hWnd, nMsg, 0L, 0L, SMTO_ABORTIFHUNG, 1000, (DWORD*)&lRes );
    LPFNOBJECTFROMLRESULT pfObjectFromLresult = (LPFNOBJECTFROMLRESULT)::GetProcAddress( hInst, _T("ObjectFromLresult") );
    if ( pfObjectFromLresult != NULL )
    {
    HRESULT hr;
    IWebBrowser2* pWeb;
    hr = (*pfObjectFromLresult)( lRes, IID_IWebBrowser2, 0, (void**)&pWeb);

    //以上代码可以获得IE窗口的IID_IWebBrowser2接口
    CComBSTR bstrURL("www.sina.com.cn");
        CComVariant vtEmpty;    pWeb->Navigate(bstrURL, &vtEmpty, &vtEmpty,
                                  &vtEmpty, &vtEmpty);
    // 完成向此窗口传送url并显示网页内容
      

  2.   

    抱歉,其实只用ShellExecuteEx或CreateURLMoniker打开了一个ie 浏览器或指向特定url的网页.怎么获得这个ie 窗口的hwnd,仍是一头雾水,(最近有点弱智,自己),所以也没有成功更改窗口大小goodboyws(深夜不眠者)程序中::SendMessageTimeout(hWnd, nMsg, 0L, 0L, SMTO_ABORTIFHUNG, 1000, (DWORD*)&lRes );应该是ie窗口的hWnd吧.不知道哪位大虾再帮个忙,谢谢.
      

  3.   

    用CoCreateInstance可以创建CLSID_INTERNETEXPLORER 对象并控制(该对象具有HWND属性可以参作)
      

  4.   

    我们可以通过VB或VC来调用自动化组件IE来进行POST操作,本文将说明如何利用IE控件完成此项工作。我们可以通过GET和POST两种方法向服务器发送数据,通常GET发送的数据不能超过2K,因此限制比较大。IE支持IWebBrowser接口,此接口中有一个重要的函数Navigate,下面是它的IDL定义语法:HRESULT Navigate([in] BSTR URL, [in] VARIANT* Flags,
    [in] VARIANT* TargetFrameName, [in] VARIANT* PostData,
    [in] VARIANT* Headers);
    为了进行POST操作,只需要URL,PostData和Headers参数即可,其它参数请参阅MSDN中的Internet Client SDK,为了向服务器发出数据,必须保证HTTP服务器地址正确,同时要保证PostData参数包括一个SAFEARRAY数据, 头必须包括BSTR,它包括:Content-Type: application/x-www-form-urlencoded 此头说明了发送的数据是依什么编码进行编码的。请将下面的ASP页保存在IIS服务器上。<HTML>
    <%
    cFlavor = Request("Flavor")
    cName = Request("FName")
    %>
    <BODY>
    Hello, <% =cName %>. <br>
    One scoop of <% =cFlavor %> coming right up!
    </BODY>
    </HTML>
    建立一个Win32控制台应用程序。 
    下面是具体代码:
    #include <windows.h>
    #define INITGUID
    #include <initguid.h>
    #include <exdisp.h>
    #include <memory.h>HRESULT GetPostData(LPVARIANT pvPostData);void main()
    {
    HRESULT hr;
    IWebBrowserApp* pWBApp = NULL; // Derived from IWebBrowser
    BSTR bstrURL = NULL, bstrHeaders = NULL;
    VARIANT vFlags = {0},
    vTargetFrameName = {0},
    vPostData = {0},
    vHeaders = {0};if (FAILED(hr = CoInitialize(NULL)))
    {
    return;
    }if (FAILED(hr = CoCreateInstance(CLSID_InternetExplorer,
    NULL,
    CLSCTX_SERVER,
    IID_IWebBrowserApp,
    (LPVOID*)&pWBApp)))
    {
    goto Error;
    }bstrURL = SysAllocString(L"http://<server>/scripts/navpost.asp"); 
    if (!bstrURL)
    {
    goto Error;
    }bstrHeaders = SysAllocString(
    L"Content-Type: application/x-www-form-urlencoded\r\n");
    if (!bstrHeaders)
    {
    goto Error;
    }V_VT(&vHeaders) = VT_BSTR;
    V_BSTR(&vHeaders) = bstrHeaders;hr = GetPostData(&vPostData);
    hr = pWBApp->Navigate(bstrURL, &vFlags,
    &vTargetFrameName, &vPostData, &vHeaders);
    pWBApp->put_Visible(VARIANT_TRUE);Error:
    if (bstrURL) SysFreeString(bstrURL);
    if (bstrHeaders) SysFreeString(bstrHeaders);
    VariantClear(&vPostData);
    if (pWBApp) pWBApp->Release();
    CoUninitialize();
    }// Pack some data into a SAFEARRAY of BYTEs. Return in a VARIANT
    HRESULT GetPostData(LPVARIANT pvPostData)
    {
    HRESULT hr;
    LPSAFEARRAY psa;
    LPCTSTR cszPostData = "FName=Matt&Flavor=Mocha+Chip";
    UINT cElems = lstrlen(cszPostData);
    LPSTR pPostData;if (!pvPostData)
    {
    return E_POINTER;
    }VariantInit(pvPostData);psa = SafeArrayCreateVector(VT_UI1, 0, cElems);
    if (!psa)
    {
    return E_OUTOFMEMORY;
    }hr = SafeArrayAccessData(psa, (LPVOID*)&pPostData);
    memcpy(pPostData, cszPostData, cElems);
    hr = SafeArrayUnaccessData(psa);V_VT(pvPostData) = VT_ARRAY | VT_UI1;V_ARRAY(pvPostData) = psa;
    return NOERROR;
    }