それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

Windowsのライセンス取得(Jscript.net版)

先のWindowsのライセンス取得をJScript.netで書き直してみたバージョン。
こっちはコンパイルしてEXEにしたりDLLにして使い回すことも可能。
レジストリのキー値がすべてなんだけどね。

import System;
import Microsoft.Win32;
import System.Windows.Forms;
class ProductKey{
  public office_regkeys = {
      // 参考 http://d.hatena.ne.jp/frontline/20081222/p1
      "Office XP Professional":"HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Office\\10.0\\Registration\\{90280411-6000-11D3-8CFE-0050048383C9}",
      "Office XP Professional(English)":"HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Office\\10.0\\Registration\\{90110409-6000-11D3-8CFE-0050048383C9}",
      "Office 2003 Standard/Professional":"HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Office\\11.0\\Registration\\{90110411-6000-11D3-8CFE-0150048383C9}",
      "Visio 2003 Standard/Professional":"HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Office\\11.0\\Registration\\{90510411-6000-11D3-8CFE-0150048383C9}",
      "Office 2007 Professional":"HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Office\\12.0\\Registration\\{90120000-0014-0000-0000-0000000FF1CE}",
      "Office 2007 Professional Plus":"HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Office\\12.0\\Registration\\{90120000-0011-0000-0000-0000000FF1CE}",
      "Office 2007 Enterprise":"HKEY_LOCAL_MACHINE\\SOFTWAWRE\\Microsoft\\Office\\12.0\\Registration\\{90120000-0030-0000-0000-0000000FF1CE}",
      "Office 2007 Ultimate":"HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Office\\12.0\\Registration\\{91120000-002E-0000-0000-0000000FF1CE}",
      "Visio 2007 Professional":"HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Office\\12.0\\Registration\\{90120000-0051-0000-0000-0000000FF1CE}",
      "Project 2007 Professional":"HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Office\\12.0\\Registration\\{90120000-003B-0000-0000-0000000FF1CE}",
      "SQL Server 2005":"HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Microsoft SQL Server\\90\\ProductID"
  };
  public function ProductKey(){
    //コンストラクタ
  }
  public function windows(){
    var key = Microsoft.Win32.Registry.LocalMachine.OpenSubKey("SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion")
    var DigitalProductId = key.GetValue("DigitalProductId");
    var hexPid = DigitalProductId.slice( 52, 67 );
    return this.decode(hexPid);
    //return ret;
  }
  public function office(){
    var result = [];
    for ( key_name in this.office_regkeys ){
      try{
          var ret = Microsoft.Win32.Registry.LocalMachine.OpenSubKey("SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion")
          var ret = this.read_reg(this.office_regkeys[key_name]+ '\\DigitalProductId');
          result.push( key_name + ":\t" + this.decodeDigitalProductId( ret ));
      }catch(e){
        //
      }
    }
    return result.join("\n");
  
  }
  public function decode( binary_regkey ){
    var decodedChars = Array(24);
    var digits = Array("B","C","D","F","G","H","J","K","M","P","Q","R","T","V","W","X","Y","2","3","4","6","7","8","9");
    for ( var i=1; i<30;i++ ){
      if((i % 6) == 0 ){
        decodedChars.push("-");
       }
      else{
        var k=0;
        for ( var j=14; j>=0;j--){
          k = ( k << 8 ) ^ binary_regkey[j];
          binary_regkey[j] =  parseInt( k /digits.length );
          k = k % digits.length;
        }
        decodedChars.push(digits[k]);
      }
    }
    return (decodedChars.reverse().join(""));
  }
}



//メイン
var p = new ProductKey();