Windows 7 在Win7中获取firefox.exe的defaultGroupId

Windows 7 在Win7中获取firefox.exe的defaultGroupId,windows-7,process,firefox-addon,profile,xpcom,Windows 7,Process,Firefox Addon,Profile,Xpcom,我试图在Win7中将每个配置文件的窗口组分开。我发现这是可行的,方法是在任务栏.grouping.useprofile的所有配置文件中创建一个首选项,并将其设置为true,然后重新启动所有配置文件的浏览器() 但是它的工作原理是它改变了defaultGroupIdCc[“@mozilla.org/windows taskbar;1”].getService(Ci.nsIWinTaskbar).defaultGroupId 问题是,在创建此首选项之前,Firefox使用Firefox.exe的de

我试图在Win7中将每个配置文件的窗口组分开。我发现这是可行的,方法是在
任务栏.grouping.useprofile
的所有配置文件中创建一个首选项,并将其设置为true,然后重新启动所有配置文件的浏览器()

但是它的工作原理是它改变了defaultGroupId
Cc[“@mozilla.org/windows taskbar;1”].getService(Ci.nsIWinTaskbar).defaultGroupId

问题是,在创建此首选项之前,Firefox使用Firefox.exe的
defaultGroupId
,但在创建pref配置文件之后,现在的defaultGroupId与此不同。因此,如果最初,在创建pref并重新启动浏览器之前,如果用户已固定了
firefox.exe
,那么在创建pref并重新启动浏览器之后,它将始终是分开的

所以我想做的是在profiles.ini中标记为
Default=1
的配置文件,我想通过编程让它使用
firefox.exe
defaultGroupId
,但是一旦创建了pref并重新启动浏览器,我就无法找出
firefox.exe
defaultGroupId


我最后的解决方案是:(1)在安装我的插件时,如果任务栏.grouping.useprofile的pref存在并设置为true,然后将其设置为false并要求用户重新启动,然后在重新启动时,它将计算出
defaultGrupId
并将其作为首选项存储,然后我将添加pref,然后要求用户重新启动(真的不想这样做)(2)安装我的插件时,如果
任务栏.grouping.useprofile
的pref不存在并设置为true,则只需将首选项设置为当前
默认组id的值,这要感谢@Neil让我知道,即使在设置
任务栏.gr的首选项后,也可以在注册表中找到默认组idouping.useprofile
true

来自ask.m.o.的解决方案:

谢谢@Neil我这样得到了值。我运行的唯一可能的问题是 如果TaskBarID下有多个值,则会发生什么 这可能吗

如果值类型为
0
,则可能会遇到问题
TYPE_NONE
REG_NONE
是否可以读取这些值

var wrk = Cc['@mozilla.org/windows-registry-key;1'].createInstance(Components.interfaces.nsIWindowsRegKey);
var keypath = 'Software\\Mozilla\\' + Services.appinfo.name + '\\TaskBarIDs'; //Services.appinfo.name == appInfo->GetName(appName) // http://mxr.mozilla.org/comm-central/source/mozilla/widget/windows/WinTaskbar.cpp#284
try {
  wrk.open(wrk.ROOT_KEY_LOCAL_MACHINE, keypath, wrk.ACCESS_READ);
} catch(ex) {
  //console.warn(ex)
  if (ex.message != 'Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsIWindowsRegKey.open]') {
    throw ex;
  } else {
    try {
      wrk.open(wrk.ROOT_KEY_CURRENT_USER, keypath, wrk.ACCESS_READ);
    } catch (ex) {
      throw ex;
    }
  }
}
//list children
var numVals = wrk.valueCount;
for (var i=0; i<numVals; i++) {
  var keyval = {
    Name: wrk.getValueName(i)
  };
  keyval.Type = wrk.getValueType(keyval.Name);
  keyval.TypeStr = win_RegTypeStr_from_RegTypeInt(keyval.Type);
  if (keyval.Type == 0) {
    throw new Error('keyval.Type is `0` I have no idea how to read this value keyval.Type == `' + keyval.Type + '` and keyval. Name == `' + keyval.Name + '`');    
  }
  keyval.Value = wrk['read' + keyval.TypeStr + 'Value'](keyval.Name)
  console.log('keyval:', uneval(keyval), keyval);
}
wrk.close();
function win_RegTypeStr_from_RegTypeInt(int) {
  if (int == 1) {
    return 'String';
  } else if (int == 3) {
    return 'Binary';
  } else if (int == 4) {
    return 'Int';
  } else if (int == 11) {
    return 'Int64';
  } else if (int == 0) {
    return 'NONE';
  } else {
    throw new Error('keyval.Type is not any of the expected values of 0, 2, 3, 4, or 11 so am now confused. keyval.Type == `' + int + '`');
  }
}
var wrk=Cc['@mozilla.org/windows注册表项;1'].createInstance(Components.interfaces.nsIWindowsRegKey);
var keypath='Software\\Mozilla\\\'+Services.appinfo.name+'\\TaskBarIDs';//Services.appinfo.name==appinfo->GetName(appName)//http://mxr.mozilla.org/comm-central/source/mozilla/widget/windows/WinTaskbar.cpp#284
试一试{
wrk.open(wrk.ROOT\u KEY\u LOCAL\u MACHINE,keypath,wrk.ACCESS\u READ);
}捕获(ex){
//控制台警告(ex)
if(例如,message!=“组件返回的故障代码:0x80004005(NS\u错误\u故障)[nsIWindowsRegKey.open]”){
掷骰子;
}否则{
试一试{
wrk.open(wrk.ROOT\u KEY\u CURRENT\u USER,keypath,wrk.ACCESS\u READ);
}捕获(ex){
掷骰子;
}
}
}
//列出孩子
var numVals=wrk.valueCount;

对于(var i=0;我认为这是可能的。在运行此代码之前,是否可以读取
wt.defaultGroupId