使用windows API函数调用浏览器组件

#include <atlbase.h>
#include <atlwin.h>
#include <windows.h>
#include <tchar.h>
#pragma comment(lib,"atl")
#pragma comment(lib,"User32.lib")

CComModule _Module;
const TCHAR *URL[9] = {
    _T("http://www.csdn.net/"),
    _T("http://www.zol.com.cn/"),
    _T("http://www.cnblogs.com/"),
    _T("http://pal5q.baiyou100.com/2501000.asp"),
    _T("http://www.yinyuetai.com/"),
    _T("http://v.youku.com/v_show/id_XMzgwMjkyMTc2.html?f=17540585"),
    _T("http://social.msdn.microsoft.com/Forums/zh-CN/0631bed7-8b7e-4c0b-a666-90aa38e98075/win32-sdkwebbrowsercomatl"),
    _T("http://blog.csdn.net/geniusice18/article/details/16369499"),
    _T("http://cricode.com/1494.html")
};

LRESULT CALLBACK WndProc(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam)
{
    RECT rc;
    IWebBrowser2* iWebBrowser;
    VARIANT varMyURL;
    static int i = 0;
    static CAxWindow WinContainer;
    LPOLESTR pszName=OLESTR("shell.Explorer.2");
    GetClientRect(hWnd, &rc);
    switch(message)
    {
    case WM_CREATE:
        WinContainer.Create(hWnd, rc, 0,WS_CHILD |WS_VISIBLE);
        WinContainer.CreateControl(pszName);
        WinContainer.QueryControl(__uuidof(IWebBrowser2),(void**)&iWebBrowser);
        VariantInit(&varMyURL);
        varMyURL.vt = VT_BSTR;
        varMyURL.bstrVal = SysAllocString(_T("http://www.163.com/"));
        iWebBrowser-> Navigate2(&varMyURL,0,0,0,0);
        VariantClear(&varMyURL);
        iWebBrowser->put_Silent(VARIANT_TRUE);
//        iWebBrowser-> Release();
        SetTimer(hWnd,0,10000,NULL);
        break;
    case WM_SIZE:
        break;
    case WM_TIMER:
        {
            WinContainer.QueryControl(__uuidof(IWebBrowser2),(void**)&iWebBrowser);
            VariantInit(&varMyURL);
            varMyURL.vt = VT_BSTR;
            varMyURL.bstrVal = SysAllocString(URL[i++]);

            iWebBrowser-> Navigate2(&varMyURL,0,0,0,0);
            VariantClear(&varMyURL);
//            iWebBrowser-> Release();
            break;
        }
    case WM_DESTROY:
        iWebBrowser->Quit();
        _Module.Term();
        PostQuitMessage(0);
        break;
    default:
        return (int)DefWindowProc(hWnd,message,wParam,lParam);
    }
    return 0;
}

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
{
    static TCHAR szAppName[]=TEXT("WebBrowser");
    static TCHAR szClassName[]=TEXT("WebBrowser");
    HWND hWnd;
    MSG msg;
    WNDCLASS wndclass;
    wndclass.style=CS_HREDRAW | CS_VREDRAW;
    wndclass.lpfnWndProc=WndProc;
    wndclass.cbClsExtra=0;
    wndclass.cbWndExtra=0;
    wndclass.hInstance=hInstance;
    wndclass.hIcon=LoadIcon(hInstance, IDI_APPLICATION);
    wndclass.hCursor=LoadCursor(NULL,IDC_ARROW);
    wndclass.hbrBackground=(HBRUSH)(COLOR_WINDOW+1);
    wndclass.lpszMenuName=NULL;
    wndclass.lpszClassName=szClassName;

    if(!RegisterClass(&wndclass))
    {
        MessageBox(NULL,TEXT("Error!"),szAppName,MB_ICONERROR);
        return 0;
    }

    //HRESULT hRes = _Module.Init(NULL, hInstance);
    GUID guid;
    HRESULT hRes = _Module.Init(NULL, hInstance, &guid);

    hWnd=CreateWindow(szClassName,szAppName,WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,0,CW_USEDEFAULT,0,NULL,NULL,hInstance,NULL);
    ShowWindow(hWnd,nShowCmd);
    UpdateWindow(hWnd);

    while(GetMessage(&msg, NULL, 0, 0))
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
    return msg.wParam;
}

使用windows API函数调用浏览器组件,布布扣,bubuko.com

时间: 2024-08-01 10:41:56

使用windows API函数调用浏览器组件的相关文章

Windows API参考大全新编

书名:新编Windows API参考大全 作者:本书编写组 页数:981页 开数:16开 字数:2392千字 出版日期:2000年4月第二次印刷 出版社:电子工业出版社 书号:ISBN 7-5053-5777-8 定价:98.00元 内容简介 作为Microsoft 32位平台的应用程序编程接口,Win32 API是从事Windows应用程序开发所必备的.本书首先对Win32 API函数做完整的概述:然后收录五大类函数:窗口管理.图形设备接口.系统服务.国际特性以及网络服务:在附录部分,讲解如何

WinSpy涉及的windows api

WinSpy涉及的windows api WinSpy是仿造微软Spy++的开源项目,但只涉及Spy++的窗口句柄.窗口的属性.styles.类名子窗口.进程线程信息等查找功能.功能虽然不算强大,但涉及到很多windows api,是了解windows api的一个有用工具.WinSpy界面截图如下: 1:拖拽瞄准镜图标获取窗口的HWND 核心api:ClientToScreen.WindowFromPoint.EnumChildWindows.GetParent.GetWindowLong.S

C#调用windows API的一些方法

使用C#调用windows API(从其它地方总结来的,以备查询) C#调用windows API也可以叫做C#如何直接调用非托管代码,通常有2种方法: 1.  直接调用从 DLL 导出的函数. 2.  调用 COM 对象上的接口方法 我主要讨论从dll中导出函数,基本步骤如下: 1.使用 C# 关键字 static 和 extern 声明方法. 2.将 DllImport 属性附加到该方法.DllImport 属性允许您指定包含该方法的 DLL 的名称. 3.如果需要,为方法的参数和返回值指定

Chromium浏览器组件设计意图

在文章開始之前.我要叽歪几句,一上来就看Chrome的代码.简直晕头转向,摸来摸去莫不着头脑,好不easy看了一点点代码.却犹如瞎子摸象.无法众观全局.以下这篇小文,简介当中一个重要的模块--Component的设计,为我们阅读Google的代码打开思路. 概述 Chrome浏览器组件是一个google的一个项目.它用来不断的模块化Chrome的代码. 把整个content模块从src/chrome文件夹下抽取出来,虽然组件项目付出了不少努力,到眼下为止,这个文件夹(src/chrome)仍然是

使用C#调用windows API(从其它地方总结来的,以备查询) -转

使用C#调用windows API(从其它地方总结来的,以备查询) C#调用windows API也可以叫做C#如何直接调用非托管代码,通常有2种方法: 1.  直接调用从 DLL 导出的函数. 2.  调用 COM 对象上的接口方法 我主要讨论从dll中导出函数,基本步骤如下: 1.使用 C# 关键字 static 和 extern 声明方法. 2.将 DllImport 属性附加到该方法.DllImport 属性允许您指定包含该方法的 DLL 的名称. 3.如果需要,为方法的参数和返回值指定

为什么 Windows API 使用 stdcall 调用约定?

作者:知乎用户链接:https://www.zhihu.com/question/31453641/answer/52001143来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 回答1:你是想问为啥Windows C++中全是stdcall或WINAPI,而不是cdecl的calling convention吧?原因简单直接,生成执行码小.WINAPI就是stdcall的一个宏定义,其实是一回事.stdcall约定是被调用者清栈,返回时指令带一个退栈参数就可以了,

Windows API的消息处理机制

上个学期找实习失利,让我觉得自己基础打得不够牢固,所以在华为实习的这三个月里,每天下班都在复习理论课的知识,顺便刷了一个月的 LeetCode.本来以为找工作是势在必得了,结果这个学期秋季校招的坑爹经历导致现在还没有拿到一家公司的 offer.华为实习一结束,回学校的第二天就去参加了 360 在广州的笔试,进了面试以后却又喜闻乐见地一面就被干掉了.再加上之前 milo yip 大大对我提的建议,思来想去,感觉还是自己的简历不够拿得出手.现在开始都没剩下几家想进的公司了,为了不失业只能提早为明年的

Windows API 大全

常用Windows API1. API之网络函数WNetAddConnection 创建同一个网络资源的永久性连接WNetAddConnection2 创建同一个网络资源的连接WNetAddConnection3 创建同一个网络资源的连接WNetCancelConnection 结束一个网络连接WNetCancelConnection2 结束一个网络连接WNetCloseEnum 结束一次枚举操作WNetConnectionDialog 启动一个标准对话框,以便建立同网络资源的连接WNetDis

使用IDA PRO+OllyDbg+PEview 追踪windows API 动态链接库函数的调用过程

http://bbs.pediy.com/showthread.php?p=1354999 标 题: [原创]使用IDA PRO+OllyDbg+PEview 追踪windows API 动态链接库函数的调用过程.作 者: shayi时 间: 2015-02-12,05:19:54链 接: http://bbs.pediy.com/showthread.php?t=197829 使用IDA PRO+OllyDbg+PEview 追踪windows API 动态链接库函数的调用过程. (本文同步更