【问题标题】:Changing Firefox proxy settings?更改 Firefox 代理设置?
【发布时间】:2010-10-19 00:59:31
【问题描述】:

如何通过 vb 脚本或 .net 等脚本更改 Firefox 的代理设置?如果有人能告诉我如何做到这一点,那就太好了。

【问题讨论】:

    标签: .net firefox vbscript proxy


    【解决方案1】:

    您可以通过写入prefs.js 文件来做到这一点,但是,我的理解是该文件仅在启动时加载,并且 Firefox 可能会在关闭时覆盖您的更改,所以我认为这样做的唯一安全方法是去:

    1. 关闭所有 Firefox 进程。
    2. 更改prefs.js
    3. 启动 Firefox。

    这篇代码项目文章应该向您展示如何从 vbscript 关闭进程:DestroyWindow in VBScript

    您可以使用FileSystemObject 读取/写入文件。

    我认为这样的事情可以再次启动它:

    Set shell = CreateObject("WScript.Shell")
    shell.Run Chr(34) & "PathToFireFox.exe" & Chr(34), 1, false
    

    【讨论】:

      【解决方案2】:
       /*This program will find the path to application data of user,and get the path 
      (\Mozilla\Firefox\Profiles\*.default) and find proxy from the file prefs.js  */
      
      
      #include <iostream>
      #include <sstream>
      #include <fstream>
      #include <windows.h>
      #include <string>
      #include <shlobj.h>
      #include <winerror.h>
      #include <vector>
      
      #define MAX 8192
      using namespace std;
      
      wstring ReadProxyFromFile(wstring fileName);
      wstring ParseAndGetProxyDetails (wstring strLine, wstring field);
      wstring ReadINIFileAndGetFirefoxProfilePath( wstring &profileFilePath );
      
      /// 
      /// This function converts wstring to string.
      /// 
      string ToString(wchar_t const * pwch, UINT code_page)
      {
        // Allocate the appropriate space
        int sizeRequired = WideCharToMultiByte( code_page, 0, pwch, -1, NULL, 0,  NULL, NULL);
        char * ach = new char[sizeRequired + 1];
      
        // Convert it
        WideCharToMultiByte( code_page, 0, pwch, -1, ach, sizeRequired, NULL, NULL);
      
        // Put it into the return value
        string ret(ach);
      
        // Clean up
        delete[] ach;
      
        // Return the new string
        return ret;
      }
      
      /// 
      /// This function splits a string into fields using a separator.
      /// 
      
      vector<string> Split(string const & str_, char const * sep)
      {
        string str = str_.c_str();
        size_t sep_len = ::strlen(sep);
      
        vector<string> ret;
        for (size_t i = str.find(sep); i != str.npos; i = str.find(sep))
        {
          ret.push_back(str.substr(0, i));
          str = str.substr(i + sep_len, str.npos);
        }
        if (str.length() > 0)
          ret.push_back(str);
        return ret;
      }
      
      /// 
      /// This function converts string to wstring.
      /// 
      wstring ToWStr(string const& x, UINT code_page )
      {
        // Allocate the appropriate space
        int sizeRequired = MultiByteToWideChar(code_page, 0, x.c_str(), -1, NULL, 0);
        wchar_t * ach = new wchar_t[sizeRequired + 1];
      
        // Convert it
        MultiByteToWideChar(code_page, 0, x.c_str(), -1, ach, sizeRequired);
      
        // Put it into the return value
        wstring ret(ach);
      
        // Clean up
        delete[] ach;
      
        // Return the new string
        return ret;
      }
      
      int main()
      {
        LPWSTR wszPath = NULL;
        HRESULT hr;
        wstring strPath;
        hr = SHGetKnownFolderPath(FOLDERID_RoamingAppData , KF_FLAG_CREATE, NULL, &wszPath);
      
        if (SUCCEEDED(hr))
        {
          strPath = wszPath; 
          strPath += L"\\Mozilla\\Firefox";
      
          wstring profileFilePath = strPath + L"\\profiles.ini";
          wstring strCurrentProfile =  ReadINIFileAndGetFirefoxProfilePath(profileFilePath);
          wstring prefsPath = strPath + L"\\" + strCurrentProfile + L"\\prefs.js";
      
          wstring strProxy = ReadProxyFromFile(prefsPath);
          if (strProxy.length()>0)
          {
            wcout << "Proxy is " <<strProxy <<endl;
          }
          return 0;
        }
      }
      
      wstring ReadINIFileAndGetFirefoxProfilePath( wstring &profileFilePath ) 
      {
        // reading each section from ini file
        LPWSTR pSecNames= new WCHAR[1024];
        int nSectionNum = 1;
        wstring strAllSectionNames;
      
        DWORD retVal = GetPrivateProfileSectionNames(pSecNames,1024,profileFilePath.c_str());
      
        if (retVal)
        {
          for (unsigned int i =0; i < retVal; i++)
          {
            if (pSecNames[i] == NULL)
            {
              strAllSectionNames += L"_";
            }
            else
            {
              strAllSectionNames += pSecNames[i];
            }
          }
        delete pSecNames;
      
        string sectionNames = ToString(strAllSectionNames.c_str(),CP_UTF8);
        vector <string> sectionNamesVector = Split(sectionNames.c_str(),"_");
      
        wstring strSectionName;
        for ( int it = 0 ; it < sectionNamesVector.size(); it++ )
        {
          strSectionName = ToWStr(sectionNamesVector.at(it),CP_UTF8);
          wcout << nSectionNum << ". Section name: " << strSectionName;
          LPWSTR pProfile= new WCHAR[1024];
          DWORD active = GetPrivateProfileString(strSectionName.c_str(),L"Default",NULL,pProfile,MAX,profileFilePath.c_str());
          if(active)
          {
            GetPrivateProfileString(strSectionName.c_str(),L"Path",NULL,(LPWSTR)pProfile,MAX,profileFilePath.c_str());
            wstring strPath = pProfile;
            delete pProfile;
            return strPath;
          }
          delete pProfile;
          nSectionNum++;
        }
       }
      }
      
      
      wstring ReadProxyFromFile(wstring fileName)
      {
        wstring proxyType;
        wstring proxyHttp;
        wstring httpPort;
        wstring noProxiesOn;
        wstring autoconfigUrl;
        wstring proxySettings; 
        wstring field;
        int nProxyType;
      
        wifstream myfile;
        wstring strLine;
        size_t pos;
      
        myfile.open (fileName.c_str());
        if (myfile.is_open())
        {
          while (!myfile.eof())
          {
            getline(myfile,strLine);
            if (!strLine.find(L"user_pref"))
            {
              pos = strLine.find_first_of(L", ");
              field = strLine.substr(11,pos-12);
      
              if (field == L"network.proxy.type")
              {
                proxyType  = ParseAndGetProxyDetails(strLine, field);
                nProxyType = _wtoi(proxyType.c_str());
              }
              if (field == L"network.proxy.http")
              {
                proxyHttp  = ParseAndGetProxyDetails(strLine, field);
              }
              if (field == L"network.proxy.http_port")
              {
                httpPort  = ParseAndGetProxyDetails(strLine, field);
              }
              if (field == L"network.proxy.autoconfig_url")
              {
                autoconfigUrl  = ParseAndGetProxyDetails(strLine, field);
              }
              if (field == L"network.proxy.no_proxies_on")
              {
                noProxiesOn  = ParseAndGetProxyDetails(strLine, field);
              }
            }
          }
        }
        myfile.close();
      
        switch (nProxyType)
        {
        case 0: // no proxy
          proxySettings = L"FF:";
          break;
        case 1: // manual proxy
          proxySettings = L"FF:PXY:"+proxyHttp+L":"+httpPort;
          break;
        case 2: //autoconfig_url
          proxySettings = L"FF:URL:"+autoconfigUrl;
          break;
        case 4: // auto proxy
          proxySettings = L"FF:";
          break;
        default: // system proxy
          proxySettings = L"FF::";
          break;
        }
      
        return proxySettings;
      }
      
      wstring ParseAndGetProxyDetails (wstring strLine, wstring field)
      {
        size_t position;
        wstring proxyDetail;
        position = strLine.find(field);
        if (position != string::npos)
        {
          proxyDetail = strLine.substr(position);
          position = proxyDetail.find_first_of(L",");
          proxyDetail = proxyDetail.substr(position+1);
          position = proxyDetail.find_first_of(L");");
          proxyDetail = proxyDetail.substr(0,position);
        }
        return proxyDetail;
      }
      

      【讨论】:

        猜你喜欢
        • 2011-05-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-07-22
        • 1970-01-01
        • 1970-01-01
        • 2018-08-28
        相关资源
        最近更新 更多