解決cef加載flash時彈出黑框的問題

轉載請說明原出處,謝謝~~:http://blog.csdn.net/zhuhongshu/article/details/77482985

使用cef時,如果沒有使用sandbox,並且開啓了flash插件,在第一次使用flash時會彈出個黑框。這是flash插件的bug。目前找到三種解決辦法:

方法一:

編譯程序時加入cef_sandbox.lib靜態庫,自然就不會出現黑框了。但是爲了加入cef_sandbox.lib,有時候會很麻煩,比如:如何編譯出cef2623中的cef_sandbox.lib靜態庫,爲了加入cef_sandbox.lib還需要修改一些項目配置,同時啓用沙盒後,在某些電腦中會導致子進程無法創建,需要自己另外做一些處理。總之就是使用沙盒很麻煩

方法二:

使用HOOK的方法,攔截創建進程的API,阻止黑框(實際就是cmd程序)彈出,詳見:CEF加載FLASH插件時彈出CMD命令行窗口的問題

方法三:

在羣裏夏思暢大神今天告訴我的方法,直接在自己程序的目錄下建立一個名爲cmd.exe的程序就可以(可以直接新建個文本文檔,改名爲cmd.exe)。因爲彈出黑框需要使用cmd程序,而系統搜索程序是從進程當前的工作目錄開始查找,所以直接這樣做可以攔截cmd的調用。這個方法最簡單,實用性最強!

爲了程序更通用,可以在程序啓動時加代碼,在自己程序目錄建立dummy_cmd.exe,修改一下自己進程ComSpec環境變量(表示的就是cmd程序的路徑)的值:

  WCHAR app_path[MAX_PATH] = { 0 };
  GetModuleFileName(NULL, app_path, MAX_PATH);
  PathRemoveFileSpec(app_path);

  std::wstring cmd_path = app_path;
  cmd_path += L"\\dummy_cmd.exe";
  SetEnvironmentVariable(L"ComSpec", cmd_path.c_str());

Redrain QQ:491646717 2017.8.22

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章