Files
rappaurio-sae501_502/app/node_modules/cejs/_documents/JsDoc/symbols/src/D__USB_cgi-bin_lib_JS_OS_Windows_registry.origin.js.html
2023-09-25 13:27:24 +02:00

755 lines
174 KiB
HTML
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<html><head><meta http-equiv="content-type" content="text/html; charset=UTF-8"> <style>
.KEYW {color: #933;}
.COMM {color: #bbb; font-style: italic;}
.NUMB {color: #393;}
.STRN {color: #393;}
.REGX {color: #339;}
.line {border-right: 1px dotted #666; color: #666; font-style: normal;}
</style></head><body><pre><span class='line'> 1</span> <span class="TOKN"></span><span class="WHIT">
<span class='line'> 2</span> </span><span class="COMM">/**
<span class='line'> 3</span> * @name CeL function for Windows registry
<span class='line'> 4</span> * @fileoverview
<span class='line'> 5</span> * 本檔案包含了 Windows registry 的 functions。
<span class='line'> 6</span> * @since
<span class='line'> 7</span> */</span><span class="WHIT">
<span class='line'> 8</span>
<span class='line'> 9</span> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="WHIT"> </span><span class="NAME">CeL</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="STRN">'function'</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 10</span>
<span class='line'> 11</span> </span><span class="COMM">/**
<span class='line'> 12</span> * 本 module 之 name(id)&lt;span style="text-decoration:line-through;">不設定時會從呼叫時之 path 取得&lt;/span>。
<span class='line'> 13</span> * @type String
<span class='line'> 14</span> * @constant
<span class='line'> 15</span> * @inner
<span class='line'> 16</span> * @ignore
<span class='line'> 17</span> */</span><span class="WHIT">
<span class='line'> 18</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">module_name</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">'OS.Windows.registry'</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 19</span>
<span class='line'> 20</span> </span><span class="COMM">//===================================================</span><span class="WHIT">
<span class='line'> 21</span> </span><span class="COMM">/**
<span class='line'> 22</span> * 若欲 include 整個 module 時,需囊括之 code。
<span class='line'> 23</span> * @type Function
<span class='line'> 24</span> * @param {Function} library_namespace namespace of library
<span class='line'> 25</span> * @param load_arguments 呼叫時之 argument(s)
<span class='line'> 26</span> * @return
<span class='line'> 27</span> * @name CeL.OS.Windows.registry
<span class='line'> 28</span> * @constant
<span class='line'> 29</span> * @inner
<span class='line'> 30</span> * @ignore
<span class='line'> 31</span> */</span><span class="WHIT">
<span class='line'> 32</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">code_for_including</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">library_namespace</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">load_arguments</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 33</span>
<span class='line'> 34</span> </span><span class="COMM">// requires</span><span class="WHIT">
<span class='line'> 35</span> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">eval</span><span class="PUNC">(</span><span class="NAME">library_namespace.use_function</span><span class="PUNC">(</span><span class="WHIT">
<span class='line'> 36</span> </span><span class="WHIT"> </span><span class="STRN">'code.compatibility.is_DOM'</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'> 37</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 38</span>
<span class='line'> 39</span>
<span class='line'> 40</span> </span><span class="COMM">/**
<span class='line'> 41</span> * null module constructor
<span class='line'> 42</span> * @class Windows registry 的 functions
<span class='line'> 43</span> */</span><span class="WHIT">
<span class='line'> 44</span> </span><span class="NAME">CeL.OS.Windows.registry</span><span class="WHIT">
<span class='line'> 45</span> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 46</span> </span><span class="WHIT"> </span><span class="COMM">// null module constructor</span><span class="WHIT">
<span class='line'> 47</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 48</span>
<span class='line'> 49</span> </span><span class="COMM">/**
<span class='line'> 50</span> * for JSDT: 有 prototype 才會將之當作 Class
<span class='line'> 51</span> */</span><span class="WHIT">
<span class='line'> 52</span> </span><span class="NAME">CeL.OS.Windows.registry</span><span class="WHIT">
<span class='line'> 53</span> </span><span class="PUNC">.</span><span class="NAME">prototype</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 54</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 55</span>
<span class='line'> 56</span>
<span class='line'> 57</span>
<span class='line'> 58</span>
<span class='line'> 59</span>
<span class='line'> 60</span>
<span class='line'> 61</span>
<span class='line'> 62</span>
<span class='line'> 63</span> </span><span class="COMM">/* http://msdn2.microsoft.com/en-us/library/x05fawxd.aspx
<span class='line'> 64</span> 作Registry的操作
<span class='line'> 65</span> WSH_registry.Base 設定工作的基準這應該是個目錄將會附加在每個key前面
<span class='line'> 66</span>
<span class='line'> 67</span> WSH_registry(key) WshShell.RegRead()
<span class='line'> 68</span> *undo* key假如輸入object會將之一一分開處理此時WSH_registry.Err會包含所有發生的錯誤WSH_registry.Err[0]=發生錯誤的數量
<span class='line'> 69</span> *undo* WSH_registry(key,0,'info') 完整資訊包括type
<span class='line'> 70</span> *undo* WSH_registry(keyDir,keyPattern,'dir') 傳回整個dir的資料。dir的預設值/標準の値:['']
<span class='line'> 71</span> WSH_registry(key,value[,type]) WshShell.RegWrite()
<span class='line'> 72</span> WSH_registry(key,value),WSH_registry(key,value,'auto') auto detect type
<span class='line'> 73</span> WSH_registry(key,value,1) WshShell.RegWrite(key,value)
<span class='line'> 74</span> WSH_registry(key,0,'del') WshShell.RegDelete()
<span class='line'> 75</span>
<span class='line'> 76</span> TODO:
<span class='line'> 77</span> backup all
<span class='line'> 78</span> search
<span class='line'> 79</span>
<span class='line'> 80</span> test:
<span class='line'> 81</span> if(0){
<span class='line'> 82</span> 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);};
<span class='line'> 83</span> p();
<span class='line'> 84</span> WSH_registry(k,0,'del');
<span class='line'> 85</span> r=WSH_registry(k);
<span class='line'> 86</span> p();
<span class='line'> 87</span> r=WSH_registry(k="HKCU\\Software\\Colorless echo\\Comparer\\");
<span class='line'> 88</span> p();
<span class='line'> 89</span> }
<span class='line'> 90</span>
<span class='line'> 91</span> */</span><span class="WHIT">
<span class='line'> 92</span> </span><span class="NAME">WSH_registry.Err</span><span class="PUNC">=</span><span class="NAME">WSH_registry.Base</span><span class="PUNC">=</span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 93</span> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="NAME">WSH_registry</span><span class="PUNC">(</span><span class="NAME">key</span><span class="PUNC">,</span><span class="NAME">value</span><span class="PUNC">,</span><span class="NAME">type</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 94</span> </span><span class="WHIT"> </span><span class="NAME">WSH_registry.Err</span><span class="PUNC">=</span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 95</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">WSH_registry.Base</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">WSH_registry.Base.slice</span><span class="PUNC">(</span><span class="PUNC">-</span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">!=</span><span class="STRN">'\\'</span><span class="PUNC">)</span><span class="NAME">WSH_registry.Base</span><span class="PUNC">+</span><span class="PUNC">=</span><span class="STRN">'\\'</span><span class="PUNC">;</span><span class="NAME">key</span><span class="PUNC">=</span><span class="NAME">WSH_registry.Base</span><span class="PUNC">+</span><span class="NAME">key</span><span class="PUNC">;</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 96</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">key</span><span class="PUNC">)</span><span class="KEYW">return</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 97</span> </span><span class="WHIT"> </span><span class="COMM">//if(typeof WshShell!='object')WshShell=new ActiveXObject("WScript.Shell");</span><span class="WHIT">
<span class='line'> 98</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="WHIT"> </span><span class="NAME">key</span><span class="PUNC">==</span><span class="STRN">'object'</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">,</span><span class="NAME">c</span><span class="PUNC">=</span><span class="NUMB">0</span><span class="PUNC">;</span><span class="KEYW">for</span><span class="PUNC">(</span><span class="NAME">i</span><span class="WHIT"> </span><span class="KEYW">in</span><span class="WHIT"> </span><span class="NAME">key</span><span class="PUNC">)</span><span class="NAME">c</span><span class="PUNC">+</span><span class="PUNC">=</span><span class="NAME">WSH_registry</span><span class="PUNC">(</span><span class="NAME">i</span><span class="PUNC">,</span><span class="NAME">key</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="NAME">type</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="KEYW">instanceof</span><span class="WHIT"> </span><span class="NAME">Error</span><span class="PUNC">?</span><span class="NUMB">0</span><span class="PUNC">:</span><span class="NUMB">1</span><span class="PUNC">;</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">c</span><span class="PUNC">;</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 99</span> </span><span class="WHIT"> </span><span class="KEYW">try</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>100</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">_f</span><span class="PUNC">=</span><span class="NAME">WSH_registry.F</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>101</span> </span><span class="WHIT"> </span><span class="COMM">//if(typeof type=='string')type=_f[type];</span><span class="WHIT">
<span class='line'>102</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">type</span><span class="PUNC">==</span><span class="STRN">'del'</span><span class="PUNC">)</span><span class="NAME">WshShell.RegDelete</span><span class="PUNC">(</span><span class="NAME">key</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>103</span> </span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="WHIT"> </span><span class="NAME">value</span><span class="PUNC">!=</span><span class="STRN">'undefined'</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>104</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="WHIT"> </span><span class="NAME">type</span><span class="PUNC">==</span><span class="STRN">'undefined'</span><span class="PUNC">||</span><span class="NAME">type</span><span class="PUNC">==</span><span class="STRN">'auto'</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="COMM">// 自動判別</span><span class="WHIT">
<span class='line'>105</span> </span><span class="WHIT"> </span><span class="NAME">type</span><span class="PUNC">=</span><span class="KEYW">typeof</span><span class="WHIT"> </span><span class="NAME">value</span><span class="PUNC">==</span><span class="STRN">'number'</span><span class="PUNC">&&</span><span class="PUNC">!</span><span class="NAME">value</span><span class="PUNC">%</span><span class="NUMB">1</span><span class="PUNC">?</span><span class="STRN">'REG_DWORD'</span><span class="WHIT"> </span><span class="COMM">// DWORD:4bytes,REG_BINARY</span><span class="WHIT">
<span class='line'>106</span> </span><span class="WHIT"> </span><span class="PUNC">:</span><span class="KEYW">typeof</span><span class="WHIT"> </span><span class="NAME">value</span><span class="PUNC">==</span><span class="STRN">'string'</span><span class="PUNC">&&</span><span class="NAME">value.indexOf</span><span class="PUNC">(</span><span class="STRN">'\n'</span><span class="PUNC">)</span><span class="PUNC">==</span><span class="PUNC">-</span><span class="NUMB">1</span><span class="PUNC">?</span><span class="NAME">value.indexOf</span><span class="PUNC">(</span><span class="STRN">'%'</span><span class="PUNC">)</span><span class="PUNC">==</span><span class="PUNC">-</span><span class="NUMB">1</span><span class="PUNC">?</span><span class="STRN">'REG_SZ'</span><span class="PUNC">:</span><span class="STRN">'REG_EXPAND_SZ'</span><span class="WHIT"> </span><span class="COMM">// REG_EXPAND_SZ:"%windir%\\calc.exe"等</span><span class="WHIT">
<span class='line'>107</span> </span><span class="WHIT"> </span><span class="PUNC">:</span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="COMM">// 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</span><span class="WHIT">
<span class='line'>108</span> </span><span class="WHIT"> </span><span class="COMM">//if(isNaN(type))WshShell.RegWrite(key,value);else WshShell.RegWrite(key,value,WSH_registry.T[type]);</span><span class="WHIT">
<span class='line'>109</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="WHIT"> </span><span class="NAME">type</span><span class="PUNC">==</span><span class="STRN">'string'</span><span class="PUNC">)</span><span class="NAME">WshShell.RegWrite</span><span class="PUNC">(</span><span class="NAME">key</span><span class="PUNC">,</span><span class="NAME">value</span><span class="PUNC">,</span><span class="NAME">type</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="KEYW">else</span><span class="WHIT"> </span><span class="NAME">WshShell.RegWrite</span><span class="PUNC">(</span><span class="NAME">key</span><span class="PUNC">,</span><span class="NAME">value</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>110</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>111</span> </span><span class="WHIT"> </span><span class="NAME">value</span><span class="PUNC">=</span><span class="NAME">WshShell.RegRead</span><span class="PUNC">(</span><span class="NAME">key</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="COMM">// 寫入後再讀取,傳回真正寫入的值</span><span class="WHIT">
<span class='line'>112</span> </span><span class="WHIT"> </span><span class="COMM">//alert('('+typeof value+')'+key+'\n'+value);</span><span class="WHIT">
<span class='line'>113</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="KEYW">catch</span><span class="PUNC">(</span><span class="NAME">e</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>114</span> </span><span class="WHIT"> </span><span class="COMM">// http://klcintw4.blogspot.com/2007/09/javascriptie.html</span><span class="WHIT">
<span class='line'>115</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">e.description.indexOf</span><span class="PUNC">(</span><span class="STRN">"伺服程式無法產生物件"</span><span class="PUNC">)</span><span class="PUNC">!=</span><span class="PUNC">-</span><span class="NUMB">1</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>116</span> </span><span class="WHIT"> </span><span class="NAME">alert</span><span class="PUNC">(</span><span class="STRN">"請調整IE瀏覽器的安全性\n網際網路選項→安全性→自訂層級\n「起始不標示為安全的ActiveX控制項」設定為啟用或提示。"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="WHIT">
<span class='line'>117</span> </span><span class="WHIT"> </span><span class="NAME">WSH_registry.Err</span><span class="PUNC">=</span><span class="NAME">e</span><span class="PUNC">;</span><span class="KEYW">return</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>118</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>119</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">value</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>120</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>121</span>
<span class='line'>122</span>
<span class='line'>123</span> </span><span class="COMM">/*
<span class='line'>124</span> registry 登錄值/登錄項目操作
<span class='line'>125</span>
<span class='line'>126</span> bug:
<span class='line'>127</span> registry_function.checkAccess('HKLM') always return false. this is OK: registry_function.checkAccess('HKLM\\SOFTWARE\\')
<span class='line'>128</span>
<span class='line'>129</span> TODO:
<span class='line'>130</span> Win32_SecurityDescriptor
<span class='line'>131</span> .moveKey(from,to)
<span class='line'>132</span> .moveValue(from,to)
<span class='line'>133</span> 用.apply()實作prototype之function不另外寫。
<span class='line'>134</span> */</span><span class="WHIT">
<span class='line'>135</span> </span><span class="COMM">//registry_function[generateCode.dLK]='VBA,JSArrayToSafeArray';</span><span class="WHIT">
<span class='line'>136</span> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="NAME">registry_function</span><span class="PUNC">(</span><span class="NAME">path</span><span class="PUNC">,</span><span class="NAME">sComputer</span><span class="PUNC">,</span><span class="NAME">flag</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="WHIT"> </span><span class="COMM">// key path, ComputerName, create?</span><span class="WHIT">
<span class='line'>137</span> </span><span class="COMM">/*
<span class='line'>138</span> if(!registry_function.prototype.oReg){ // 不能用 this.prototype.~
<span class='line'>139</span> var oReg=getWMIData('default:SWbemLocator');//try{oReg=new Enumerator(GetObject("winmgmts:{impersonationLevel=impersonate}//"+(sComputer||'.')+"/root/default:StdRegProv"));}catch(e){}
<span class='line'>140</span> if(!oReg)try{
<span class='line'>141</span> // http://msdn2.microsoft.com/en-us/library/aa393774.aspx
<span class='line'>142</span> var oLoc=new ActiveXObject("WbemScripting.SWbemLocator")
<span class='line'>143</span> ,oSvc=oLoc.ConnectServer(sComputer||null,"root/default");
<span class='line'>144</span> oReg=oSvc.Get("StdRegProv");
<span class='line'>145</span> }catch(e){return;}
<span class='line'>146</span> registry_function.prototype.oReg=oReg;
<span class='line'>147</span> }
<span class='line'>148</span> */</span><span class="WHIT">
<span class='line'>149</span> </span><span class="COMM">/*
<span class='line'>150</span> try{
<span class='line'>151</span> this.oReg=new ActiveXObject("WbemScripting.SWbemLocator").ConnectServer(sComputer||null,"root/default").Get("StdRegProv");
<span class='line'>152</span> }catch(e){return;} // User-defined function to format error codes.
<span class='line'>153</span> */</span><span class="WHIT">
<span class='line'>154</span> </span><span class="WHIT"> </span><span class="COMM">// with(this)base:'',subkey:{},value:{},type:{},flag:0</span><span class="WHIT">
<span class='line'>155</span> </span><span class="WHIT"> </span><span class="NAME">this.setPath</span><span class="PUNC">(</span><span class="NAME">path</span><span class="PUNC">,</span><span class="NAME">sComputer</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>156</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">this</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>157</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>158</span>
<span class='line'>159</span>
<span class='line'>160</span> </span><span class="COMM">// 下面是公私共用 function</span><span class="WHIT">
<span class='line'>161</span> </span><span class="COMM">/*
<span class='line'>162</span> http://www.supinfo-projects.com/en/2004/api_basederegistre__vb_en/2/
<span class='line'>163</span> http://www.microsoft.com/taiwan/msclub/4P/topic_0402-3.aspx
<span class='line'>164</span> REG_BINARY 二進位制資料。登錄檔編輯器會以十六進位的記數法來顯示二進位制的資料,而你必須用十六進位制的記數法 來輸入二進位的資料。舉個例子來說如REG_BINARY值為0x02 0xFE 0xA9 0x38 0x92 0x38 0xAB 0xD9。
<span class='line'>165</span> REG_DWORD 雙字組值(32-bits)。很多REG_DWORD內容值都使用像是布林值(0 或1、true或false、yes或者是no)。你也可以看到時間值以百萬秒(millisecond)的方式被放在REG_DWORD當中(1000 即1秒)。32-bit未指定的範圍可以從0到4,294,967,295並且32-bit指定數值範圍可以從-2,147,483,648到 2,147,483,647。你可以使用十進位制或者是十六進位制的方法來編輯這些數值。如REG_DWORD值可表示為0xFE020001及 0x10010001。
<span class='line'>166</span> REG_DWORD_BIG_ENDIAN 雙字組(Double-word)值以最顯著的方式被存放在記憶體當中。這些位元的順多與REG_DWORD的順序相反。舉個例子來說數值 0x01020304被以0x01 0x02 0x03 0x04的型態放置在記憶體當中你並不會在Intel-based 的架構中看到諸如此類的架構。
<span class='line'>167</span> REG_DWORD_LITTLE_ENDIAN 雙字組值至少有顯者的位元組被儲存在記憶體當中這個型態跟REG_DWORD是相同的並且因為Intel-based的架構是以這種格式來儲存數值 的在Windows XP當中它是最普遍的數值。舉例來說0x01020304以0x04 0x03 0x02 0x01的內容被存放在記憶體當中登錄檔編輯器並不提供用來建立REG_DWORD_LITTLE_ENDIAN 值的能力因為這個數值資料型態對於REG_DWORD在登錄檔當中的角色而言是相同的。
<span class='line'>168</span> REG_EXPAND_SZ 變數長度的文字資料。以這種資料型態放置的資料可以是變數、及在使用它們之前用來延伸這些變數的數值的程式。舉個例子來說REG_EXPAND_SZ 值包含了%USERPROFILE%\Favorites在程式使用它之前可能被延伸為C:\Documents and Settings\Jerry\Favorites 。這些登錄器API (Application Programming Interface)會依照所呼叫的程式來延伸環境變數REG_EXPAND_SZ字串所以它在程式沒有擴充他們的時候是沒有作用的。您可以看看第十章「引用使用者資訊檔」以學習更多此類內容值的型態以修正一些有趣的問題。
<span class='line'>169</span> REG_FULL_RESOURCE_DESCRIPTOR 資源列表會將裝置及裝置的驅動程式列示出來。這也就資料型態對於PNP裝置來講很重要的原因。登錄檔編輯器並不提供任何方去來製作這種型態的內容值但是 它允許你顯示它們。你可以查看HKLM\HARDWARE\DESCRIPTION\Description做為這類資料型態的範例。
<span class='line'>170</span> REG_LINK 它是一個連接而您無法建立REG_LINK值。
<span class='line'>171</span> REG_MULTI_SZ 包含一個字串列表的二進位值。登錄檔編輯器會在每一行中顯示一個字串,並且允許你編輯這些列表。在 這些登錄檔當中,一個空的字元(0x00)被每個字串分隔開來,並且兩個空的字串被放置在此列表的結尾。
<span class='line'>172</span> REG_NONE 擁有並未定義的數值。 Consists of hex data.
<span class='line'>173</span> REG_QWORD Quadruple-word值(64-bits)。此一型態的資料與REG_DWORD型態相似但是它包含了 64 bits而不是32 bit。而支援此一型態的作業系統只有Windows XP 64-Bit Edition。你可以使用十進位或者是十六進位的記數方法來查看及編輯此類的登錄值。 0xFE02000110010001為REG_QWORD的一個例子。
<span class='line'>174</span> REG_QWORD_BIG_ENDIAN Quadruple-word值會將最顯著的位元組第一個儲存在記憶體當中。而此位元組的順序則與REG_QWORD儲存這些值的順序相反。你可以查看 REG_DWORD_BIG_ENDIAN得到更多資訊。
<span class='line'>175</span> REG_QWORD_LITTLE_ENDIAN 至少有Quadruple-word值儲存在記憶體當中。這種型態與REG_QWORD相同。您可以查看REG_DWORD_LITTLE_ENDIAN 取得更多的資訊。登錄檔編輯器並不提供製作REG_QWORD_LITTLE_ENDIAN 內容的能力因為這個值的型態對於登錄檔中的REG_QWORD而言是唯一的。
<span class='line'>176</span> REG_RESOURCE_LIST 是REG_FULL_RESOURCE_DESCRIPTION 內容值的列表。登錄檔編輯器允許你查看,但不允許你編輯這種型態的資料。
<span class='line'>177</span> REG_RESOURCE_REQUIREMENTS_LIST 列示了裝置所需資源的列表。登錄檔編輯器允許你查看,但並不允許你編輯此種型態的值。
<span class='line'>178</span> REG_SZ 固定長度的文字 REG_DWORD、REG_SZ值為在登錄檔當中最普遍的資料型態。而REG_SZ值的範例為 Microsoft Windows XP或Jerry Honeycutt。每個字串都是以一個鑋值字元為結尾。程式並在REG_SZ值當中並沒有擴充環境變數。
<span class='line'>179</span> */</span><span class="WHIT">
<span class='line'>180</span> </span><span class="COMM">/* private */</span><span class="NAME">registry_function.typeName</span><span class="PUNC">=</span><span class="STRN">'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'</span><span class="PUNC">.</span><span class="NAME">split</span><span class="PUNC">(</span><span class="STRN">','</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>181</span> </span><span class="COMM">// 將 TypeValue 轉成 TypeName</span><span class="WHIT">
<span class='line'>182</span> </span><span class="NAME">registry_function.getTypeName</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">registry_function.prototype.getTypeName</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="WHIT">
<span class='line'>183</span> </span><span class="WHIT"> </span><span class="COMM">/* int */</span><span class="NAME">type</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>184</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">registry_function.typeName</span><span class="PUNC">[</span><span class="NAME">type</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>185</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>186</span> </span><span class="COMM">// 將 TypeName 轉成 TypeValue</span><span class="WHIT">
<span class='line'>187</span> </span><span class="NAME">registry_function.getTypeValue</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">registry_function.prototype.getTypeValue</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="WHIT">
<span class='line'>188</span> </span><span class="WHIT"> </span><span class="COMM">/* string */</span><span class="NAME">type</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>189</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">registry_function.typeValue</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>190</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">t</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">registry_function.typeValue</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">n</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">registry_function.typeName</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>191</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">i</span><span class="WHIT"> </span><span class="KEYW">in</span><span class="WHIT"> </span><span class="NAME">n</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>192</span> </span><span class="WHIT"> </span><span class="NAME">t</span><span class="PUNC">[</span><span class="NAME">n</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>193</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>194</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">registry_function.typeValue</span><span class="PUNC">[</span><span class="NAME">type</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>195</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>196</span>
<span class='line'>197</span>
<span class='line'>198</span>
<span class='line'>199</span> </span><span class="COMM">/* 將 HKEY_CURRENT_USER 等表示法與數字代號互轉
<span class='line'>200</span> http://msdn2.microsoft.com/en-us/library/aa393664.aspx
<span class='line'>201</span> http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/tags/v1_8_5_19/ext/Win32API/lib/win32/registry.rb?view=markup&pathrev=11732
<span class='line'>202</span> http://www.51log.net/dev/304/4539587.htm
<span class='line'>203</span> */</span><span class="WHIT">
<span class='line'>204</span> </span><span class="NAME">registry_function.getRegCode</span><span class="PUNC">=</span><span class="NAME">registry_function.prototype.getRegCode</span><span class="PUNC">=</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="COMM">/*string */</span><span class="NAME">name</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>205</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">registry_function.RegCode</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>206</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">,</span><span class="NAME">r</span><span class="PUNC">=</span><span class="NAME">registry_function.RegCode</span><span class="PUNC">=</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>207</span> </span><span class="WHIT"> </span><span class="NAME">HKCR</span><span class="PUNC">:</span><span class="NUMB">0</span><span class="PUNC">,</span><span class="NAME">HKEY_CLASSES_ROOT</span><span class="PUNC">:</span><span class="NUMB">0</span><span class="WHIT">
<span class='line'>208</span> </span><span class="WHIT"> </span><span class="PUNC">,</span><span class="NAME">HKCU</span><span class="PUNC">:</span><span class="NUMB">1</span><span class="PUNC">,</span><span class="NAME">HKEY_CURRENT_USER</span><span class="PUNC">:</span><span class="NUMB">1</span><span class="WHIT">
<span class='line'>209</span> </span><span class="WHIT"> </span><span class="PUNC">,</span><span class="NAME">HKLM</span><span class="PUNC">:</span><span class="NUMB">2</span><span class="PUNC">,</span><span class="NAME">HKEY_LOCAL_MACHINE</span><span class="PUNC">:</span><span class="NUMB">2</span><span class="WHIT">
<span class='line'>210</span> </span><span class="WHIT"> </span><span class="PUNC">,</span><span class="NAME">HKUS</span><span class="PUNC">:</span><span class="NUMB">3</span><span class="PUNC">,</span><span class="NAME">HKU</span><span class="PUNC">:</span><span class="NUMB">3</span><span class="PUNC">,</span><span class="NAME">HKEY_USERS</span><span class="PUNC">:</span><span class="NUMB">3</span><span class="WHIT">
<span class='line'>211</span> </span><span class="WHIT"> </span><span class="COMM">//,HKEY_PERFORMANCE_DATA:4</span><span class="WHIT">
<span class='line'>212</span> </span><span class="WHIT"> </span><span class="PUNC">,</span><span class="NAME">HKCC</span><span class="PUNC">:</span><span class="NUMB">5</span><span class="PUNC">,</span><span class="NAME">HKEY_CURRENT_CONFIG</span><span class="PUNC">:</span><span class="NUMB">5</span><span class="WHIT">
<span class='line'>213</span> </span><span class="WHIT"> </span><span class="PUNC">,</span><span class="NAME">HKEY_DYN_DATA</span><span class="PUNC">:</span><span class="NUMB">6</span><span class="WHIT">
<span class='line'>214</span> </span><span class="WHIT"> </span><span class="COMM">//,HKEY_PERFORMANCE_TEXT:0x50</span><span class="WHIT">
<span class='line'>215</span> </span><span class="WHIT"> </span><span class="COMM">//,HKEY_PERFORMANCE_NLSTEXT:0x60</span><span class="WHIT">
<span class='line'>216</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>217</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="KEYW">in</span><span class="WHIT"> </span><span class="NAME">r</span><span class="PUNC">)</span><span class="KEYW">if</span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">isNaN</span><span class="PUNC">(</span><span class="NAME">r</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>218</span> </span><span class="WHIT"> </span><span class="NAME">r</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">+</span><span class="PUNC">=</span><span class="NUMB">0x80000000</span><span class="PUNC">;</span><span class="COMM">//&</span><span class="WHIT">
<span class='line'>219</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">i.indexOf</span><span class="PUNC">(</span><span class="STRN">'_'</span><span class="PUNC">)</span><span class="PUNC">!=</span><span class="PUNC">-</span><span class="NUMB">1</span><span class="PUNC">)</span><span class="NAME">r</span><span class="PUNC">[</span><span class="NAME">r</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">]</span><span class="PUNC">=</span><span class="NAME">i</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="COMM">// reverse</span><span class="WHIT">
<span class='line'>220</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>221</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>222</span> </span><span class="WHIT"> </span><span class="COMM">//alert(name+'\n'+registry_function.RegCode[name]);</span><span class="WHIT">
<span class='line'>223</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">registry_function.RegCode</span><span class="PUNC">[</span><span class="NAME">name</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>224</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>225</span>
<span class='line'>226</span>
<span class='line'>227</span> </span><span class="COMM">// 分開base與path並作檢查。</span><span class="WHIT">
<span class='line'>228</span> </span><span class="NAME">registry_function.separatePath</span><span class="PUNC">=</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">path</span><span class="PUNC">,</span><span class="NAME">sComputer</span><span class="PUNC">,</span><span class="NAME">isValue</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>229</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="WHIT"> </span><span class="NAME">path</span><span class="PUNC">==</span><span class="STRN">'object'</span><span class="PUNC">)</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">path</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="COMM">// 處理過的</span><span class="WHIT">
<span class='line'>230</span> </span><span class="COMM">/*
<span class='line'>231</span> if(isNaN(base)&&isNaN(base=this.getRegCode(base))&&typeof path=='string'&&(path=path.match(/^([A-Z_]+)\\(.+)$/)))
<span class='line'>232</span> base=this.getRegCode(path[1]),path=path[2];
<span class='line'>233</span> */</span><span class="WHIT">
<span class='line'>234</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">base</span><span class="PUNC">,</span><span class="NAME">v</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="COMM">// base, ValueName (or tmp)</span><span class="WHIT">
<span class='line'>235</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="WHIT"> </span><span class="NAME">path</span><span class="PUNC">==</span><span class="STRN">'string'</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">v</span><span class="PUNC">=</span><span class="NAME">path.match</span><span class="PUNC">(</span><span class="REGX">/^([A-Z_]+)(\\(.*))?$/</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>236</span> </span><span class="WHIT"> </span><span class="NAME">base</span><span class="PUNC">=</span><span class="NAME">this.getRegCode</span><span class="PUNC">(</span><span class="NAME">v</span><span class="PUNC">[</span><span class="NUMB">1</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="NAME">path</span><span class="PUNC">=</span><span class="NAME">v</span><span class="PUNC">[</span><span class="NUMB">3</span><span class="PUNC">]</span><span class="COMM">/*||'\\'*/</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>237</span>
<span class='line'>238</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">base</span><span class="COMM">/*||isNaN(base)*/</span><span class="PUNC">)</span><span class="KEYW">return</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>239</span> </span><span class="WHIT"> </span><span class="COMM">//alert('registry_function.separatePath:\n'+base+' '+path);</span><span class="WHIT">
<span class='line'>240</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="WHIT"> </span><span class="NAME">path</span><span class="PUNC">!=</span><span class="STRN">'string'</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">path</span><span class="PUNC">&&</span><span class="NAME">path</span><span class="PUNC">!==</span><span class="STRN">''</span><span class="PUNC">)</span><span class="KEYW">return</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>241</span>
<span class='line'>242</span> </span><span class="WHIT"> </span><span class="NAME">v</span><span class="PUNC">=</span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>243</span> </span><span class="WHIT"> </span><span class="COMM">// 判別輸入</span><span class="WHIT">
<span class='line'>244</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="PUNC">!</span><span class="REGX">/[\\]$/</span><span class="PUNC">.</span><span class="NAME">test</span><span class="PUNC">(</span><span class="NAME">path</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>245</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">isValue</span><span class="PUNC">&&</span><span class="NAME">this.checkAccess</span><span class="PUNC">(</span><span class="PUNC">[</span><span class="NAME">base</span><span class="PUNC">,</span><span class="NAME">path</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="NUMB">1</span><span class="COMM">/* KEY_QUERY_VALUE */</span><span class="PUNC">,</span><span class="NAME">sComputer</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>246</span> </span><span class="WHIT"> </span><span class="COMM">// 輸入 SubkeyName</span><span class="WHIT">
<span class='line'>247</span> </span><span class="WHIT"> </span><span class="NAME">path</span><span class="PUNC">+</span><span class="PUNC">=</span><span class="STRN">'\\'</span><span class="PUNC">,</span><span class="NAME">v</span><span class="PUNC">=</span><span class="STRN">''</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>248</span> </span><span class="WHIT"> </span><span class="COMM">// 輸入 ValueName</span><span class="WHIT">
<span class='line'>249</span> </span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">v</span><span class="PUNC">=</span><span class="NAME">path.match</span><span class="PUNC">(</span><span class="REGX">/^(.+\\)([^\\]+)$/</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="NAME">path</span><span class="PUNC">=</span><span class="NAME">v</span><span class="PUNC">[</span><span class="NUMB">1</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="NAME">v</span><span class="PUNC">=</span><span class="NAME">v</span><span class="PUNC">[</span><span class="NUMB">2</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>250</span> </span><span class="WHIT"> </span><span class="COMM">// 輸入 root 之 ValueName如 HKEY_CURRENT_USER\value</span><span class="WHIT">
<span class='line'>251</span> </span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="NAME">v</span><span class="PUNC">=</span><span class="NAME">path</span><span class="PUNC">,</span><span class="NAME">path</span><span class="PUNC">=</span><span class="STRN">''</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>252</span>
<span class='line'>253</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">path</span><span class="PUNC">[</span><span class="NUMB">1</span><span class="PUNC">]</span><span class="PUNC">==</span><span class="STRN">'\\'</span><span class="PUNC">)</span><span class="NAME">path</span><span class="PUNC">[</span><span class="NUMB">1</span><span class="PUNC">]</span><span class="PUNC">=</span><span class="STRN">''</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>254</span> </span><span class="WHIT"> </span><span class="COMM">//alert('registry_function.separatePath:\n'+base+'\n'+path+'\n'+v);</span><span class="WHIT">
<span class='line'>255</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">typeof</span><span class="WHIT"> </span><span class="NAME">v</span><span class="PUNC">==</span><span class="STRN">'string'</span><span class="PUNC">?</span><span class="PUNC">[</span><span class="NAME">base</span><span class="PUNC">,</span><span class="NAME">path</span><span class="PUNC">,</span><span class="NAME">v</span><span class="PUNC">]</span><span class="PUNC">:</span><span class="PUNC">[</span><span class="NAME">base</span><span class="PUNC">,</span><span class="NAME">path</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="COMM">// 考慮用{base:,key:,value:}</span><span class="WHIT">
<span class='line'>256</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>257</span> </span><span class="COMM">// private</span><span class="WHIT">
<span class='line'>258</span> </span><span class="NAME">registry_function.prototype.separatePath</span><span class="PUNC">=</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">name</span><span class="PUNC">,</span><span class="NAME">base</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>259</span> </span><span class="WHIT"> </span><span class="COMM">//return this instanceof registry_function?[this.base,this.path+path]:registry_function.separatePath(path);</span><span class="WHIT">
<span class='line'>260</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">typeof</span><span class="WHIT"> </span><span class="NAME">name</span><span class="PUNC">==</span><span class="STRN">'string'</span><span class="PUNC">?</span><span class="NAME">name.indexOf</span><span class="PUNC">(</span><span class="STRN">'\\'</span><span class="PUNC">)</span><span class="PUNC">==</span><span class="PUNC">-</span><span class="NUMB">1</span><span class="PUNC">?</span><span class="PUNC">[</span><span class="NAME">this.base</span><span class="PUNC">,</span><span class="NAME">this.path</span><span class="PUNC">,</span><span class="NAME">name</span><span class="PUNC">]</span><span class="PUNC">:</span><span class="NAME">registry_function.separatePath</span><span class="PUNC">(</span><span class="NAME">this.getPath</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">+</span><span class="NAME">name</span><span class="PUNC">,</span><span class="NAME">this.computer</span><span class="PUNC">)</span><span class="PUNC">:</span><span class="PUNC">[</span><span class="NAME">this.base</span><span class="PUNC">,</span><span class="NAME">this.path</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>261</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>262</span>
<span class='line'>263</span>
<span class='line'>264</span> </span><span class="COMM">/* 主要的 WMI 執行 interface
<span class='line'>265</span> http://msdn2.microsoft.com/En-US/library/aa394616.aspx
<span class='line'>266</span> 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.
<span class='line'>267</span> */</span><span class="WHIT">
<span class='line'>268</span> </span><span class="NAME">registry_function.oRegA</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>269</span> </span><span class="NAME">registry_function.runMethod</span><span class="PUNC">=</span><span class="NAME">registry_function.prototype.runMethod</span><span class="PUNC">=</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">name</span><span class="PUNC">,</span><span class="NAME">inPO</span><span class="PUNC">,</span><span class="NAME">sComputer</span><span class="COMM">/*,flag*/</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="WHIT"> </span><span class="COMM">// inPO: input parameters object</span><span class="WHIT">
<span class='line'>270</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">oReg</span><span class="PUNC">=</span><span class="NAME">this.oReg</span><span class="PUNC">||</span><span class="NAME">registry_function.oRegA</span><span class="PUNC">[</span><span class="NAME">sComputer</span><span class="PUNC">||</span><span class="STRN">'.'</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>271</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">oReg</span><span class="PUNC">)</span><span class="KEYW">try</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>272</span> </span><span class="WHIT"> </span><span class="NAME">oReg</span><span class="PUNC">=</span><span class="NAME">this.oReg</span><span class="PUNC">=</span><span class="NAME">registry_function.oRegA</span><span class="PUNC">[</span><span class="NAME">sComputer</span><span class="PUNC">||</span><span class="STRN">'.'</span><span class="PUNC">]</span><span class="WHIT">
<span class='line'>273</span> </span><span class="WHIT"> </span><span class="PUNC">=</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ActiveXObject</span><span class="PUNC">(</span><span class="STRN">'WbemScripting.SWbemLocator'</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>274</span> </span><span class="WHIT"> </span><span class="PUNC">.</span><span class="NAME">ConnectServer</span><span class="PUNC">(</span><span class="NAME">sComputer</span><span class="PUNC">||</span><span class="KEYW">null</span><span class="PUNC">,</span><span class="STRN">'root/default'</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>275</span> </span><span class="WHIT"> </span><span class="PUNC">.</span><span class="NAME">Get</span><span class="PUNC">(</span><span class="STRN">'StdRegProv'</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>276</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="KEYW">catch</span><span class="PUNC">(</span><span class="NAME">e</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>277</span> </span><span class="WHIT"> </span><span class="COMM">//popErr(e);</span><span class="WHIT">
<span class='line'>278</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>279</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>280</span>
<span class='line'>281</span> </span><span class="WHIT"> </span><span class="KEYW">try</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>282</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">,</span><span class="NAME">oMethod</span><span class="PUNC">=</span><span class="NAME">oReg.Methods_.Item</span><span class="PUNC">(</span><span class="NAME">name</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="COMM">// 若無此方法會 throw error!</span><span class="WHIT">
<span class='line'>283</span> </span><span class="WHIT"> </span><span class="PUNC">,</span><span class="NAME">oInParam</span><span class="PUNC">=</span><span class="NAME">oMethod.InParameters.SpawnInstance_</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>284</span> </span><span class="WHIT"> </span><span class="COMM">//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]);}</span><span class="WHIT">
<span class='line'>285</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="PUNC">(</span><span class="NAME">i</span><span class="WHIT"> </span><span class="KEYW">in</span><span class="WHIT"> </span><span class="NAME">inPO</span><span class="PUNC">)</span><span class="NAME">oInParam</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">=</span><span class="NAME">inPO</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="COMM">// 若無此property會 throw error!</span><span class="WHIT">
<span class='line'>286</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">oReg.ExecMethod_</span><span class="PUNC">(</span><span class="NAME">oMethod.Name</span><span class="PUNC">,</span><span class="NAME">oInParam</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="COMM">//oOutParam</span><span class="WHIT">
<span class='line'>287</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="KEYW">catch</span><span class="PUNC">(</span><span class="NAME">e</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>288</span> </span><span class="WHIT"> </span><span class="NAME">popErr</span><span class="PUNC">(</span><span class="NAME">e</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>289</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">e</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>290</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>291</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>292</span>
<span class='line'>293</span>
<span class='line'>294</span> </span><span class="COMM">/* The CheckAccess method verifies that the user has the specified permissions.
<span class='line'>295</span> http://msdn2.microsoft.com/en-us/library/aa384911.aspx
<span class='line'>296</span> http://msdn2.microsoft.com/en-us/library/ms724878.aspx
<span class='line'>297</span>
<span class='line'>298</span> 制定一個訪問標記以描述訪問新鍵的安全性
<span class='line'>299</span> 此參數可以是下列值的一個聯合
<span class='line'>300</span> KEY_ALL_ACCESS
<span class='line'>301</span> KEY_QUERY_VALUE, KEY_ENUMERATE_SUB_KEYS, KEY_NOTIFY, KEY_CREATE_SUB_KEY, KEY_CREATE_LINK, 和 KEY_SET_VALUE 訪問的聯合.
<span class='line'>302</span> KEY_CREATE_LINK
<span class='line'>303</span> 允許創建嚴格符號的鏈接.
<span class='line'>304</span> KEY_CREATE_SUB_KEY
<span class='line'>305</span> 允許創建子鍵.
<span class='line'>306</span> KEY_ENUMERATE_SUB_KEYS
<span class='line'>307</span> 允許枚舉子鍵.
<span class='line'>308</span> KEY_EXECUTE
<span class='line'>309</span> 允許讀訪問.
<span class='line'>310</span> KEY_NOTIFY
<span class='line'>311</span> 允許改變通知.
<span class='line'>312</span> KEY_QUERY_VALUE
<span class='line'>313</span> 允許查詢子鍵的數據.
<span class='line'>314</span> KEY_READ
<span class='line'>315</span> KEY_QUERY_VALUE, KEY_ENUMERATE_SUB_KEYS, 和 KEY_NOTIFY 訪問的聯合.
<span class='line'>316</span> KEY_SET_VALUE
<span class='line'>317</span> 允許設置子鍵的數據.
<span class='line'>318</span> KEY_WRITE
<span class='line'>319</span> KEY_SET_VALUE 和 KEY_CREATE_SUB_KEY 訪問的聯合
<span class='line'>320</span>
<span class='line'>321</span> 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?)
<span class='line'>322</span> KEY_CREATE_LINK (0x0020) Reserved for system use.
<span class='line'>323</span> KEY_CREATE_SUB_KEY (0x0004) Required to create a subkey of a registry key.
<span class='line'>324</span> KEY_ENUMERATE_SUB_KEYS (0x0008) Required to enumerate the subkeys of a registry key.
<span class='line'>325</span> KEY_EXECUTE (0x20019) Equivalent to KEY_READ.
<span class='line'>326</span> KEY_NOTIFY (0x0010) Required to request change notifications for a registry key or for subkeys of a registry key.
<span class='line'>327</span> KEY_QUERY_VALUE (0x0001) Required to query the values of a registry key.
<span class='line'>328</span> KEY_READ (0x20019) Combines the STANDARD_RIGHTS_READ, KEY_QUERY_VALUE, KEY_ENUMERATE_SUB_KEYS, and KEY_NOTIFY values.
<span class='line'>329</span> KEY_SET_VALUE (0x0002) Required to create, delete, or set a registry value.
<span class='line'>330</span> 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.
<span class='line'>331</span> This flag must be combined using the OR operator with the other flags in this table that either query or access registry values.
<span class='line'>332</span> Windows 2000: This flag is not supported.
<span class='line'>333</span> 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.
<span class='line'>334</span> This flag must be combined using the OR operator with the other flags in this table that either query or access registry values.
<span class='line'>335</span> Windows 2000: This flag is not supported.
<span class='line'>336</span> KEY_WRITE (0x20006) Combines the STANDARD_RIGHTS_WRITE, KEY_SET_VALUE, and KEY_CREATE_SUB_KEY access rights.
<span class='line'>337</span>
<span class='line'>338</span> http://www.supinfo-projects.com/en/2004/api_basederegistre__vb_en/2/
<span class='line'>339</span> */</span><span class="WHIT">
<span class='line'>340</span> </span><span class="NAME">registry_function.accessFlag</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>341</span> </span><span class="WHIT"> </span><span class="NAME">KEY_QUERY_VALUE</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>342</span> </span><span class="WHIT"> </span><span class="NAME">KEY_SET_VALUE</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>343</span> </span><span class="WHIT"> </span><span class="NAME">KEY_CREATE_SUB_KEY</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">4</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>344</span> </span><span class="WHIT"> </span><span class="NAME">KEY_ENUMERATE_SUB_KEYS</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">8</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>345</span> </span><span class="WHIT"> </span><span class="NAME">KEY_NOTIFY</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">0x10</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>346</span> </span><span class="WHIT"> </span><span class="NAME">KEY_CREATE_LINK</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">0x20</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>347</span> </span><span class="WHIT"> </span><span class="COMM">// KEY_WOW64_32KEY:0x0200,</span><span class="WHIT">
<span class='line'>348</span> </span><span class="WHIT"> </span><span class="COMM">// KEY_WOW64_64KEY:0x0100,</span><span class="WHIT">
<span class='line'>349</span> </span><span class="WHIT"> </span><span class="NAME">DELETE</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">0x10000</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>350</span> </span><span class="WHIT"> </span><span class="NAME">READ_CONTROL</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">0x20000</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>351</span> </span><span class="WHIT"> </span><span class="NAME">STANDARD_RIGHTS_EXECUTE</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">0x20000</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>352</span> </span><span class="WHIT"> </span><span class="NAME">STANDARD_RIGHTS_READ</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">0x20000</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>353</span> </span><span class="WHIT"> </span><span class="NAME">STANDARD_RIGHTS_WRITE</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">0x20000</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>354</span> </span><span class="WHIT"> </span><span class="NAME">KEY_WRITE</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">0x20006</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>355</span> </span><span class="WHIT"> </span><span class="NAME">KEY_READ</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">0x20019</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>356</span> </span><span class="WHIT"> </span><span class="NAME">KEY_EXECUTE</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">0x20019</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>357</span> </span><span class="WHIT"> </span><span class="COMM">// WRITE_DAC:0x40000,</span><span class="WHIT">
<span class='line'>358</span> </span><span class="WHIT"> </span><span class="COMM">// WRITE_OWNER:0x80000,</span><span class="WHIT">
<span class='line'>359</span> </span><span class="WHIT"> </span><span class="COMM">// STANDARD_RIGHTS_REQUIRED:0xF0000,</span><span class="WHIT">
<span class='line'>360</span> </span><span class="WHIT"> </span><span class="NAME">KEY_ALL_ACCESS</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">0xF003F</span><span class="WHIT">
<span class='line'>361</span> </span><span class="WHIT"> </span><span class="COMM">// ,SYNCHRONIZE:0x100000,</span><span class="WHIT">
<span class='line'>362</span> </span><span class="WHIT"> </span><span class="COMM">// STANDARD_RIGHTS_ALL:0x1F0000</span><span class="WHIT">
<span class='line'>363</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>364</span> </span><span class="COMM">// check access of key base+path</span><span class="WHIT">
<span class='line'>365</span> </span><span class="NAME">registry_function.checkAccess</span><span class="PUNC">=</span><span class="NAME">registry_function.prototype.checkAccess</span><span class="PUNC">=</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">path</span><span class="PUNC">,</span><span class="NAME">uRequired</span><span class="PUNC">,</span><span class="NAME">sComputer</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>366</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">path</span><span class="PUNC">=</span><span class="NAME">this.separatePath</span><span class="PUNC">(</span><span class="NAME">path</span><span class="PUNC">,</span><span class="NAME">sComputer</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>367</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="WHIT"> </span><span class="NAME">uRequired</span><span class="PUNC">==</span><span class="STRN">'string'</span><span class="PUNC">)</span><span class="NAME">uRequired</span><span class="PUNC">=</span><span class="NAME">registry_function.accessFlag</span><span class="PUNC">[</span><span class="NAME">uRequired</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>368</span> </span><span class="WHIT"> </span><span class="COMM">//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);</span><span class="WHIT">
<span class='line'>369</span> </span><span class="WHIT"> </span><span class="KEYW">try</span><span class="PUNC">{</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.runMethod</span><span class="PUNC">(</span><span class="STRN">'CheckAccess'</span><span class="PUNC">,</span><span class="PUNC">{</span><span class="NAME">hDefKey</span><span class="PUNC">:</span><span class="NAME">path</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="NAME">sSubKeyName</span><span class="PUNC">:</span><span class="NAME">path</span><span class="PUNC">[</span><span class="NUMB">1</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="NAME">uRequired</span><span class="PUNC">:</span><span class="NAME">uRequired</span><span class="PUNC">||</span><span class="NUMB">3</span><span class="COMM">/*KEY_QUERY_VALUE+KEY_SET_VALUE*/</span><span class="PUNC">}</span><span class="PUNC">,</span><span class="NAME">sComputer</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">bGranted</span><span class="PUNC">;</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="COMM">// 有可能不存在 .bGranted !</span><span class="WHIT">
<span class='line'>370</span> </span><span class="WHIT"> </span><span class="KEYW">catch</span><span class="PUNC">(</span><span class="NAME">e</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="KEYW">return</span><span class="PUNC">;</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>371</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>372</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>373</span>
<span class='line'>374</span>
<span class='line'>375</span> </span><span class="COMM">// 一次性功能不通過創建object</span><span class="WHIT">
<span class='line'>376</span> </span><span class="COMM">/* ӥ۞某 path: Subkey(機碼) 之 {ValueName:(int)ValueType} 資訊。無 Value 會 return undefined
<span class='line'>377</span> registry_function.getValue('HKEY_CLASSES_ROOT\\.odp') 傳ީ設值
<span class='line'>378</span> registry_function.getValue('HKEY_CLASSES_ROOT\\.odp\\') 傳回整個目錄值
<span class='line'>379</span> */</span><span class="WHIT">
<span class='line'>380</span> </span><span class="NAME">registry_function.getValueType</span><span class="PUNC">=</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">path</span><span class="PUNC">,</span><span class="NAME">sComputer</span><span class="PUNC">,</span><span class="NAME">flag</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>381</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="PUNC">!</span><span class="PUNC">(</span><span class="NAME">path</span><span class="PUNC">=</span><span class="NAME">this.separatePath</span><span class="PUNC">(</span><span class="NAME">path</span><span class="PUNC">,</span><span class="NAME">sComputer</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="KEYW">return</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>382</span>
<span class='line'>383</span> </span><span class="WHIT"> </span><span class="COMM">// http://msdn2.microsoft.com/en-us/library/aa390388.aspx</span><span class="WHIT">
<span class='line'>384</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">oOutParam</span><span class="PUNC">=</span><span class="NAME">this.runMethod</span><span class="PUNC">(</span><span class="STRN">'EnumValues'</span><span class="PUNC">,</span><span class="PUNC">{</span><span class="NAME">hDefKey</span><span class="PUNC">:</span><span class="NAME">path</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="NAME">sSubKeyName</span><span class="PUNC">:</span><span class="NAME">path</span><span class="PUNC">[</span><span class="NUMB">1</span><span class="PUNC">]</span><span class="PUNC">}</span><span class="PUNC">,</span><span class="NAME">sComputer</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="NAME">aNames</span><span class="PUNC">,</span><span class="NAME">aTypes</span><span class="PUNC">,</span><span class="NAME">i</span><span class="PUNC">=</span><span class="NUMB">0</span><span class="PUNC">,</span><span class="NAME">r</span><span class="PUNC">=</span><span class="PUNC">{</span><span class="STRN">''</span><span class="PUNC">:</span><span class="NUMB">1</span><span class="COMM">/* 取得預設值: REG_SZ */</span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>385</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">oOutParam</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">oOutParam.sNames</span><span class="PUNC">==</span><span class="KEYW">null</span><span class="PUNC">)</span><span class="KEYW">return</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="COMM">// error 大概都是 ==null可能因為輸入value而非key值</span><span class="WHIT">
<span class='line'>386</span> </span><span class="WHIT"> </span><span class="NAME">aNames</span><span class="PUNC">=</span><span class="NAME">oOutParam.sNames.toArray</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="NAME">aTypes</span><span class="PUNC">=</span><span class="NAME">oOutParam.Types.toArray</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>387</span> </span><span class="WHIT"> </span><span class="COMM">//aNames.push(''),aTypes.push(1); // 預設值</span><span class="WHIT">
<span class='line'>388</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">flag</span><span class="PUNC">==</span><span class="NUMB">1</span><span class="PUNC">)</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="NAME">aNames</span><span class="PUNC">,</span><span class="NAME">aTypes</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>389</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="PUNC">(</span><span class="PUNC">;</span><span class="NAME">i</span><span class="PUNC">&lt;</span><span class="NAME">aNames.length</span><span class="PUNC">;</span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>390</span> </span><span class="WHIT"> </span><span class="COMM">//WScript.Echo('('+sRegTypes[aTypes[i]]+') '+aNames[i]);</span><span class="WHIT">
<span class='line'>391</span> </span><span class="WHIT"> </span><span class="NAME">r</span><span class="PUNC">[</span><span class="NAME">aNames</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">]</span><span class="PUNC">=</span><span class="NAME">aTypes</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="COMM">//,this.value[aNames[i]]=getValue(aNames[i],aTypes[i]);</span><span class="WHIT">
<span class='line'>392</span>
<span class='line'>393</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">flag</span><span class="PUNC">==</span><span class="NUMB">2</span><span class="PUNC">?</span><span class="PUNC">[</span><span class="NAME">aNames</span><span class="PUNC">,</span><span class="NAME">r</span><span class="PUNC">]</span><span class="PUNC">:</span><span class="KEYW">typeof</span><span class="WHIT"> </span><span class="NAME">path</span><span class="PUNC">[</span><span class="NUMB">2</span><span class="PUNC">]</span><span class="PUNC">==</span><span class="STRN">'string'</span><span class="PUNC">?</span><span class="NAME">r</span><span class="PUNC">[</span><span class="NAME">path</span><span class="PUNC">[</span><span class="NUMB">2</span><span class="PUNC">]</span><span class="PUNC">]</span><span class="PUNC">:</span><span class="NAME">r</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>394</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>395</span> </span><span class="COMM">// 傳回某 Value(數值) 之 (int)type 或 {ValueName:(int)ValueType}</span><span class="WHIT">
<span class='line'>396</span> </span><span class="NAME">registry_function.prototype.getValueType</span><span class="PUNC">=</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">name</span><span class="PUNC">,</span><span class="NAME">force</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>397</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">force</span><span class="PUNC">||</span><span class="PUNC">!</span><span class="NAME">this.type</span><span class="PUNC">||</span><span class="PUNC">!</span><span class="NAME">this.type</span><span class="PUNC">[</span><span class="NAME">name</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="WHIT"> </span><span class="COMM">// 可能有更新</span><span class="WHIT">
<span class='line'>398</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">t</span><span class="PUNC">=</span><span class="NAME">registry_function.getValueType</span><span class="PUNC">(</span><span class="NAME">this.separatePath</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="NAME">this.computer</span><span class="PUNC">,</span><span class="NUMB">2</span><span class="PUNC">)</span><span class="PUNC">||</span><span class="PUNC">[</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>399</span> </span><span class="WHIT"> </span><span class="NAME">this.type</span><span class="PUNC">=</span><span class="PUNC">(</span><span class="NAME">this.valueA</span><span class="PUNC">=</span><span class="NAME">t</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="PUNC">||</span><span class="PUNC">[</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">length</span><span class="PUNC">?</span><span class="NAME">t</span><span class="PUNC">[</span><span class="NUMB">1</span><span class="PUNC">]</span><span class="PUNC">:</span><span class="PUNC">{</span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>400</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>401</span> </span><span class="WHIT"> </span><span class="COMM">//alert('registry_function.prototype.getValueType:\n'+name+' '+this.type[name]);</span><span class="WHIT">
<span class='line'>402</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">this.type</span><span class="PUNC">)</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">typeof</span><span class="WHIT"> </span><span class="NAME">name</span><span class="PUNC">==</span><span class="STRN">'string'</span><span class="PUNC">?</span><span class="NAME">this.type</span><span class="PUNC">[</span><span class="NAME">name</span><span class="PUNC">]</span><span class="PUNC">:</span><span class="NAME">this.type</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="COMM">// 應先copy</span><span class="WHIT">
<span class='line'>403</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>404</span> </span><span class="NAME">registry_function.prototype.getValueA</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">force</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>405</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">force</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">this.valueA</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>406</span> </span><span class="WHIT"> </span><span class="NAME">this.getValueType</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>407</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.valueA</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>408</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>409</span>
<span class='line'>410</span>
<span class='line'>411</span> </span><span class="COMM">/* 一次性功能不通過創建object
<span class='line'>412</span> 讀取 Subkey(機碼) 之名稱資訊。無 Subkey 會 return undefined
<span class='line'>413</span>
<span class='line'>414</span> TODO:
<span class='line'>415</span> return registry_function object
<span class='line'>416</span> */</span><span class="WHIT">
<span class='line'>417</span> </span><span class="NAME">registry_function.getSubkeyName</span><span class="PUNC">=</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">path</span><span class="PUNC">,</span><span class="NAME">sComputer</span><span class="PUNC">,</span><span class="NAME">flag</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>418</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="PUNC">!</span><span class="PUNC">(</span><span class="NAME">path</span><span class="PUNC">=</span><span class="NAME">this.separatePath</span><span class="PUNC">(</span><span class="NAME">path</span><span class="PUNC">,</span><span class="NAME">sComputer</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="KEYW">return</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>419</span> </span><span class="WHIT"> </span><span class="COMM">//alert('registry_function.getSubkeyName:\npath: '+path);</span><span class="WHIT">
<span class='line'>420</span>
<span class='line'>421</span> </span><span class="WHIT"> </span><span class="COMM">// http://msdn2.microsoft.com/en-us/library/aa390387.aspx</span><span class="WHIT">
<span class='line'>422</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">=</span><span class="NUMB">0</span><span class="PUNC">,</span><span class="NAME">r</span><span class="PUNC">=</span><span class="PUNC">{</span><span class="PUNC">}</span><span class="PUNC">,</span><span class="NAME">aNames</span><span class="PUNC">=</span><span class="NAME">this.runMethod</span><span class="PUNC">(</span><span class="STRN">'EnumKey'</span><span class="PUNC">,</span><span class="PUNC">{</span><span class="NAME">hDefKey</span><span class="PUNC">:</span><span class="NAME">path</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="NAME">sSubKeyName</span><span class="PUNC">:</span><span class="NAME">path</span><span class="PUNC">[</span><span class="NUMB">1</span><span class="PUNC">]</span><span class="PUNC">==</span><span class="STRN">'\\'</span><span class="PUNC">?</span><span class="STRN">''</span><span class="PUNC">:</span><span class="NAME">path</span><span class="PUNC">[</span><span class="NUMB">1</span><span class="PUNC">]</span><span class="PUNC">}</span><span class="PUNC">,</span><span class="NAME">sComputer</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">sNames</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>423</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">aNames</span><span class="PUNC">!=</span><span class="KEYW">null</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="WHIT"> </span><span class="COMM">// error 大概都是 ==null可能因為: 1.無Subkey 2.輸入value而非key值</span><span class="WHIT">
<span class='line'>424</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">flag</span><span class="PUNC">==</span><span class="NUMB">1</span><span class="PUNC">)</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">aNames</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>425</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="PUNC">(</span><span class="NAME">aNames</span><span class="PUNC">=</span><span class="NAME">aNames.toArray</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="NAME">i</span><span class="PUNC">&lt;</span><span class="NAME">aNames.length</span><span class="PUNC">;</span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>426</span> </span><span class="WHIT"> </span><span class="NAME">r</span><span class="PUNC">[</span><span class="NAME">aNames</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">]</span><span class="PUNC">=</span><span class="PUNC">{</span><span class="PUNC">}</span><span class="PUNC">;</span><span class="COMM">//registry_function(r.base+aNames[i]+'\\')</span><span class="WHIT">
<span class='line'>427</span> </span><span class="WHIT"> </span><span class="COMM">//alert('registry_function.getSubkeyName: '+aNames.length);</span><span class="WHIT">
<span class='line'>428</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">flag</span><span class="PUNC">==</span><span class="NUMB">2</span><span class="PUNC">?</span><span class="PUNC">[</span><span class="NAME">aNames</span><span class="PUNC">,</span><span class="NAME">r</span><span class="PUNC">]</span><span class="PUNC">:</span><span class="NAME">path</span><span class="PUNC">[</span><span class="NUMB">2</span><span class="PUNC">]</span><span class="PUNC">?</span><span class="NAME">path</span><span class="PUNC">[</span><span class="NUMB">2</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="KEYW">in</span><span class="WHIT"> </span><span class="NAME">r</span><span class="PUNC">:</span><span class="NAME">r</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>429</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>430</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>431</span> </span><span class="NAME">registry_function.prototype.getSubkeyName</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">force</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">flag</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>432</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">force</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">this.subkey</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>433</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">t</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">registry_function.getSubkeyName</span><span class="PUNC">(</span><span class="NAME">this.separatePath</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>434</span> </span><span class="WHIT"> </span><span class="NAME">this.computer</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>435</span> </span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>436</span> </span><span class="WHIT"> </span><span class="NAME">this.subkey</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.subkeyA</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">t</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">length</span><span class="WHIT"> </span><span class="PUNC">?</span><span class="WHIT"> </span><span class="NAME">t</span><span class="PUNC">[</span><span class="NUMB">1</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>437</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>438</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">flag</span><span class="WHIT"> </span><span class="PUNC">?</span><span class="WHIT"> </span><span class="NAME">this.subkeyA</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">this.subkey</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>439</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>440</span>
<span class='line'>441</span>
<span class='line'>442</span> </span><span class="COMM">/* 設定 object 之初始 path。
<span class='line'>443</span> oRegistryF.subkey
<span class='line'>444</span> oRegistryF.type
<span class='line'>445</span> oRegistryF.value
<span class='line'>446</span> */</span><span class="WHIT">
<span class='line'>447</span> </span><span class="NAME">registry_function.prototype.setPath</span><span class="PUNC">=</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">path</span><span class="PUNC">,</span><span class="NAME">sComputer</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="WHIT"> </span><span class="COMM">// base key path</span><span class="WHIT">
<span class='line'>448</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="PUNC">!</span><span class="PUNC">(</span><span class="NAME">path</span><span class="PUNC">=</span><span class="NAME">registry_function.separatePath</span><span class="PUNC">(</span><span class="NAME">path</span><span class="PUNC">,</span><span class="NAME">sComputer</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="KEYW">return</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="COMM">// 因為是初次設定,所以這裡不能用 this.separatePath()</span><span class="WHIT">
<span class='line'>449</span>
<span class='line'>450</span> </span><span class="WHIT"> </span><span class="NAME">this.base</span><span class="PUNC">=</span><span class="NAME">path</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="NAME">this.path</span><span class="PUNC">=</span><span class="NAME">path</span><span class="PUNC">[</span><span class="NUMB">1</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="NAME">this.computer</span><span class="PUNC">=</span><span class="NAME">sComputer</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>451</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="PUNC">!</span><span class="REGX">/[\\]$/</span><span class="PUNC">.</span><span class="NAME">test</span><span class="PUNC">(</span><span class="NAME">this.path</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="NAME">this.path</span><span class="PUNC">+</span><span class="PUNC">=</span><span class="STRN">'\\'</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="COMM">// 確保this.path是key值</span><span class="WHIT">
<span class='line'>452</span>
<span class='line'>453</span> </span><span class="WHIT"> </span><span class="COMM">//this.subkey={},this.type={},this.value={}; // 預防 no access permission 之後卻還被呼叫</span><span class="WHIT">
<span class='line'>454</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">this.checkAccess</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">,</span><span class="NUMB">0</span><span class="PUNC">,</span><span class="NAME">sComputer</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>455</span> </span><span class="WHIT"> </span><span class="NAME">this.value</span><span class="PUNC">=</span><span class="PUNC">{</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>456</span> </span><span class="WHIT"> </span><span class="PUNC">,</span><span class="NAME">this.type</span><span class="PUNC">=</span><span class="NAME">this.getValueType</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>457</span> </span><span class="WHIT"> </span><span class="PUNC">,</span><span class="NAME">this.subkey</span><span class="PUNC">=</span><span class="NAME">this.getSubkeyName</span><span class="PUNC">(</span><span class="NUMB">1</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>458</span> </span><span class="WHIT"> </span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>459</span> </span><span class="WHIT"> </span><span class="COMM">// else: no access permission or doesn't exist.</span><span class="WHIT">
<span class='line'>460</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">path</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>461</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>462</span>
<span class='line'>463</span> </span><span class="COMM">// 傳回 object 之初始 path。</span><span class="WHIT">
<span class='line'>464</span> </span><span class="NAME">registry_function.prototype.getPath</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>465</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.getRegCode</span><span class="PUNC">(</span><span class="NAME">this.base</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">'\\'</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">this.path</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>466</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>467</span>
<span class='line'>468</span>
<span class='line'>469</span> </span><span class="NAME">registry_function.prototype.reset</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>470</span> </span><span class="WHIT"> </span><span class="COMM">// 預防 no access permission 之後卻還被呼叫</span><span class="WHIT">
<span class='line'>471</span> </span><span class="WHIT"> </span><span class="NAME">this.subkey</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.type</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.value</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>472</span> </span><span class="WHIT"> </span><span class="NAME">this.setPath</span><span class="PUNC">(</span><span class="NAME">this.separatePath</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.computer</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>473</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>474</span>
<span class='line'>475</span> </span><span class="COMM">// 尚未完善!</span><span class="WHIT">
<span class='line'>476</span> </span><span class="NAME">registry_function.isExist</span><span class="PUNC">=</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">path</span><span class="PUNC">,</span><span class="NAME">sComputer</span><span class="PUNC">,</span><span class="NAME">flag</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>477</span> </span><span class="WHIT"> </span><span class="NAME">path</span><span class="PUNC">=</span><span class="NAME">this.separatePath</span><span class="PUNC">(</span><span class="NAME">path</span><span class="PUNC">,</span><span class="NAME">sComputer</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>478</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">path</span><span class="PUNC">)</span><span class="KEYW">return</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>479</span>
<span class='line'>480</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">_t</span><span class="PUNC">=</span><span class="NAME">this.getSubkeyName</span><span class="PUNC">(</span><span class="PUNC">[</span><span class="NAME">path</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="NAME">path</span><span class="PUNC">[</span><span class="NUMB">1</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">replace</span><span class="PUNC">(</span><span class="REGX">/[^\\]+\\?$/</span><span class="PUNC">,</span><span class="STRN">''</span><span class="PUNC">)</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="NUMB">0</span><span class="PUNC">,</span><span class="NUMB">2</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>481</span> </span><span class="WHIT"> </span><span class="NAME">_t</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">_t</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">path</span><span class="PUNC">[</span><span class="NUMB">1</span><span class="PUNC">]</span><span class="PUNC">||</span><span class="NAME">path</span><span class="PUNC">[</span><span class="NUMB">1</span><span class="PUNC">]</span><span class="PUNC">==</span><span class="STRN">'\\'</span><span class="PUNC">||</span><span class="NAME">_t.length</span><span class="PUNC">&&</span><span class="NAME">_t</span><span class="PUNC">[</span><span class="NUMB">1</span><span class="PUNC">]</span><span class="PUNC">[</span><span class="NAME">path</span><span class="PUNC">[</span><span class="NUMB">1</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">replace</span><span class="PUNC">(</span><span class="REGX">/^(.*?)([^\\]+)\\?$/</span><span class="PUNC">,</span><span class="STRN">'$2'</span><span class="PUNC">)</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>482</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">_t</span><span class="PUNC">||</span><span class="PUNC">!</span><span class="NAME">path</span><span class="PUNC">[</span><span class="NUMB">2</span><span class="PUNC">]</span><span class="PUNC">?</span><span class="NAME">_t</span><span class="PUNC">:</span><span class="KEYW">typeof</span><span class="WHIT"> </span><span class="NAME">this.getValueType</span><span class="PUNC">(</span><span class="NAME">path</span><span class="PUNC">)</span><span class="PUNC">!=</span><span class="STRN">'undefined'</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>483</span>
<span class='line'>484</span> </span><span class="WHIT"> </span><span class="COMM">//if(this.checkAccess(path,1/* KEY_QUERY_VALUE */,sComputer))return true;</span><span class="WHIT">
<span class='line'>485</span> </span><span class="WHIT"> </span><span class="COMM">//if(flag)return; // 不以create的方法test。</span><span class="WHIT">
<span class='line'>486</span>
<span class='line'>487</span> </span><span class="WHIT"> </span><span class="COMM">// 若可create(並access)表示不存在需刪掉建出來的return false。否則unknownreturn undefined。</span><span class="WHIT">
<span class='line'>488</span>
<span class='line'>489</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>490</span> </span><span class="NAME">registry_function.prototype.isExist</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">name</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">flag</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>491</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">registry_function.isExist</span><span class="PUNC">(</span><span class="NAME">this.separatePath</span><span class="PUNC">(</span><span class="NAME">name</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>492</span> </span><span class="WHIT"> </span><span class="NAME">this.computer</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">flag</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>493</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>494</span>
<span class='line'>495</span> </span><span class="COMM">// RegMethod http://www.cqpub.co.jp/hanbai/pdf/18451/18451_wmi.pdf</span><span class="WHIT">
<span class='line'>496</span> </span><span class="NAME">registry_function.useMethod</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">',String,ExpandedString,Binary,DWORD,DWORD,String,MultiString,String,MultiString,String,QWORD'</span><span class="WHIT">
<span class='line'>497</span> </span><span class="WHIT"> </span><span class="PUNC">.</span><span class="NAME">split</span><span class="PUNC">(</span><span class="STRN">','</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>498</span> </span><span class="NAME">registry_function.useValueName</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">',s,s,u,u,u,s,s,s,s,s,u'</span><span class="PUNC">.</span><span class="NAME">split</span><span class="PUNC">(</span><span class="STRN">','</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>499</span> </span><span class="NAME">registry_function.useArray</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">',,,1,,,,1,,1,,'</span><span class="PUNC">.</span><span class="NAME">split</span><span class="PUNC">(</span><span class="STRN">','</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>500</span> </span><span class="COMM">// 以 type 取得 path 之 Value。預設自動判別 type</span><span class="WHIT">
<span class='line'>501</span> </span><span class="NAME">registry_function.getValue</span><span class="PUNC">=</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">path</span><span class="PUNC">,</span><span class="NAME">sComputer</span><span class="PUNC">,</span><span class="COMM">/*int || undefined */</span><span class="NAME">type</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>502</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="PUNC">!</span><span class="PUNC">(</span><span class="NAME">path</span><span class="PUNC">=</span><span class="NAME">this.separatePath</span><span class="PUNC">(</span><span class="NAME">path</span><span class="PUNC">,</span><span class="NAME">sComputer</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="KEYW">return</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>503</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="WHIT"> </span><span class="NAME">path</span><span class="PUNC">[</span><span class="NUMB">2</span><span class="PUNC">]</span><span class="PUNC">!=</span><span class="STRN">'string'</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>504</span> </span><span class="WHIT"> </span><span class="COMM">// get all</span><span class="WHIT">
<span class='line'>505</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">r</span><span class="PUNC">=</span><span class="PUNC">{</span><span class="PUNC">}</span><span class="PUNC">,</span><span class="NAME">i</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>506</span> </span><span class="WHIT"> </span><span class="NAME">type</span><span class="PUNC">=</span><span class="NAME">this.getValueType</span><span class="PUNC">(</span><span class="NAME">path</span><span class="PUNC">,</span><span class="NAME">sComputer</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>507</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="PUNC">(</span><span class="NAME">i</span><span class="WHIT"> </span><span class="KEYW">in</span><span class="WHIT"> </span><span class="NAME">type</span><span class="PUNC">)</span><span class="NAME">r</span><span class="PUNC">[</span><span class="NAME">path</span><span class="PUNC">[</span><span class="NUMB">2</span><span class="PUNC">]</span><span class="PUNC">=</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">=</span><span class="NAME">this.getValue</span><span class="PUNC">(</span><span class="NAME">path</span><span class="PUNC">,</span><span class="NAME">sComputer</span><span class="PUNC">,</span><span class="NAME">type</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>508</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">r</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>509</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>510</span>
<span class='line'>511</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">m</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="COMM">// method</span><span class="WHIT">
<span class='line'>512</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">type</span><span class="PUNC">&&</span><span class="PUNC">!</span><span class="PUNC">(</span><span class="NAME">type</span><span class="PUNC">=</span><span class="NAME">this.getValueType</span><span class="PUNC">(</span><span class="NAME">path</span><span class="PUNC">,</span><span class="NAME">sComputer</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">||</span><span class="PUNC">!</span><span class="PUNC">(</span><span class="NAME">m</span><span class="PUNC">=</span><span class="NAME">this.useMethod</span><span class="PUNC">[</span><span class="NAME">type</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="KEYW">return</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>513</span>
<span class='line'>514</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">oOutParam</span><span class="PUNC">=</span><span class="NAME">this.runMethod</span><span class="PUNC">(</span><span class="STRN">'Get'</span><span class="PUNC">+</span><span class="NAME">m</span><span class="PUNC">+</span><span class="STRN">'Value'</span><span class="PUNC">,</span><span class="PUNC">{</span><span class="NAME">hDefKey</span><span class="PUNC">:</span><span class="NAME">path</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="NAME">sSubKeyName</span><span class="PUNC">:</span><span class="NAME">path</span><span class="PUNC">[</span><span class="NUMB">1</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="NAME">sValueName</span><span class="PUNC">:</span><span class="NAME">path</span><span class="PUNC">[</span><span class="NUMB">2</span><span class="PUNC">]</span><span class="PUNC">}</span><span class="PUNC">,</span><span class="NAME">sComputer</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>515</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">oOutParam</span><span class="PUNC">)</span><span class="KEYW">return</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>516</span> </span><span class="WHIT"> </span><span class="COMM">//if(oOutParam.returnValue)return oOutParam.returnValue;</span><span class="WHIT">
<span class='line'>517</span>
<span class='line'>518</span> </span><span class="WHIT"> </span><span class="COMM">// different method return different value name</span><span class="WHIT">
<span class='line'>519</span> </span><span class="WHIT"> </span><span class="NAME">oOutParam</span><span class="PUNC">=</span><span class="NAME">oOutParam</span><span class="PUNC">[</span><span class="NAME">this.useValueName</span><span class="PUNC">[</span><span class="NAME">type</span><span class="PUNC">]</span><span class="PUNC">+</span><span class="STRN">'Value'</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>520</span> </span><span class="WHIT"> </span><span class="COMM">// some methods return VB Array</span><span class="WHIT">
<span class='line'>521</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">this.useArray</span><span class="PUNC">[</span><span class="NAME">type</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="NAME">oOutParam</span><span class="PUNC">=</span><span class="NAME">VBA</span><span class="PUNC">(</span><span class="NAME">oOutParam</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>522</span>
<span class='line'>523</span> </span><span class="WHIT"> </span><span class="COMM">//if(!oOutParam)return;</span><span class="WHIT">
<span class='line'>524</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">type</span><span class="PUNC">==</span><span class="NUMB">7</span><span class="COMM">/*REG_MULTI_SZ*/</span><span class="PUNC">)</span><span class="NAME">oOutParam</span><span class="PUNC">=</span><span class="NAME">oOutParam.toArray</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>525</span> </span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">type</span><span class="PUNC">==</span><span class="NUMB">3</span><span class="COMM">/*REG_BINARY*/</span><span class="PUNC">)</span><span class="NAME">oOutParam</span><span class="PUNC">=</span><span class="NAME">fromCharCode</span><span class="PUNC">(</span><span class="NAME">oOutParam.toArray</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>526</span> </span><span class="WHIT"> </span><span class="COMM">//alert(oMethod.Name+'\n'+'('+type+')'+name+'\n'+oOutParam);</span><span class="WHIT">
<span class='line'>527</span> </span><span class="WHIT"> </span><span class="COMM">//if(type==3)alert(typeof oOutParam);</span><span class="WHIT">
<span class='line'>528</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">oOutParam</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>529</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>530</span> </span><span class="NAME">registry_function.prototype.getValue</span><span class="PUNC">=</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">name</span><span class="PUNC">,</span><span class="COMM">/*int || undefined */</span><span class="NAME">type</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>531</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">,</span><span class="NAME">v</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>532</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="WHIT"> </span><span class="NAME">name</span><span class="PUNC">==</span><span class="STRN">'string'</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>533</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">this.getSubkeyName</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">[</span><span class="NAME">name</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>534</span> </span><span class="WHIT"> </span><span class="NAME">v</span><span class="PUNC">=</span><span class="NAME">registry_function.getValue</span><span class="PUNC">(</span><span class="PUNC">[</span><span class="NAME">this.base</span><span class="PUNC">,</span><span class="NAME">this.path</span><span class="PUNC">+</span><span class="STRN">'\\'</span><span class="PUNC">+</span><span class="NAME">name</span><span class="PUNC">,</span><span class="STRN">''</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="NAME">this.computer</span><span class="PUNC">,</span><span class="NUMB">1</span><span class="COMM">/* 取得預設值: REG_SZ */</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>535</span> </span><span class="WHIT"> </span><span class="KEYW">else</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>536</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">name</span><span class="WHIT"> </span><span class="KEYW">in</span><span class="WHIT"> </span><span class="NAME">this.value</span><span class="PUNC">)</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.value</span><span class="PUNC">[</span><span class="NAME">name</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="COMM">//if(m=this.value[name])return m;</span><span class="WHIT">
<span class='line'>537</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">type</span><span class="PUNC">)</span><span class="NAME">type</span><span class="PUNC">=</span><span class="NAME">this.getValueType</span><span class="PUNC">(</span><span class="NAME">name</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="COMM">// bug: 假如在之前已經更新過,可能得到錯誤的 type </span><span class="WHIT">
<span class='line'>538</span> </span><span class="WHIT"> </span><span class="NAME">v</span><span class="PUNC">=</span><span class="NAME">registry_function.getValue</span><span class="PUNC">(</span><span class="NAME">this.separatePath</span><span class="PUNC">(</span><span class="NAME">name</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="NAME">this.computer</span><span class="PUNC">,</span><span class="NAME">type</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>539</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>540</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="WHIT"> </span><span class="NAME">v</span><span class="PUNC">!=</span><span class="STRN">'undefined'</span><span class="PUNC">)</span><span class="NAME">this.value</span><span class="PUNC">[</span><span class="NAME">name</span><span class="PUNC">]</span><span class="PUNC">=</span><span class="NAME">v</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>541</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">v</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>542</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>543</span>
<span class='line'>544</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">this.gotAllValue</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>545</span> </span><span class="WHIT"> </span><span class="COMM">// get all</span><span class="WHIT">
<span class='line'>546</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="PUNC">(</span><span class="NAME">i</span><span class="WHIT"> </span><span class="KEYW">in</span><span class="WHIT"> </span><span class="NAME">this.type</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>547</span> </span><span class="WHIT"> </span><span class="COMM">//{v=registry_function.getValue(this.separatePath(i),this.computer,this.type[i]);if(typeof v!='undefined')this.value[i]=v;}</span><span class="WHIT">
<span class='line'>548</span> </span><span class="WHIT"> </span><span class="NAME">this.value</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">=</span><span class="NAME">registry_function.getValue</span><span class="PUNC">(</span><span class="NAME">this.separatePath</span><span class="PUNC">(</span><span class="NAME">i</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="NAME">this.computer</span><span class="PUNC">,</span><span class="NAME">this.getValueType</span><span class="PUNC">(</span><span class="NAME">i</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>549</span> </span><span class="WHIT"> </span><span class="NAME">this.gotAllValue</span><span class="PUNC">=</span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>550</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>551</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.value</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="COMM">// 應先copy</span><span class="WHIT">
<span class='line'>552</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>553</span>
<span class='line'>554</span>
<span class='line'>555</span> </span><span class="COMM">/* 僅設定 Value 硬將小數設成REG_DWORD會四捨五入
<span class='line'>556</span> TODO:
<span class='line'>557</span> set default value:
<span class='line'>558</span> setValue('@',object)
<span class='line'>559</span> */</span><span class="WHIT">
<span class='line'>560</span> </span><span class="NAME">registry_function.setValue</span><span class="PUNC">=</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">path</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">value</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="COMM">/*int || undefined */</span><span class="NAME">type</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">sComputer</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">isValue</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>561</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="PUNC">!</span><span class="PUNC">(</span><span class="NAME">path</span><span class="PUNC">=</span><span class="NAME">this.separatePath</span><span class="PUNC">(</span><span class="NAME">path</span><span class="PUNC">,</span><span class="NAME">sComputer</span><span class="PUNC">,</span><span class="NAME">isValue</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NUMB">5</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>562</span>
<span class='line'>563</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="WHIT"> </span><span class="NAME">value</span><span class="PUNC">==</span><span class="STRN">'undefined'</span><span class="PUNC">)</span><span class="KEYW">return</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="COMM">// want to delete?</span><span class="WHIT">
<span class='line'>564</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">type</span><span class="PUNC">||</span><span class="NAME">isNaN</span><span class="PUNC">(</span><span class="NAME">type</span><span class="PUNC">)</span><span class="PUNC">&&</span><span class="NAME">isNaN</span><span class="PUNC">(</span><span class="NAME">type</span><span class="PUNC">=</span><span class="NAME">this.getTypeValue</span><span class="PUNC">(</span><span class="NAME">type</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="COMM">// 自動判別</span><span class="WHIT">
<span class='line'>565</span> </span><span class="WHIT"> </span><span class="NAME">type</span><span class="PUNC">=</span><span class="PUNC">!</span><span class="NAME">isNaN</span><span class="PUNC">(</span><span class="NAME">value</span><span class="PUNC">)</span><span class="PUNC">?</span><span class="NAME">value</span><span class="PUNC">%</span><span class="NUMB">1</span><span class="PUNC">?</span><span class="NUMB">1</span><span class="COMM">/*REG_SZ*/</span><span class="PUNC">:</span><span class="NUMB">4</span><span class="COMM">/*REG_DWORD*/</span><span class="WHIT"> </span><span class="COMM">// DWORD:4bytes, or QWORD</span><span class="WHIT">
<span class='line'>566</span> </span><span class="WHIT"> </span><span class="PUNC">:</span><span class="KEYW">typeof</span><span class="WHIT"> </span><span class="NAME">value</span><span class="PUNC">==</span><span class="STRN">'string'</span><span class="PUNC">?</span><span class="WHIT">
<span class='line'>567</span> </span><span class="WHIT"> </span><span class="REGX">/^[\x0-\xff]$/</span><span class="PUNC">.</span><span class="NAME">test</span><span class="PUNC">(</span><span class="NAME">value</span><span class="PUNC">)</span><span class="PUNC">&&</span><span class="REGX">/[\x0\x80-\xff]/</span><span class="PUNC">.</span><span class="NAME">test</span><span class="PUNC">(</span><span class="NAME">value</span><span class="PUNC">)</span><span class="PUNC">?</span><span class="NUMB">3</span><span class="COMM">/*REG_BINARY*/</span><span class="WHIT">
<span class='line'>568</span> </span><span class="WHIT"> </span><span class="PUNC">:</span><span class="NAME">value.indexOf</span><span class="PUNC">(</span><span class="STRN">'\n'</span><span class="PUNC">)</span><span class="PUNC">!=</span><span class="PUNC">-</span><span class="NUMB">1</span><span class="PUNC">?</span><span class="NUMB">7</span><span class="COMM">/*REG_MULTI_SZ*/</span><span class="WHIT">
<span class='line'>569</span> </span><span class="WHIT"> </span><span class="PUNC">:</span><span class="NAME">value.indexOf</span><span class="PUNC">(</span><span class="STRN">'%'</span><span class="PUNC">)</span><span class="PUNC">==</span><span class="PUNC">-</span><span class="NUMB">1</span><span class="PUNC">?</span><span class="NUMB">1</span><span class="COMM">/*REG_SZ*/</span><span class="PUNC">:</span><span class="NUMB">2</span><span class="COMM">/*REG_EXPAND_SZ:"%windir%\\calc.exe"等*/</span><span class="WHIT">
<span class='line'>570</span> </span><span class="WHIT"> </span><span class="PUNC">:</span><span class="KEYW">typeof</span><span class="WHIT"> </span><span class="NAME">value</span><span class="PUNC">==</span><span class="STRN">'object'</span><span class="PUNC">?</span><span class="NUMB">3</span><span class="COMM">/*REG_BINARY*/</span><span class="PUNC">:</span><span class="NUMB">0</span><span class="COMM">/*REG_NONE*/</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="COMM">// may buggy</span><span class="WHIT">
<span class='line'>571</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">m</span><span class="PUNC">=</span><span class="NAME">this.useMethod</span><span class="PUNC">[</span><span class="NAME">type</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="NAME">o</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>572</span> </span><span class="WHIT"> </span><span class="COMM">//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]]));</span><span class="WHIT">
<span class='line'>573</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">m</span><span class="PUNC">)</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NUMB">6</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>574</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">this.setValue.cid</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">this.isExist</span><span class="PUNC">(</span><span class="PUNC">[</span><span class="NAME">path</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="NAME">path</span><span class="PUNC">[</span><span class="NUMB">1</span><span class="PUNC">]</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>575</span> </span><span class="WHIT"> </span><span class="COMM">//alert('registry_function.setValue: add Key:\n'+path[0]+'\n'+path[1]),</span><span class="WHIT">
<span class='line'>576</span> </span><span class="WHIT"> </span><span class="NAME">this.addKey</span><span class="PUNC">(</span><span class="NAME">path</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>577</span>
<span class='line'>578</span> </span><span class="WHIT"> </span><span class="NAME">o</span><span class="PUNC">=</span><span class="PUNC">{</span><span class="NAME">hDefKey</span><span class="PUNC">:</span><span class="NAME">path</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="NAME">sSubKeyName</span><span class="PUNC">:</span><span class="NAME">path</span><span class="PUNC">[</span><span class="NUMB">1</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="NAME">sValueName</span><span class="PUNC">:</span><span class="NAME">path</span><span class="PUNC">[</span><span class="NUMB">2</span><span class="PUNC">]</span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>579</span>
<span class='line'>580</span> </span><span class="WHIT"> </span><span class="COMM">// http://msdn.microsoft.com/en-us/library/aa393286(VS.85).aspx</span><span class="WHIT">
<span class='line'>581</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">type</span><span class="PUNC">==</span><span class="NUMB">3</span><span class="COMM">/*REG_BINARY*/</span><span class="PUNC">&&</span><span class="KEYW">typeof</span><span class="WHIT"> </span><span class="NAME">value</span><span class="PUNC">==</span><span class="STRN">'string'</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>582</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">=</span><span class="NUMB">0</span><span class="PUNC">,</span><span class="NAME">v</span><span class="PUNC">=</span><span class="NAME">value</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>583</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="PUNC">(</span><span class="NAME">value</span><span class="PUNC">=</span><span class="PUNC">[</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="NAME">i</span><span class="PUNC">&lt;</span><span class="NAME">v.length</span><span class="PUNC">;</span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="NAME">value.push</span><span class="PUNC">(</span><span class="NAME">v.charCodeAt</span><span class="PUNC">(</span><span class="NAME">i</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="COMM">//value.push(''+v.charCodeAt(i));</span><span class="WHIT">
<span class='line'>584</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>585</span> </span><span class="WHIT"> </span><span class="COMM">// some methods need VB Array</span><span class="WHIT">
<span class='line'>586</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">this.useArray</span><span class="PUNC">[</span><span class="NAME">type</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="NAME">value</span><span class="PUNC">=</span><span class="NAME">JSArrayToSafeArray</span><span class="PUNC">(</span><span class="NAME">value</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>587</span> </span><span class="WHIT"> </span><span class="COMM">// different method has different value name</span><span class="WHIT">
<span class='line'>588</span> </span><span class="WHIT"> </span><span class="NAME">o</span><span class="PUNC">[</span><span class="NAME">this.useValueName</span><span class="PUNC">[</span><span class="NAME">type</span><span class="PUNC">]</span><span class="PUNC">+</span><span class="STRN">'Value'</span><span class="PUNC">]</span><span class="PUNC">=</span><span class="NAME">value</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>589</span>
<span class='line'>590</span> </span><span class="WHIT"> </span><span class="NAME">m</span><span class="PUNC">=</span><span class="NAME">this.runMethod</span><span class="PUNC">(</span><span class="STRN">'Set'</span><span class="PUNC">+</span><span class="NAME">m</span><span class="PUNC">+</span><span class="STRN">'Value'</span><span class="PUNC">,</span><span class="NAME">o</span><span class="PUNC">,</span><span class="NAME">sComputer</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>591</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">m</span><span class="WHIT"> </span><span class="KEYW">instanceof</span><span class="WHIT"> </span><span class="NAME">Error</span><span class="PUNC">?</span><span class="NAME">m</span><span class="PUNC">:</span><span class="NAME">m.returnValue</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>592</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>593</span> </span><span class="COMM">// Create intermediate directories as required.</span><span class="WHIT">
<span class='line'>594</span> </span><span class="COMM">// 設為true記得setValue後馬上改回來否則可能出現自動加subkey的情形。</span><span class="WHIT">
<span class='line'>595</span> </span><span class="COMM">//registry_function.setValue.cid=0;</span><span class="WHIT">
<span class='line'>596</span> </span><span class="NAME">registry_function.prototype.setValue</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">name</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">value</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="COMM">/*int || undefined */</span><span class="NAME">type</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>597</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">registry_function.setValue</span><span class="PUNC">(</span><span class="NAME">this.separatePath</span><span class="PUNC">(</span><span class="NAME">name</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">value</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>598</span> </span><span class="WHIT"> </span><span class="NAME">type</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.computer</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>599</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>600</span>
<span class='line'>601</span>
<span class='line'>602</span> </span><span class="COMM">/*
<span class='line'>603</span> 只能刪除葉結點項,連同該子項下的所有值均被刪除(如果不存在子項,或該項下還有子項則不能刪除則無效果)
<span class='line'>604</span> */</span><span class="WHIT">
<span class='line'>605</span> </span><span class="NAME">registry_function.deleteKey</span><span class="PUNC">=</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">path</span><span class="PUNC">,</span><span class="NAME">sComputer</span><span class="PUNC">,</span><span class="NAME">flag</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>606</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="PUNC">!</span><span class="PUNC">(</span><span class="NAME">path</span><span class="PUNC">=</span><span class="NAME">this.separatePath</span><span class="PUNC">(</span><span class="NAME">path</span><span class="PUNC">,</span><span class="NAME">sComputer</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>607</span> </span><span class="WHIT"> </span><span class="PUNC">||</span><span class="NAME">path</span><span class="PUNC">[</span><span class="NUMB">2</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="COMM">// 不接受值</span><span class="WHIT">
<span class='line'>608</span> </span><span class="WHIT"> </span><span class="PUNC">)</span><span class="KEYW">return</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>609</span>
<span class='line'>610</span> </span><span class="WHIT"> </span><span class="NAME">flag</span><span class="PUNC">=</span><span class="NAME">flag</span><span class="PUNC">||</span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>611</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">flag</span><span class="PUNC">&</span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>612</span> </span><span class="WHIT"> </span><span class="COMM">// recursive</span><span class="WHIT">
<span class='line'>613</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">,</span><span class="NAME">k</span><span class="PUNC">=</span><span class="NAME">this.getSubkeyName</span><span class="PUNC">(</span><span class="NAME">path</span><span class="PUNC">,</span><span class="NAME">sComputer</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>614</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="PUNC">(</span><span class="NAME">i</span><span class="WHIT"> </span><span class="KEYW">in</span><span class="WHIT"> </span><span class="NAME">k</span><span class="PUNC">)</span><span class="NAME">this.deleteKey</span><span class="PUNC">(</span><span class="PUNC">[</span><span class="NAME">path</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="NAME">path</span><span class="PUNC">[</span><span class="NUMB">1</span><span class="PUNC">]</span><span class="PUNC">+</span><span class="NAME">k</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="NAME">sComputer</span><span class="PUNC">,</span><span class="NAME">flag</span><span class="PUNC">-</span><span class="PUNC">(</span><span class="NAME">flag</span><span class="PUNC">&</span><span class="NUMB">2</span><span class="PUNC">)</span><span class="COMM">/* 不連上層empty者一起刪除 */</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>615</span> </span><span class="WHIT"> </span><span class="NAME">flag</span><span class="PUNC">-</span><span class="PUNC">=</span><span class="NUMB">1</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>616</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>617</span>
<span class='line'>618</span> </span><span class="WHIT"> </span><span class="COMM">// do deleteKey</span><span class="WHIT">
<span class='line'>619</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">r</span><span class="PUNC">=</span><span class="NAME">this.runMethod</span><span class="PUNC">(</span><span class="STRN">'DeleteKey'</span><span class="PUNC">,</span><span class="PUNC">{</span><span class="NAME">hDefKey</span><span class="PUNC">:</span><span class="NAME">path</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="NAME">sSubKeyName</span><span class="PUNC">:</span><span class="NAME">path</span><span class="PUNC">[</span><span class="NUMB">1</span><span class="PUNC">]</span><span class="PUNC">}</span><span class="PUNC">,</span><span class="NAME">sComputer</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>620</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="PUNC">!</span><span class="PUNC">(</span><span class="NAME">flag</span><span class="PUNC">&</span><span class="NUMB">2</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">r</span><span class="WHIT"> </span><span class="KEYW">instanceof</span><span class="WHIT"> </span><span class="NAME">Error</span><span class="PUNC">?</span><span class="NAME">r</span><span class="PUNC">:</span><span class="NAME">r.returnValue</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>621</span>
<span class='line'>622</span> </span><span class="WHIT"> </span><span class="COMM">// 連上層empty者一起刪除</span><span class="WHIT">
<span class='line'>623</span> </span><span class="WHIT"> </span><span class="NAME">flag</span><span class="PUNC">-</span><span class="PUNC">=</span><span class="PUNC">(</span><span class="NAME">flag</span><span class="PUNC">&</span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">+</span><span class="PUNC">(</span><span class="NAME">flag</span><span class="PUNC">&</span><span class="NUMB">2</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>624</span> </span><span class="WHIT"> </span><span class="KEYW">while</span><span class="PUNC">(</span><span class="PUNC">!</span><span class="PUNC">(</span><span class="NAME">r</span><span class="WHIT"> </span><span class="KEYW">instanceof</span><span class="WHIT"> </span><span class="NAME">Error</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">r</span><span class="PUNC">=</span><span class="NAME">path</span><span class="PUNC">[</span><span class="NUMB">1</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">match</span><span class="PUNC">(</span><span class="REGX">/^(.+)[^\\]+\\$/</span><span class="PUNC">,</span><span class="STRN">''</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>625</span> </span><span class="WHIT"> </span><span class="NAME">path</span><span class="PUNC">[</span><span class="NUMB">1</span><span class="PUNC">]</span><span class="PUNC">=</span><span class="NAME">r</span><span class="PUNC">[</span><span class="NUMB">1</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>626</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">this.getSubkeyName</span><span class="PUNC">(</span><span class="NAME">path</span><span class="PUNC">,</span><span class="NAME">sComputer</span><span class="PUNC">)</span><span class="PUNC">||</span><span class="NAME">this.getValueType</span><span class="PUNC">(</span><span class="NAME">path</span><span class="PUNC">,</span><span class="NAME">sComputer</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>627</span> </span><span class="WHIT"> </span><span class="NAME">r</span><span class="PUNC">=</span><span class="NAME">this.deleteKey</span><span class="PUNC">(</span><span class="NAME">path</span><span class="PUNC">,</span><span class="NAME">sComputer</span><span class="PUNC">,</span><span class="NAME">flag</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>628</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>629</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">path</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>630</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>631</span> </span><span class="NAME">registry_function.prototype.deleteKey</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">name</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">flag</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>632</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">p</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">registry_function.deleteKey</span><span class="PUNC">(</span><span class="NAME">this.separatePath</span><span class="PUNC">(</span><span class="NAME">name</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>633</span> </span><span class="WHIT"> </span><span class="NAME">this.sComputer</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">flag</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>634</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="WHIT"> </span><span class="NAME">p</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="STRN">'object'</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">this.path</span><span class="WHIT"> </span><span class="PUNC">!==</span><span class="WHIT"> </span><span class="NAME">p</span><span class="PUNC">[</span><span class="NUMB">1</span><span class="PUNC">]</span><span class="WHIT">
<span class='line'>635</span> </span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">this.path.indexOf</span><span class="PUNC">(</span><span class="NAME">p</span><span class="PUNC">[</span><span class="NUMB">1</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>636</span> </span><span class="WHIT"> </span><span class="COMM">// 若 p[1] 比較短,表示連本 object 都被刪了。reset</span><span class="WHIT">
<span class='line'>637</span> </span><span class="WHIT"> </span><span class="NAME">this.reset</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>638</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">p</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>639</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>640</span>
<span class='line'>641</span>
<span class='line'>642</span> </span><span class="COMM">// return 0: success, others: failed</span><span class="WHIT">
<span class='line'>643</span> </span><span class="NAME">registry_function.deleteValue</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">path</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">sComputer</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>644</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="PUNC">(</span><span class="NAME">path</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.separatePath</span><span class="PUNC">(</span><span class="NAME">path</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">sComputer</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">path</span><span class="PUNC">[</span><span class="NUMB">2</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="COMM">// 不接受key</span><span class="WHIT">
<span class='line'>645</span> </span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>646</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>647</span>
<span class='line'>648</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">r</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.runMethod</span><span class="PUNC">(</span><span class="STRN">'DeleteValue'</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>649</span> </span><span class="WHIT"> </span><span class="NAME">hDefKey</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">path</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>650</span> </span><span class="WHIT"> </span><span class="NAME">sSubKeyName</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">path</span><span class="PUNC">[</span><span class="NUMB">1</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>651</span> </span><span class="WHIT"> </span><span class="NAME">sValueName</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">path</span><span class="PUNC">[</span><span class="NUMB">2</span><span class="PUNC">]</span><span class="WHIT">
<span class='line'>652</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">sComputer</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>653</span>
<span class='line'>654</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">r</span><span class="WHIT"> </span><span class="KEYW">instanceof</span><span class="WHIT"> </span><span class="NAME">Error</span><span class="WHIT"> </span><span class="PUNC">?</span><span class="WHIT"> </span><span class="NAME">r</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">r.returnValue</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>655</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>656</span> </span><span class="NAME">registry_function.prototype.deleteValue</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">name</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>657</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">registry_function.deleteValue</span><span class="PUNC">(</span><span class="NAME">this.separatePath</span><span class="PUNC">(</span><span class="NAME">name</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>658</span> </span><span class="WHIT"> </span><span class="NAME">this.computer</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>659</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>660</span>
<span class='line'>661</span> </span><span class="COMM">// input key or value, 自動判別</span><span class="WHIT">
<span class='line'>662</span> </span><span class="NAME">registry_function.deletePath</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">path</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">sComputer</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>663</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">path</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.separatePath</span><span class="PUNC">(</span><span class="NAME">path</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">sComputer</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>664</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">path</span><span class="PUNC">[</span><span class="NUMB">2</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">?</span><span class="WHIT"> </span><span class="NAME">this.deleteValue</span><span class="PUNC">(</span><span class="NAME">path</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">sComputer</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">this</span><span class="WHIT">
<span class='line'>665</span> </span><span class="WHIT"> </span><span class="PUNC">.</span><span class="NAME">deleteKey</span><span class="PUNC">(</span><span class="NAME">path</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">sComputer</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>666</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>667</span>
<span class='line'>668</span>
<span class='line'>669</span> </span><span class="COMM">// 僅設定 Key add Subkey 創建註冊表項,可以一次創建完整的項子樹(各級不存在也會被創建)</span><span class="WHIT">
<span class='line'>670</span> </span><span class="NAME">registry_function.addKey</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">path</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">oValue</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">flag</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">sComputer</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="COMM">// flag:add/overwrite/reset(TODO)</span><span class="WHIT">
<span class='line'>671</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="PUNC">(</span><span class="NAME">path</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.separatePath</span><span class="PUNC">(</span><span class="NAME">path</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">sComputer</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>672</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>673</span>
<span class='line'>674</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">r</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.runMethod</span><span class="PUNC">(</span><span class="STRN">'CreateKey'</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>675</span> </span><span class="WHIT"> </span><span class="NAME">hDefKey</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">path</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>676</span> </span><span class="WHIT"> </span><span class="NAME">sSubKeyName</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">path</span><span class="PUNC">[</span><span class="NUMB">1</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">path</span><span class="PUNC">[</span><span class="NUMB">1</span><span class="PUNC">]</span><span class="COMM">/* +(path[2]||'') */</span><span class="WHIT">
<span class='line'>677</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">sComputer</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">returnValue</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>678</span>
<span class='line'>679</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="WHIT"> </span><span class="NAME">oValue</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">'object'</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>680</span> </span><span class="WHIT"> </span><span class="NAME">r</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>681</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">i</span><span class="WHIT"> </span><span class="KEYW">in</span><span class="WHIT"> </span><span class="NAME">oValue</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>682</span> </span><span class="WHIT"> </span><span class="NAME">path</span><span class="PUNC">[</span><span class="NUMB">2</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">r</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.setValue</span><span class="PUNC">(</span><span class="NAME">path</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">oValue</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>683</span> </span><span class="WHIT"> </span><span class="NAME">sComputer</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>684</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>685</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">r</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>686</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>687</span> </span><span class="NAME">registry_function.prototype.addKey</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">name</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">oValue</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">flag</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="COMM">// flag:add/overwrite/reset(TODO)</span><span class="WHIT">
<span class='line'>688</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">registry_function.addKey</span><span class="PUNC">(</span><span class="NAME">this.separatePath</span><span class="PUNC">(</span><span class="NAME">name</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">oValue</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>689</span> </span><span class="WHIT"> </span><span class="NAME">flag</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.computer</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>690</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>691</span>
<span class='line'>692</span>
<span class='line'>693</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>694</span> </span><span class="WHIT"> </span><span class="NAME">CeL.no_initialization</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>695</span>
<span class='line'>696</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">r</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">registry_function</span><span class="PUNC">(</span><span class="STRN">'HKCU\\Software\\Colorless echo\\regTest\\test3\\'</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>697</span> </span><span class="WHIT"> </span><span class="COMM">// alert((r.getValue())['test1']);</span><span class="WHIT">
<span class='line'>698</span> </span><span class="WHIT"> </span><span class="NAME">r.setValue</span><span class="PUNC">(</span><span class="STRN">'test3'</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">34452</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>699</span> </span><span class="WHIT"> </span><span class="NAME">r.setValue</span><span class="PUNC">(</span><span class="STRN">'test4'</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">34452.53</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>700</span> </span><span class="WHIT"> </span><span class="NAME">r.setValue</span><span class="PUNC">(</span><span class="STRN">'test5'</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>701</span> </span><span class="WHIT"> </span><span class="NAME">ghjk</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">'hghj'</span><span class="WHIT">
<span class='line'>702</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>703</span> </span><span class="WHIT"> </span><span class="NAME">alert</span><span class="PUNC">(</span><span class="NAME">r.getPath</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">'\nAccess: '</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">r.checkAccess</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">'\n\n'</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">r.getValue</span><span class="PUNC">(</span><span class="STRN">'test4'</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>704</span> </span><span class="WHIT"> </span><span class="NAME">r.deleteValue</span><span class="PUNC">(</span><span class="STRN">'test3'</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>705</span> </span><span class="WHIT"> </span><span class="NAME">r.deleteValue</span><span class="PUNC">(</span><span class="STRN">'test4'</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>706</span> </span><span class="WHIT"> </span><span class="NAME">r.addKey</span><span class="PUNC">(</span><span class="STRN">'test\\test1'</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>707</span> </span><span class="WHIT"> </span><span class="NAME">alert</span><span class="PUNC">(</span><span class="NAME">r.addKey</span><span class="PUNC">(</span><span class="STRN">'test1\\test1'</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>708</span> </span><span class="WHIT"> </span><span class="NAME">r.deleteKey</span><span class="PUNC">(</span><span class="STRN">'test\\test1'</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>709</span> </span><span class="WHIT"> </span><span class="NAME">r.deleteKey</span><span class="PUNC">(</span><span class="STRN">'test1\\test1'</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>710</span>
<span class='line'>711</span> </span><span class="WHIT"> </span><span class="COMM">/*
<span class='line'>712</span> oRegistryF.setValue(name,value,type);
<span class='line'>713</span> oRegistryF.getValue();
<span class='line'>714</span> oRegistryF.getValue(name);
<span class='line'>715</span> oRegistryF.getValueType(name);
<span class='line'>716</span> oRegistryF.deleteValue(name);
<span class='line'>717</span> oRegistryF.deleteKey(name);
<span class='line'>718</span> oRegistryF.addKey(name);
<span class='line'>719</span> oRegistryF.addKey(name,oValue,flag:add/overwrite/reset);
<span class='line'>720</span> */</span><span class="WHIT">
<span class='line'>721</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>722</span>
<span class='line'>723</span> </span><span class="COMM">// include library</span><span class="WHIT">
<span class='line'>724</span> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="NAME">_iL</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>725</span> </span><span class="WHIT"> </span><span class="COMM">// if(typeof WshShell!='object')WshShell=new ActiveXObject("WScript.Shell");</span><span class="WHIT">
<span class='line'>726</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>727</span> </span><span class="COMM">//or: isHTA</span><span class="WHIT">
<span class='line'>728</span> </span><span class="NAME">_iL.p</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">library_namespace.env.registry_path_key_name</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>729</span> </span><span class="NAME">_iL.for_include</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">'try{var o;try{o=new ActiveXObject("Microsoft.XMLHTTP")}catch(e){o=new XMLHttpRequest()}o.open("GET",(new ActiveXObject("WScript.Shell")).RegRead("'</span><span class="WHIT">
<span class='line'>730</span> </span><span class="WHIT"> </span><span class="COMM">// TODO: 以更精確的方法處理。</span><span class="WHIT">
<span class='line'>731</span> </span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">_iL.p.replace</span><span class="PUNC">(</span><span class="REGX">/\\/</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">'\\\\'</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>732</span> </span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">'"),false);o.send(null);eval(o.responseText)}catch(e){}'</span><span class="PUNC">;</span><span class="COMM">// WScript.Echo(e.message);</span><span class="WHIT">
<span class='line'>733</span>
<span class='line'>734</span> </span><span class="COMM">//CeL.extend({registry_function:registry_function,_iL:_iL});</span><span class="WHIT">
<span class='line'>735</span> </span><span class="NAME">CeL.extend</span><span class="PUNC">(</span><span class="PUNC">{</span><span class="NAME">reg</span><span class="PUNC">:</span><span class="NAME">registry_function</span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>736</span>
<span class='line'>737</span>
<span class='line'>738</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT">
<span class='line'>739</span> </span><span class="WHIT"> </span><span class="NAME">CeL.OS.Windows.registry</span><span class="WHIT">
<span class='line'>740</span> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>741</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>742</span>
<span class='line'>743</span> </span><span class="COMM">//===================================================</span><span class="WHIT">
<span class='line'>744</span>
<span class='line'>745</span> </span><span class="NAME">CeL.setup_module</span><span class="PUNC">(</span><span class="NAME">module_name</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">code_for_including</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>746</span>
<span class='line'>747</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>748</span> </span></pre></body></html>