美文网首页
Cef初始化

Cef初始化

作者: 晓函 | 来源:发表于2018-08-17 19:55 被阅读229次
    
    
    //进程开始的时候初始化CEF
    bool InitCef(HINSTANCE hInstance){
        //cef初始化
        printf("InitCef\n");
    
        CefMainArgs main_args(hInstance);
    
        CefRefPtr<CCefClientApp>app(new CCefClientApp);// CefClientApp 继承了cefapp
    
        /*======渲染子进程 直接执行命令=========*/
        // CEF applications have multiple sub-processes (render, plugin, GPU, etc)
        // that share the same executable. This function checks the command-line and,
        // if this is a sub-process, executes the appropriate logic.
        //返回值:
        //     尝试执行CEF命令行参数,如果是cef渲染子进程,则执行参数成功,大于等于0。
        //     普通客户端进程由于没有cef命令行参数会直接返回-1
        int exit_code = CefExecuteProcess(main_args, app, NULL);
        if (exit_code >= 0)
        {
            printf("CefExecuteProcess exit code:%d\n", exit_code);
            // The sub-process has completed so return here.
            //子进程完成后会从这里返回
            return false;
        }
    
        /*========主窗口进程正常初始化=========*/
        // Specify CEF global settings here.
        CefSettings settings;
        CefSettingsTraits::init(&settings);
        settings.single_process = false;                //使用单进程模式
        settings.ignore_certificate_errors = true;      //忽略掉ssl证书验证错误
        settings.log_severity = LOGSEVERITY_ERROR;
        settings.no_sandbox = true;
        //multi_threaded_message_loop=true 这样设置的目的是使cef的browser ui线程和程序的线程分离,使用duilib的消息循环函数
        settings.multi_threaded_message_loop = true;
        settings.command_line_args_disabled = true;
        CefString(&settings.locale).FromASCII("zh-CN");
    
        TCHAR szSpecialPath[MAX_PATH] = { 0 };
    
        wstring cache_path = OS::GetAppDataPath() + L"MyCefExplorer\\Webkit\\";
        if (!cache_path.empty())
        {
            StringCbCopy(szSpecialPath, sizeof(szSpecialPath), cache_path.c_str());
            CefString(&settings.cache_path).FromString(szSpecialPath, sizeof(szSpecialPath) / 2, true);
        }
    
    
        //初始化
        CefInitialize(main_args, settings, app.get(), NULL);
    
        //屏蔽flash弹出的CMD,将本进程CMD路径设为当前路径下的dummy_cmd.empty文件
        wstring cmd_path = OS::GetCurrentPath()+ L"\\dummy_cmd.empty";
        SetEnvironmentVariable(L"ComSpec", cmd_path.c_str());
    
        return true;
    }
    
    
    int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow)
    {   
        //初始化CEF
        if (!InitCef(hInstance))
            return 0;
    
              ……
              各种初始化客户端主窗口的代码,省略...
              ……
    
             CefShutdown();
              ExitProcess(0);
              return 1;
    }
    
    
    

    相关文章

      网友评论

          本文标题:Cef初始化

          本文链接:https://www.haomeiwen.com/subject/tbwtiftx.html