UNPKG

cejs

Version:

A JavaScript module framework that is simple to use.

610 lines 57.2 kB
�� /** * @name CeL function for Windows registry * @fileoverview * ,g�jHhS+T�N Windows registry �d\O(u�v functions0 * @since */ 'use strict'; if (typeof CeL === 'function') CeL.run( { name:'application.OS.Windows.registry', code : function(library_namespace) { /** * null module constructor * @class Windows registry �v functions */ var _// JSDT:_module_ = function() { // null module constructor }; /** * for JSDT: g prototype Mbg\KNvu\O Class */ _// JSDT:_module_ .prototype = { }; /* http://msdn2.microsoft.com/en-us/library/x05fawxd.aspx \ORegistry�v�d\O WSH_registry.Base -��[�]\O�v�W�n ���ar�/f P�v� �\gD��R(W�k PkeyMRb� WSH_registry(key) WshShell.RegRead() *undo* keyGP�Y8�eQobject �g\KNNNR��U�t �dkBfWSH_registry.ErrgS+T@b g|vu�v/��� �WSH_registry.Err[0]=|vu/����vxeϑ *undo* WSH_registry(key,0,'info') �[tenj ��S�btype � *undo* WSH_registry(keyDir,keyPattern,'dir') �P�Vte Pdir�vnj�e0dir�v�-�<P/j�nn0$P�[''] WSH_registry(key,value[,type]) WshShell.RegWrite() WSH_registry(key,value),WSH_registry(key,value,'auto') auto detect type WSH_registry(key,value,1) WshShell.RegWrite(key,value) WSH_registry(key,0,'del') WshShell.RegDelete() TODO: backup all search test: if(0){ var k="HKCU\\Software\\Colorless echo\\Comparer\\test\\test",r=WSH_registry(k,1),p=function(){if(WSH_registry.Err)alert(WSH_registry.Err.message);else alert('('+typeof r+')'+k+'\n'+r);}; p(); WSH_registry(k,0,'del'); r=WSH_registry(k); p(); r=WSH_registry(k="HKCU\\Software\\Colorless echo\\Comparer\\"); p(); } */ WSH_registry.Err=WSH_registry.Base=0; function WSH_registry(key,value,type){ WSH_registry.Err=null; if(WSH_registry.Base){if(WSH_registry.Base.slice(-1)!='\\')WSH_registry.Base+='\\';key=WSH_registry.Base+key;} if(!key)return; //if(typeof WshShell!='object')WshShell=new ActiveXObject("WScript.Shell"); if(typeof key=='object'){var i,c=0;for(i in key)c+=WSH_registry(i,key[i],type) instanceof Error?0:1;return c;} try{ var _f=WSH_registry.F; //if(typeof type=='string')type=_f[type]; if(type=='del')WshShell.RegDelete(key); else if(typeof value!='undefined'){ if(typeof type=='undefined'||type=='auto') // ��R$R%R type=typeof value=='number'&&!value%1?'REG_DWORD' // DWORD:4bytes,REG_BINARY :typeof value=='string'&&value.indexOf('\n')==-1?value.indexOf('%')==-1?'REG_SZ':'REG_EXPAND_SZ' // REG_EXPAND_SZ:"%windir%\\calc.exe"I{ :0; // unknown:multi_sz/none/dword_big_endian/link/resource_list http://www.cotse.com/dlf/man/TclCmd/registry.htm,http://cmpp.linuxforum.net/cman/mann/registry.htm //if(isNaN(type))WshShell.RegWrite(key,value);else WshShell.RegWrite(key,value,WSH_registry.T[type]); if(typeof type=='string')WshShell.RegWrite(key,value,type);else WshShell.RegWrite(key,value); } value=WshShell.RegRead(key); // �[eQ�_�Q���S ��P�Vwck�[eQ�v<P //alert('('+typeof value+')'+key+'\n'+value); }catch(e){ // http://klcintw4.blogspot.com/2007/09/javascriptie.html if(e.description.indexOf(":O g z_!q�l"uuir�N")!=-1) alert("ˊ��teIEp��hV�v�[hQ'`\n�}���}�x���!�[hQ'`�!��d\}\n 0w��Y Nj:y�p�[hQ�vActiveX�c6R� 0-��[�p_U(ub�c:y0"); WSH_registry.Err=e;return; } return value; } /* registry {v�<P/{v���v�d\O bug: registry_function.checkAccess('HKLM') always return false. this is OK: registry_function.checkAccess('HKLM\\SOFTWARE\\') TODO: Win32_SecurityDescriptor .moveKey(from,to) .moveValue(from,to) (u.apply()�[\OprototypeKNfunction � N�SY�[0 */ //registry_function[generateCode.dLK]='VBA,JSArrayToSafeArray'; function registry_function(path,sComputer,flag){ // key path, ComputerName, create? /* if(!registry_function.prototype.oReg){ // N��(u this.prototype.~ var oReg=getWMIData('default:SWbemLocator');//try{oReg=new Enumerator(GetObject("winmgmts:{impersonationLevel=impersonate}//"+(sComputer||'.')+"/root/default:StdRegProv"));}catch(e){} if(!oReg)try{ // http://msdn2.microsoft.com/en-us/library/aa393774.aspx var oLoc=new ActiveXObject("WbemScripting.SWbemLocator") ,oSvc=oLoc.ConnectServer(sComputer||null,"root/default"); oReg=oSvc.Get("StdRegProv"); }catch(e){return;} registry_function.prototype.oReg=oReg; } */ /* try{ this.oReg=new ActiveXObject("WbemScripting.SWbemLocator").ConnectServer(sComputer||null,"root/default").Get("StdRegProv"); }catch(e){return;} // User-defined function to format error codes. */ // with(this)base:'',subkey:{},value:{},type:{},flag:0 this.setPath(path,sComputer); return this; } // Nb�/flQ�yqQ(u function /* http://www.supinfo-projects.com/en/2004/api_basederegistre__vb_en/2/ http://www.microsoft.com/taiwan/msclub/4P/topic_0402-3.aspx REG_BINARY �N2�MO6Rnj�e0{v��j�}/�hVg�NASmQ2�MO�v�xe�l�Oo�:y�N2�MO6R�vnj�e � �`O�_�(uASmQ2�MO6R�v�xe�l �O8�eQ�N2�MO�vnj�e0 � P�OP[�O�� ��YREG_BINARY<P�p0x02 0xFE 0xA9 0x38 0x92 0x38 0xAB 0xD90 REG_DWORD ٖW[D}<P(32-bits)0�_YREG_DWORDgQ�[<P��O(u�P/f^�g<P(0 b10truebfalse0yesb�/fno)0`O_N�S�N w0RBf��<P�N~v,��y(millisecond)�v�e_��>e(WREG_DWORDvu-N(1000 sS1�y)032-bit*gc�[�v�{ W�S�N�_00R4,294,967,295 �&NN32-bitc�[xe<P�{ W�S�N�_-2,147,483,6480R 2,147,483,6470`O�S�NO(uAS2�MO6Rb�/fASmQ2�MO6R�v�e�l�O�}/���Nxe<P0�YREG_DWORD<P�Sh�:y�p0xFE020001�S 0x100100010 REG_DWORD_BIG_ENDIAN ٖW[D}(Double-word)<P�Ngo�W��v�e_��X[>e(W��aԚvu-N0��NMOCQ�v�Y�REG_DWORD�v��^�v�S0 � P�OP[�O�� �xe<P 0x01020304���N0x01 0x02 0x03 0x04�v�WKa>en(W��aԚvu-N �`O&N Ng(WIntel-based �v�g�i-N w0R���Ydk^��v�g�i0 REG_DWORD_LITTLE_ENDIAN ٖW[D}<P�\ go���vMOCQD}��2QX[(W��aԚvu-N �� P�WKaߍREG_DWORD/f�v T�v �&NN�V�pIntel-based�v�g�i/f�N�.z<h_�O2QX[xe<P �v �(WWindows XPvu-N ��[/fgnfM��vxe<P0 ��O�O�� �0x01020304�N0x04 0x03 0x02 0x01�vgQ�[��X[>e(W��aԚvu-N �{v��j�}/�hV&N N�c�O(u�O�^�zREG_DWORD_LITTLE_ENDIAN <P�v���R ��V�p� Pxe<Pnj�e�WKa \�eREG_DWORD(W{v��jvu-N�v҉r� ��/f�v T�v0 REG_EXPAND_SZ ��xew��^�v�eW[nj�e0�N�.znj�e�WKa>en�vnj�e�S�N/f��xe0�S(WO(u�[PKNMR �(u�O�^8O��N��xe�vxe<P�v z_0 � P�OP[�O�� �REG_EXPAND_SZ <PS+T�N%USERPROFILE%\Favorites(W z_O(u�[KNMR ��S�����^8O�pC:\Documents and Settings\Jerry\Favorites 0��N{v�hVAPI (Application Programming Interface)g�Ogq@b|T�S�v z_�O�^8O�t�X��xeREG_EXPAND_SZW[2N �@b�N�[(W z_�l g�dEQ�NP�vBfP �/f�l g\O(u�v0�`�S�N w w,{AS�z 0_(uO(u�nj ��j 0 ��Nx[��fYdk^�gQ�[<P�v�WKa ��N�OckN�N g���vOUL�0 REG_FULL_RESOURCE_DESCRIPTOR nj�nRh�g\݈n�S݈n�vE��R z_R:y�Q�O0�_N1\nj�e�WKa \�ePNP݈n�O��_͑���v�S�V0{v��j�}/�hV&N N�c�O�NUO�e�S�O��\O�.z�WKa�vgQ�[<P �FO/f �[AQ1�`Oo�:y�[P0`O�S�N�g wHKLM\HARDWARE\DESCRIPTION\DescriptionZP�p�^�nj�e�WKa�v�{�O0 REG_LINK �[/fN P#��c � ��`!q�l�^�zREG_LINK<P0 REG_MULTI_SZ S+TN PW[2NRh��v�N2�MO<P0{v��j�}/�hVg(W�kNL�-No�:yN PW[2N �&NNAQ1�`O�}/���NRh�0(W ��N{v��jvu-N �N Pzz�vW[CQ(0x00)���k PW[2NR�����O �&NNiQ Pzz�vW[2N��>en(WdkRh��vP}>\0 REG_NONE �d g&N*g�[��vxe<P0 Consists of hex data. REG_QWORD Quadruple-word<P(64-bits)0dkN�WKa�vnj�e�REG_DWORD�WKa�v<O �FO/f�[S+T�N 64 bits � N/f32 bit0 �/e�cdkN�WKa�v\Omi�|q}�S gWindows XP 64-Bit Edition0`O�S�NO(uAS2�MOb�/fASmQ2�MO�v�xe�e�l�O�g w�S�}/�dk^��v{v�<P0 0xFE02000110010001�pREG_QWORD�vN P�OP[0 REG_QWORD_BIG_ENDIAN Quadruple-word<Pg\go�W��vMOCQD},{N P2QX[(W��aԚvu-N0 �dkMOCQD}�v��^GR�REG_QWORD2QX[��N<P�v��^�v�S0`O�S�N�g w REG_DWORD_BIG_ENDIAN�_0R�fYnj �0 REG_QWORD_LITTLE_ENDIAN �\ gQuadruple-word<P2QX[(W��aԚvu-N0�.z�WKa�REG_QWORD�v T0�`�S�N�g wREG_DWORD_LITTLE_ENDIAN �S�_�fY�vnj �0{v��j�}/�hV&N N�c�O��\OREG_QWORD_LITTLE_ENDIAN gQ�[�v���R ��V�p� P<P�v�WKa \�e{v��j-N�vREG_QWORD ��/f/UN�v0 REG_RESOURCE_LIST /fREG_FULL_RESOURCE_DESCRIPTION gQ�[<P�vRh�0{v��j�}/�hVAQ1�`O�g w �FO NAQ1�`O�}/��.z�WKa�vnj�e0 REG_RESOURCE_REQUIREMENTS_LIST R:y�N݈n@b�nj�n�vRh�0{v��j�}/�hVAQ1�`O�g w �FO&N NAQ1�`O�}/�dk.z�WKa�v<P0 REG_SZ �V�[w��^�v�eW[ REG_DWORD0REG_SZ<P�p(W{v��jvu-NgnfM��vnj�e�WKa0 �REG_SZ<P�v�{�O�p Microsoft Windows XPbJerry Honeycutt0�k PW[2N��/f�NN PK�<PW[CQ�pP}>\0 z_&N(WREG_SZ<Pvu-N&N�l g�dEQ�t�X��xe0 */ /* private */registry_function.typeName='REG_NONE,REG_SZ,REG_EXPAND_SZ,REG_BINARY,REG_DWORD,REG_DWORD_BIG_ENDIAN,REG_LINK,REG_MULTI_SZ,REG_RESOURCE_LIST,REG_FULL_RESOURCE_DESCRIPTOR,REG_RESOURCE_REQUIREMENTS_LIST,REG_QWORD,REG_QWORD_LITTLE_ENDIAN=11'.split(','); // \ TypeValue I�b TypeName registry_function.getTypeName = registry_function.prototype.getTypeName = function( /* int */type) { return registry_function.typeName[type]; }; // \ TypeName I�b TypeValue registry_function.getTypeValue = registry_function.prototype.getTypeValue = function( /* string */type) { if (!registry_function.typeValue) { var i, t = registry_function.typeValue = {}, n = registry_function.typeName; for (i in n) t[n[i]] = i; } return registry_function.typeValue[type]; }; /* \ HKEY_CURRENT_USER I{h�:y�l�xeW[�N_��NI� http://msdn2.microsoft.com/en-us/library/aa393664.aspx http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/tags/v1_8_5_19/ext/Win32API/lib/win32/registry.rb?view=markup&pathrev=11732 http://www.51log.net/dev/304/4539587.htm */ registry_function.getRegCode=registry_function.prototype.getRegCode=function(/*string */name){ if(!registry_function.RegCode){ var i,r=registry_function.RegCode={ HKCR:0,HKEY_CLASSES_ROOT:0 ,HKCU:1,HKEY_CURRENT_USER:1 ,HKLM:2,HKEY_LOCAL_MACHINE:2 ,HKUS:3,HKU:3,HKEY_USERS:3 //,HKEY_PERFORMANCE_DATA:4 ,HKCC:5,HKEY_CURRENT_CONFIG:5 ,HKEY_DYN_DATA:6 //,HKEY_PERFORMANCE_TEXT:0x50 //,HKEY_PERFORMANCE_NLSTEXT:0x60 }; for(var i in r)if(!isNaN(r[i])){ r[i]+=0x80000000;//& if(i.indexOf('_')!=-1)r[r[i]]=i; // reverse } } //alert(name+'\n'+registry_function.RegCode[name]); return registry_function.RegCode[name]; }; // R��base�path �&N\O�j�g0 registry_function.separatePath=function(path,sComputer,isValue){ if(typeof path=='object')return path; // U�tN��v /* if(isNaN(base)&&isNaN(base=this.getRegCode(base))&&typeof path=='string'&&(path=path.match(/^([A-Z_]+)\\(.+)$/))) base=this.getRegCode(path[1]),path=path[2]; */ var base,v; // base, ValueName (or tmp) if(typeof path=='string' && (v=path.match(/^([A-Z_]+)(\\(.*))?$/))) base=this.getRegCode(v[1]),path=v[3]/*||'\\'*/; if(!base/*||isNaN(base)*/)return; //alert('registry_function.separatePath:\n'+base+' '+path); if(typeof path!='string' || !path&&path!=='')return; v=0; // $R%R8�eQ if(!/[\\]$/.test(path)) if(!isValue&&this.checkAccess([base,path],1/* KEY_QUERY_VALUE */,sComputer)) // 8�eQ SubkeyName path+='\\',v=''; // 8�eQ ValueName else if(v=path.match(/^(.+\\)([^\\]+)$/))path=v[1],v=v[2]; // 8�eQ root KN ValueName ��Y HKEY_CURRENT_USER\value else v=path,path=''; if(path[1]=='\\')path[1]=''; //alert('registry_function.separatePath:\n'+base+'\n'+path+'\n'+v); return typeof v=='string'?[base,path,v]:[base,path]; // �na(u{base:,key:,value:} }; // private registry_function.prototype.separatePath=function(name,base){ //return this instanceof registry_function?[this.base,this.path+path]:registry_function.separatePath(path); return typeof name=='string'?name.indexOf('\\')==-1?[this.base,this.path,name]:registry_function.separatePath(this.getPath()+name,this.computer):[this.base,this.path]; }; /* ;N���v WMI �WL� interface http://msdn2.microsoft.com/En-US/library/aa394616.aspx In scripting or Visual Basic, the method returns an integer value that is 0 (zero) if successful. If the function fails, the return value is a nonzero error code that you can look up in WbemErrorEnum. */ registry_function.oRegA = {}; registry_function.runMethod=registry_function.prototype.runMethod=function(name,inPO,sComputer/*,flag*/){ // inPO: input parameters object var oReg=this.oReg||registry_function.oRegA[sComputer||'.']; if(!oReg)try{ oReg=this.oReg=registry_function.oRegA[sComputer||'.'] =new ActiveXObject('WbemScripting.SWbemLocator') .ConnectServer(sComputer||null,'root/default') .Get('StdRegProv'); }catch(e){ //popErr(e); return; } try{ var i,oMethod=oReg.Methods_.Item(name) // �!qdk�e�lg throw error! ,oInParam=oMethod.InParameters.SpawnInstance_(); //if(name=='SetMultiStringValue')for(i in inPO){try{oInParam[i]=inPO[i];}catch(e){popErr(e,0,'registry_function.runMethod: '+name+' error:\nset ['+i+'] to ['+inPO[i]+']');}if(name=='CheckAccess')alert(name+': oInParam['+i+']='+inPO[i]);} for(i in inPO)oInParam[i]=inPO[i]; // �!qdkpropertyg throw error! return oReg.ExecMethod_(oMethod.Name,oInParam);//oOutParam }catch(e){ popErr(e); return e; } }; /* The CheckAccess method verifies that the user has the specified permissions. http://msdn2.microsoft.com/en-us/library/aa384911.aspx http://msdn2.microsoft.com/en-us/library/ms724878.aspx 6R�[N P*�OUj��N�c��*�OU�eu��v�[hQ'` dk�Sxe�S�N/f NR<P�vN Po�T KEY_ALL_ACCESS KEY_QUERY_VALUE, KEY_ENUMERATE_SUB_KEYS, KEY_NOTIFY, KEY_CREATE_SUB_KEY, KEY_CREATE_LINK, �T KEY_SET_VALUE *�OU�vo�T. KEY_CREATE_LINK AQ1�uR�^�V<h&{_��vȓ�c. KEY_CREATE_SUB_KEY AQ1�uR�^P[u�. KEY_ENUMERATE_SUB_KEYS AQ1��g �P[u�. KEY_EXECUTE AQ1���*�OU. KEY_NOTIFY AQ1�9e����w. KEY_QUERY_VALUE AQ1��gb�P[u��vxe�d. KEY_READ KEY_QUERY_VALUE, KEY_ENUMERATE_SUB_KEYS, �T KEY_NOTIFY *�OU�vo�T. KEY_SET_VALUE AQ1�-�nP[u��vxe�d. KEY_WRITE KEY_SET_VALUE �T KEY_CREATE_SUB_KEY *�OU�vo�T KEY_ALL_ACCESS (0xF003F) Combines the STANDARD_RIGHTS_REQUIRED, KEY_QUERY_VALUE, KEY_SET_VALUE, KEY_CREATE_SUB_KEY, KEY_ENUMERATE_SUB_KEYS, KEY_NOTIFY, and KEY_CREATE_LINK access rights. (&& READ_CONTROL?) KEY_CREATE_LINK (0x0020) Reserved for system use. KEY_CREATE_SUB_KEY (0x0004) Required to create a subkey of a registry key. KEY_ENUMERATE_SUB_KEYS (0x0008) Required to enumerate the subkeys of a registry key. KEY_EXECUTE (0x20019) Equivalent to KEY_READ. KEY_NOTIFY (0x0010) Required to request change notifications for a registry key or for subkeys of a registry key. KEY_QUERY_VALUE (0x0001) Required to query the values of a registry key. KEY_READ (0x20019) Combines the STANDARD_RIGHTS_READ, KEY_QUERY_VALUE, KEY_ENUMERATE_SUB_KEYS, and KEY_NOTIFY values. KEY_SET_VALUE (0x0002) Required to create, delete, or set a registry value. KEY_WOW64_32KEY (0x0200) Indicates that an application on 64-bit Windows should operate on the 32-bit registry view. For more information, see Accessing an Alternate Registry View. This flag must be combined using the OR operator with the other flags in this table that either query or access registry values. Windows 2000: This flag is not supported. KEY_WOW64_64KEY (0x0100) Indicates that an application on 64-bit Windows should operate on the 64-bit registry view. For more information, see Accessing an Alternate Registry View. This flag must be combined using the OR operator with the other flags in this table that either query or access registry values. Windows 2000: This flag is not supported. KEY_WRITE (0x20006) Combines the STANDARD_RIGHTS_WRITE, KEY_SET_VALUE, and KEY_CREATE_SUB_KEY access rights. http://www.supinfo-projects.com/en/2004/api_basederegistre__vb_en/2/ */ registry_function.accessFlag = { KEY_QUERY_VALUE : 1, KEY_SET_VALUE : 2, KEY_CREATE_SUB_KEY : 4, KEY_ENUMERATE_SUB_KEYS : 8, KEY_NOTIFY : 0x10, KEY_CREATE_LINK : 0x20, // KEY_WOW64_32KEY:0x0200, // KEY_WOW64_64KEY:0x0100, DELETE : 0x10000, READ_CONTROL : 0x20000, STANDARD_RIGHTS_EXECUTE : 0x20000, STANDARD_RIGHTS_READ : 0x20000, STANDARD_RIGHTS_WRITE : 0x20000, KEY_WRITE : 0x20006, KEY_READ : 0x20019, KEY_EXECUTE : 0x20019, // WRITE_DAC:0x40000, // WRITE_OWNER:0x80000, // STANDARD_RIGHTS_REQUIRED:0xF0000, KEY_ALL_ACCESS : 0xF003F // ,SYNCHRONIZE:0x100000, // STANDARD_RIGHTS_ALL:0x1F0000 }; // check access of key base+path registry_function.checkAccess=registry_function.prototype.checkAccess=function(path,uRequired,sComputer){ if(path=this.separatePath(path,sComputer)){ if(typeof uRequired=='string')uRequired=registry_function.accessFlag[uRequired]; //alert('registry_function check:\n'+this.getRegCode(path[0])+'\\'+path[1]+'\n'+this.runMethod('CheckAccess',{hDefKey:path[0],sSubKeyName:path[1],uRequired:uRequired||3/*KEY_QUERY_VALUE+KEY_SET_VALUE*/},sComputer).bGranted); try{return this.runMethod('CheckAccess',{hDefKey:path[0],sSubKeyName:path[1],uRequired:uRequired||3/*KEY_QUERY_VALUE+KEY_SET_VALUE*/},sComputer).bGranted;} // g�S�� NX[(W .bGranted ! catch(e){return;} } }; // N!k'`�R�� � N�N�uR�^object /* ���g path: Subkey(_j�x) KN {ValueName:(int)ValueType} nj �0!q Value g return undefined registry_function.getValue('HKEY_CLASSES_ROOT\\.odp') �P�-�<P registry_function.getValue('HKEY_CLASSES_ROOT\\.odp\\') �P�Vte P�v�<P */ registry_function.getValueType=function(path,sComputer,flag){ if(!(path=this.separatePath(path,sComputer)))return; // http://msdn2.microsoft.com/en-us/library/aa390388.aspx var oOutParam=this.runMethod('EnumValues',{hDefKey:path[0],sSubKeyName:path[1]},sComputer),aNames,aTypes,i=0,r={'':1/* �S�_�-�<P: REG_SZ */}; if(!oOutParam || oOutParam.sNames==null)return; // error 'Y�i��/f ==null ��S���V�p8�eQvalue �^�key<P aNames=oOutParam.sNames.toArray(),aTypes=oOutParam.Types.toArray(); //aNames.push(''),aTypes.push(1); // �-�<P if(flag==1)return [aNames,aTypes]; for(;i<aNames.length;i++) //WScript.Echo('('+sRegTypes[aTypes[i]]+') '+aNames[i]); r[aNames[i]]=aTypes[i];//,this.value[aNames[i]]=getValue(aNames[i],aTypes[i]); return flag==2?[aNames,r]:typeof path[2]=='string'?r[path[2]]:r; }; // �P�V�g Value(xe<P) KN (int)type b {ValueName:(int)ValueType} registry_function.prototype.getValueType=function(name,force){ if(force||!this.type||!this.type[name]){ // �S�� g�f�e var t=registry_function.getValueType(this.separatePath(),this.computer,2)||[]; this.type=(this.valueA=t[0]||[]).length?t[1]:{}; } //alert('registry_function.prototype.getValueType:\n'+name+' '+this.type[name]); if(this.type)return typeof name=='string'?this.type[name]:this.type; // �aHQcopy }; registry_function.prototype.getValueA = function(force) { if (force || !this.valueA) this.getValueType(0, 1); return this.valueA; }; /* N!k'`�R�� � N�N�uR�^object ���S Subkey(_j�x) KN T1znj �0!q Subkey g return undefined TODO: return registry_function object */ registry_function.getSubkeyName=function(path,sComputer,flag){ if(!(path=this.separatePath(path,sComputer)))return; //alert('registry_function.getSubkeyName:\npath: '+path); // http://msdn2.microsoft.com/en-us/library/aa390387.aspx var i=0,r={},aNames=this.runMethod('EnumKey',{hDefKey:path[0],sSubKeyName:path[1]=='\\'?'':path[1]},sComputer).sNames; if(aNames!=null){ // error 'Y�i��/f ==null ��S���V�p: 1.!qSubkey 2.8�eQvalue �^�key<P if(flag==1)return aNames; for(aNames=aNames.toArray();i<aNames.length;i++) r[aNames[i]]={};//registry_function(r.base+aNames[i]+'\\') //alert('registry_function.getSubkeyName: '+aNames.length); return flag==2?[aNames,r]:path[2]?path[2] in r:r; } }; registry_function.prototype.getSubkeyName = function(force, flag) { if (force || !this.subkey) { var t = registry_function.getSubkeyName(this.separatePath(), this.computer, 2) || []; this.subkey = (this.subkeyA = t[0] || []).length ? t[1] : {}; } return flag ? this.subkeyA : this.subkey; }; /* -��[ object KNR�Y path0 oRegistryF.subkey oRegistryF.type oRegistryF.value */ registry_function.prototype.setPath=function(path,sComputer){ // base key path if(!(path=registry_function.separatePath(path,sComputer)))return; // �V�p/fR!k-��[ �@b�N�� N��(u this.separatePath() this.base=path[0],this.path=path[1],this.computer=sComputer; if(!/[\\]$/.test(this.path))this.path+='\\'; // �x�Othis.path/fkey<P //this.subkey={},this.type={},this.value={}; // �2� no access permission KN�_{S����|T�S if(this.checkAccess(0,0,sComputer)) this.value={} ,this.type=this.getValueType() ,this.subkey=this.getSubkeyName(1) ; // else: no access permission or doesn't exist. return path; }; // �P�V object KNR�Y path0 registry_function.prototype.getPath = function() { return this.getRegCode(this.base) + '\\' + this.path; }; registry_function.prototype.reset = function() { // �2� no access permission KN�_{S����|T�S this.subkey = {}, this.type = {}, this.value = {}; this.setPath(this.separatePath(), this.computer); }; // \*g�[�U! registry_function.isExist=function(path,sComputer,flag){ path=this.separatePath(path,sComputer); if(!path)return; var _t=this.getSubkeyName([path[0],path[1].replace(/[^\\]+\\?$/,'')],0,2); _t= _t && (!path[1]||path[1]=='\\'||_t.length&&_t[1][path[1].replace(/^(.*?)([^\\]+)\\?$/,'$2')]); return !_t||!path[2]?_t:typeof this.getValueType(path)!='undefined'; //if(this.checkAccess(path,1/* KEY_QUERY_VALUE */,sComputer))return true; //if(flag)return; // N�Ncreate�v�e�ltest0 // ��Screate(&Naccess) �h�:y NX[(W��*R�c�^�Q�O�v � �return false0&TGRunknown �return undefined0 }; registry_function.prototype.isExist = function(name, flag) { return registry_function.isExist(this.separatePath(name), this.computer, flag); }; // RegMethod http://www.cqpub.co.jp/hanbai/pdf/18451/18451_wmi.pdf registry_function.useMethod = ',String,ExpandedString,Binary,DWORD,DWORD,String,MultiString,String,MultiString,String,QWORD' .split(','); registry_function.useValueName = ',s,s,u,u,u,s,s,s,s,s,u'.split(','); registry_function.useArray = ',,,1,,,,1,,1,,'.split(','); // �N type �S�_ path KN Value0�-���R$R%R type registry_function.getValue=function(path,sComputer,/*int || undefined */type){ if(!(path=this.separatePath(path,sComputer)))return; if(typeof path[2]!='string'){ // get all var r={},i; type=this.getValueType(path,sComputer); for(i in type)r[path[2]=i]=this.getValue(path,sComputer,type[i]); return r; } var m; // method if(!type&&!(type=this.getValueType(path,sComputer))||!(m=this.useMethod[type]))return; var oOutParam=this.runMethod('Get'+m+'Value',{hDefKey:path[0],sSubKeyName:path[1],sValueName:path[2]},sComputer); if(!oOutParam)return; //if(oOutParam.returnValue)return oOutParam.returnValue; // different method return different value name oOutParam=oOutParam[this.useValueName[type]+'Value']; // some methods return VB Array if(this.useArray[type])oOutParam=VBA(oOutParam); //if(!oOutParam)return; if(type==7/*REG_MULTI_SZ*/)oOutParam=oOutParam.toArray(); else if(type==3/*REG_BINARY*/)oOutParam=fromCharCode(oOutParam.toArray()); //alert(oMethod.Name+'\n'+'('+type+')'+name+'\n'+oOutParam); //if(type==3)alert(typeof oOutParam); return oOutParam; }; registry_function.prototype.getValue=function(name,/*int || undefined */type){ var i,v; if(typeof name=='string'){ if(this.getSubkeyName()[name]) v=registry_function.getValue([this.base,this.path+'\\'+name,''],this.computer,1/* �S�_�-�<P: REG_SZ */); else{ if(name in this.value)return this.value[name];//if(m=this.value[name])return m; if(!type)type=this.getValueType(name); // bug: GP�Y(WKNMR�]�}�f�eN� ��S���_0R/����v type � v=registry_function.getValue(this.separatePath(name),this.computer,type); } if(typeof v!='undefined')this.value[name]=v; return v; } if(!this.gotAllValue){ // get all for(i in this.type) //{v=registry_function.getValue(this.separatePath(i),this.computer,this.type[i]);if(typeof v!='undefined')this.value[i]=v;} this.value[i]=registry_function.getValue(this.separatePath(i),this.computer,this.getValueType(i)); this.gotAllValue=true; } return this.value; // �aHQcopy }; /* �P-��[ Value lx\\xe-�bREG_DWORDg�Vhc�NeQ TODO: set default value: setValue('@',object) */ registry_function.setValue=function(path, value, /*int || undefined */type, sComputer, isValue){ if(!(path=this.separatePath(path,sComputer,isValue)))return 5; if(typeof value=='undefined')return; // want to delete? if(!type||isNaN(type)&&isNaN(type=this.getTypeValue(type))) // ��R$R%R type=!isNaN(value)?value%1?1/*REG_SZ*/:4/*REG_DWORD*/ // DWORD:4bytes, or QWORD :typeof value=='string'? /^[\x0-\xff]$/.test(value)&&/[\x0\x80-\xff]/.test(value)?3/*REG_BINARY*/ :value.indexOf('\n')!=-1?7/*REG_MULTI_SZ*/ :value.indexOf('%')==-1?1/*REG_SZ*/:2/*REG_EXPAND_SZ:"%windir%\\calc.exe"I{*/ :typeof value=='object'?3/*REG_BINARY*/:0/*REG_NONE*/; // may buggy var m=this.useMethod[type],o; //alert('registry_function.setValue:\npath:'+path+'\nvalue:'+(''+value).replace(/\0/g,'\\0')+'\ntype:'+type+'\nm:'+m+'\n\ncreate id:'+this.setValue.cid+'\nexist:'+this.isExist([path[0],path[1]])); if(!m)return 6; if( this.setValue.cid && !this.isExist([path[0],path[1]]) ) //alert('registry_function.setValue: add Key:\n'+path[0]+'\n'+path[1]), this.addKey(path); o={hDefKey:path[0],sSubKeyName:path[1],sValueName:path[2]}; // http://msdn.microsoft.com/en-us/library/aa393286(VS.85).aspx if(type==3/*REG_BINARY*/&&typeof value=='string'){ var i=0,v=value; for(value=[];i<v.length;i++)value.push(v.charCodeAt(i));//value.push(''+v.charCodeAt(i)); } // some methods need VB Array if(this.useArray[type])value=JSArrayToSafeArray(value); // different method has different value name o[this.useValueName[type]+'Value']=value; m=this.runMethod('Set'+m+'Value',o,sComputer); return m instanceof Error?m:m.returnValue; }; // Create intermediate directories as required. // -��ptrue��_setValue�_�� N9e�V�O �&TGR�S���Q�s��R�Rsubkey�v�`b_0 //registry_function.setValue.cid=0; registry_function.prototype.setValue = function(name, value, /*int || undefined */type) { return registry_function.setValue(this.separatePath(name), value, type, this.computer); }; /* �S��*Rd�I�P}ޞ� �#� Tr�P[� N�v@b g<PGW��*Rd�(�Y�g NX[(WP[� �br�� N�� gP[�GR N��*Rd�GR!qHe�g) */ registry_function.deleteKey=function(path,sComputer,flag){ if(!(path=this.separatePath(path,sComputer)) ||path[2] // N�c�S<P )return; flag=flag||0; if(flag&1){ // recursive var i,k=this.getSubkeyName(path,sComputer); for(i in k)this.deleteKey([path[0],path[1]+k[i]],sComputer,flag-(flag&2)/* N#� Nd\empty�Nw�*Rd� */); flag-=1; } // do deleteKey var r=this.runMethod('DeleteKey',{hDefKey:path[0],sSubKeyName:path[1]},sComputer); if(!(flag&2))return r instanceof Error?r:r.returnValue; // #� Nd\empty�Nw�*Rd� flag-=(flag&1)+(flag&2); while(!(r instanceof Error)