none
C++ 启用 禁止IE 插件, 遇到一些问题,谁知道怎么回事? RRS feed

  • 问题

  • #define PLUGIN_REG_BHO "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Browser Helper Objects"
    #define PLUGIN_REG_EXTENSION "SOFTWARE\\Microsoft\\Internet Explorer\\Extensions"
    #define PLUGIN_REG_TOOLBAR "SOFTWARE\\Microsoft\\Internet Explorer\\Toolbar"
    #define PLUGIN_REG_ACTIVEX "Software\\Microsoft\\Windows\\CurrentVersion\\Ext\\Stats"

    分别在这些注册表里读的 toobar activex 等类型插件,一切正常。

    但是设置 启动也是正常 因为只要删除 HKEY_USERS/.....Software\\Microsoft\\Windows\\CurrentVersion\\Ext\\Settings里面的那一个项CLSID就可以了
    但是 设置禁止的时候 代码里 新建一个对应的 CLSID 到 HKEY_USERS/.....Software\\Microsoft\\Windows\\CurrentVersion\\Ext\\Settings 
    version :*  flags:1 但是不起作用, 如果手动把version删了 再建, 就可以起作用了 为什么? 我代码应该怎么实现? 我对应着用代码 删一次 新建一次 还是不行!

    else //禁用插件
    {
    swprintf(szKeyName, L"%s\\%s", szPluginSetting, A2T(szCLSID));
    dwRes = RegOpenKeyEx(HKEY_USERS, szKeyName, 0, KEY_ALL_ACCESS | KEY_WOW64_64KEY, &hKey);

    if (ERROR_SUCCESS != dwRes)
    {
    dwRes = RegCreateKeyEx(HKEY_USERS, szKeyName, 0, NULL, 0, KEY_ALL_ACCESS | KEY_WOW64_64KEY, NULL, &hKey, &dwDisposition);
    }

    if (ERROR_SUCCESS != dwRes)
    {
    m_ILogMgr->WriteLog(m_ILogMgr->levelDEBUG, "directop", "[%s] RegOpenKeyEx|RegCreateKeyEx fail.Key:%s.Error code:%d", 
    __FUNCTION__, szKeyName, GetLastError());
    return false;
    }

    dwData = 1;
    dwRes = RegSetValueEx(hKey, L"Version", 0, REG_SZ, (LPBYTE)"*", 1);
    dwRes = RegSetValueEx(hKey, L"Flags", 0, REG_DWORD, (LPBYTE)&dwData, sizeof(DWORD));

    //RegCloseKey(hKey);

    dwRes = RegDeleteValue(hKey, L"Version");
    Sleep(70);
    if(dwRes == ERROR_SUCCESS)
    dwRes = RegSetValueEx(hKey, L"Version", 0, REG_SZ, (LPBYTE)"*", 1);
    return ((dwRes == ERROR_SUCCESS) ? true : false);
    }

    2014年12月19日 9:57