2017年4月12日水曜日

miniライブラリ用オブジェクト

自分用のライブラリとして作成しているものの現在の内容を公開します。
項目をディレクトリ構造にするかグループ分けできるようにすることを検討中です。


objMethod = {
"getsETN" : "getsETN=function(elem,name){return elem.getElementsByTagName(name)}",
"getPID" : "getPID=function(){\r\n var f=function(){\r\n // 子プロセスをcscriptにすると黒い画面が一瞬表示されてしまう。\r\n // 「//B」オプションを付けないとwscriptの設定画面が表示されてしまう。\r\n var childPID = (new ActiveXObject('WScript.Shell')).Exec('wscript //B').ProcessID\r\n \r\n // 子の親(自身)のPIDを特定する\r\n var res = new Enumerator(GetObject(\"winmgmts:root\\\\CIMV2\").ExecQuery(\"SELECT * FROM Win32_Process where ProcessID=\"+childPID))\r\n return res.atEnd() ? (void 0) : res.item().ParentProcessID\r\n }\r\n // 1度目で取得に成功すればその値を返し、ダメなら2回目の処理を実行する。\r\n return f() || f()\r\n}\r\n",
"getTime" : "getTime=function(d){return (d || (new Date())).getTime()}\r\n",
"getById" : "getsETN=function(id){return elem.getElementById(name)}",
"短縮(short word)" : "iT='innerText', iH='innerHTML', PA='parentNode', FI='firstChild', CN='childNodes', NE='nextSibling', PR='previousSibling', sI='selectedIndex', iB='insertBefore', OP='options', LEN='length'",
"hta" : "<html>\r\n<head>\r\n <title></title>\r\n <style type=\"text/css\">\r\n .max{width:100%;height:100%}\r\n .w-max{width:100%}\r\n .nowrap{white-space:nowrap}\r\n .ta-c{text-align:center}\r\n .bc{border-collapse:collapse}\r\n .of-auto{overflow:auto}\r\n .of-hidden{overflow:hidden}\r\n .border1{border:solid 1px #000}\r\n </style>\r\n</head>\r\n<body>\r\n</body>\r\n<script>\r\n resizeTo(300,300)\r\n window.attachEvent('onload',function(){\r\n })\r\n</script>\r\n</html>\r\n",
"wsh" : "<job>\r\n<script>\r\n main = function(){\r\n // 汎用関数などの読み込みまで完了したらこの関数が呼ばれる。\r\n // この関数の終了=このスクリプトファイルの終了\r\n WScript.Echo(WScript.Arguments.length)\r\n }\r\n AXO=function(name){return new ActiveXOBject('Scripting.FileSystemObject')}\r\n main()\r\n</script>\r\n</job>\r\n",
"css" : "<style type=\"text/css\">\r\n .max{width:100%;height:100%}\r\n .w-max{width:100%}\r\n .nowrap{white-space:nowrap}\r\n .ta-c{text-align:center}\r\n .bc{border-collapse:collapse}\r\n .of-auto{overflow:auto}\r\n .of-hidden{overflow:hidden}\r\n .border1{border:solid 1px #000}\r\n</style>\r\n<link rel=\"stylesheet\" type=\"text/css\" href=\"xxx.css\">\r\n",
"基準フォルダ" : "基準フォルダ = function(){\r\n var path\r\n try{\r\n // HTA, HTMLの場合\r\n path = location.href\r\n }\r\n catch(e){\r\n // WSHの場合\r\n path = WScript.ScriptFullName\r\n }\r\n \r\n return decodeURI(path).replace(/^file:|[\\\\\\/][^\\\\\\/]+$/g,'').replace(/^\\/+([A-Z]:)/i,'$1'))\r\n}()\r\n\r\n↓短縮\r\n\r\n基準フォルダ = function(path){\r\n try{path = location.href}catch(e){path = WScript.ScriptFullName}\r\n return decodeURI(path).replace(/^file:|[\\\\\\/][^\\\\\\/]+$/g,'').replace(/^\\/+([A-Z]:)/i,'$1')\r\n}()\r\n",
"tab入力" : "タブスペース入力可にする=function(elem){\r\n elem.onkeydown=function(){\r\n if(elem.style.imeMode!='active' && event.keyCode!=9){return}\r\n event.cancelBubble = true\r\n var r=document.selection.createRange(), str=r.text\r\n if(event.shiftKey){\r\n if(str){\r\n r.text = str.replace(/\\n\\t|\\n {1,4}/g,'\\n').replace(/^\\t|^ {1,4}/,'')\r\n }else{\r\n r.moveEnd('character',4)\r\n r.text = r.text ? r.text.replace(/\\t| +/,'') : ''\r\n }\r\n }else{\r\n r.text = str ? ('\\t'+str.replace(/\\n/g,'\\n\\t')) : '\\t'\r\n }\r\n return false\r\n }\r\n}",
"getChilds" : "getChilds=function(){\r\n var tagName2接頭辞={button:'btn', input:'inp', select:'sel', a:'lnk', iframe:'ifr', table:'tbl', textarea:'ta'}\r\n var inp接頭辞={checkbox:'chk', radio:'rad', text:'inp', number:'num'}\r\n var arr階層=[], arr階層_i=0\r\n var get名前=function(){\r\n var F=function(prop, v){return {prop:prop, v:v}}\r\n var E, objNames={value:1, title:1, innerText:1}, forIn用=function(name){ return E[name] ? F(name, E[name]) : 0 }\r\n return function(elem){\r\n E = elem\r\n var obj=forIn(objNames, forIn用)\r\n if(obj){return obj}\r\n if(E.src){return F('src', E.src.replace(/[\\\\\\/]([^\\\\\\/]+)$/)[1])}\r\n }\r\n }()\r\n var return用obj, objクリア対象外={btn:1}\r\n var for0L用=function(i, elem){\r\n var name=(elem.tagName || '').toLowerCase()\r\n if(!name){return}\r\n arr階層[arr階層_i] = true\r\n arr階層[++arr階層_i] = false\r\n fun再帰(elem[CN])\r\n arr階層_i--\r\n \r\n // 例えば「<button>開始</button>」なら「btn開始」のような名前で参照できるようにする。\r\n var 接頭辞 = ((name=='input' ? inp接頭辞[elem.type] : '') || tagName2接頭辞[name] || name)\r\n var 名前 = get名前(elem)\r\n \r\n // 名前があってもそれがiT由来で、かつ子要素を持つエレメントの場合は参照の対象外。\r\n if(!名前 || 名前.prop!=iT || !arr階層[arr階層+1]){return用obj[接頭辞 + (名前 ? 名前.v : '')] = elem}\r\n \r\n // 名前.vが「*」から始まる場合は「*」のみ削除する。それ以外の場合は名前.v=''とする。\r\n if(名前 && !objクリア対象外[接頭辞] && (名前.prop!=iT || !arr階層[arr階層_i+1])){ elem[名前.prop] = 名前.v.charAt(0)=='*' ? 名前.v.replace(/^\\*/,'') : '' }\r\n \r\n arr階層.pop()\r\n }\r\n var fun再帰=function(cn){ for0L(cn,for0L用) }\r\n var getKey=function(elem, topElem){\r\n // topElemからelemに辿りつくためのFI, NEの配列を調べて返す。\r\n var arr=[]\r\n while(elem!=topElem && (elem[PR] || (elem[PA] && elem[PA].tagName))){\r\n if(elem[PR]){\r\n arr.unshift(NE); elem=elem[PR]\r\n }else{\r\n arr.unshift(FI); elem=elem[PA]\r\n }\r\n }\r\n return arr\r\n }\r\n var getClone = function(){\r\n // elemとobjChildsの関係性を丸ごと複製したものを作成して返す。\r\n var objModel=this, elemClone=objModel.elem.cloneNode(true), objRet={elem:elemClone}\r\n forIn(objModel, function(name, elem){\r\n // 列挙されるプロパティのうち「elem」は無視する。functionは参照コピーする。\r\n if(name=='elem'){return}\r\n if(typeof(elem)=='function'){objRet[name]=objModel[name]; return}\r\n \r\n var elemC=elemClone\r\n for0L(getKey(elem, objModel.elem), function(i, str){ elemC=elemC[str] })\r\n objRet[name] = elemC\r\n })\r\n return objRet\r\n }\r\n var removeNode = function(targetName){\r\n // 指定されたnameに対応するエレメントをremoveNodeする。\r\n // そのエレメントとそのエレメントに含まれている要素への参照用プロパティをまとめてdeleteする。\r\n \r\n var obj=this, objRet={elem:obj[targetName].removeNode(true)}, arr不正=[]\r\n forIn(obj, function(name,elem){\r\n if(name==targetName){delete obj[name]; return}\r\n if(typeof(elem)=='function'){objRet[name]=obj[name]; return}\r\n \r\n while(elem[PR] || (elem[PA] && elem[PA].tagName)){\r\n if(elem==obj.elem){return}\r\n elem = elem[elem[PR] ? PR : PA]\r\n }\r\n if(elem!=objRet.elem){arr不正.push(name); return alert(elem.tagName)}\r\n \r\n // ここまで継続したnameは参照解除の対象(removeNodeするエレメントの子要素)\r\n objRet[name] = obj[name]\r\n delete obj[name]\r\n })\r\n if(arr不正[LEN]){alert('以下が不正な参照状態になっています。\\nエレメントの削除はgetChildsが返すobjectのremoveNodeメソッドを使用してください。\\n\\n'+arr不正.join('\\n'))}\r\n return objRet\r\n }\r\n return function(elem){\r\n return用obj={elem:elem, getClone:getClone, removeNode:removeNode}\r\n fun再帰(elem[CN])\r\n return return用obj\r\n }\r\n}()\r\n",
"for0L" : "for0L = function(arr,fun){for(var i=0,L=arr[LEN],res;i<L;i++){if(res=fun(i,arr[i])){return res}}}",
"forIn" : "forIn = function(obj,fun){var name,res; for(name in obj){if(res=fun(name, obj[name])){return res}}}",
"整数化" : "整数化=function(){\r\n var regDot=/\\.(\\d+)/, regE=/\\.(\\d+)e-(\\d+)/, arr, arrL, obj0\r\n var getObj=function(num){\r\n var str=num+'', 桁数=0\r\n while(1){\r\n if(str.match(regE )){ 桁数=RegExp.$2-(-3) ; str=str.replace(regE ,'$1'); break }\r\n if(str.match(regDot)){ 桁数=RegExp.$1.length; str=str.replace(regDot,'$1'); break }\r\n break\r\n }\r\n return {元:num, str:str, 桁数:arr[arrL++]=桁数}\r\n }\r\n return function(obj, func){\r\n arr = []\r\n arrL = 0\r\n obj0 = {}\r\n forIn(obj,function(name, v){ obj0[name] = getObj(v) })\r\n var max=Math.max.apply(null, arr), obj1={}\r\n forIn(obj0,function(name, v){\r\n obj1[name] = (v.str + Array(max-v.桁数+1).join(0)) - 0\r\n \r\n // 言語で扱える数字のサイズを超えてしまった場合は通知する。\r\n if(!isFinite(obj1[name])){ alert('整数化失敗\\nisFinite=false\\n'+obj[name]+'\\nstr:'+str) }\r\n \r\n // 万が一整数化に失敗した場合はどのような値で失敗したのか通知する。\r\n if(0<(''+obj1[name]).indexOf('.') && !(''+obj1[name]).match(/e\\+/)){ WScript.Echo('整数化失敗\\n'+obj1[name]+'\\nstr:'+v.str) }\r\n })\r\n return func(obj1) / (1+Array(max+1).join(0))\r\n }\r\n}()\r\n",
"傾き補正3D" : "傾き補正=function(arr2D){\r\n // 2次元配列内部の左上、右上、左下、右下のうち2箇所以上が0になるように配列全体の値を補正する。\r\n \r\n var lenX=arr2D[0][LEN]-1, lenY=arr2D[LEN]-1\r\n var get四つ角=function(arr){ return {LT:arr[0][0], RT:arr[0][lenX], LB:arr[lenY][0], RB:arr[lenY][lenX]} }\r\n var get補正係数=function(v00, v01, v10, v11, 軸max){\r\n var obj\r\n if(Math.abs(v00-v01) < Math.abs(v10-v11)){ obj={v0:v00, v1:v01} }else{ obj={v0:v10, v1:v11} }\r\n obj.rad=Math.atan2(整数化(obj, function(obj){return obj.v0-obj.v1}), 軸max)\r\n obj.min=Math.min(obj.v0,obj.v1)\r\n return obj\r\n }\r\n \r\n // X軸\r\n with(get四つ角(arr2D)){var obj係数=get補正係数(RT,LT,RB,LB,lenX), newArr0=[]}\r\n for0L(arr2D, function(Y, arrX){\r\n newArr0[Y] = []\r\n for0L(arrX, function(X, v){\r\n newArr0[Y][X] = 整数化({v:v, min:obj係数.min}, function(o){return o.v - o.min}) - X*Math.tan(obj係数.rad)\r\n })\r\n })\r\n \r\n // Y軸\r\n with(get四つ角(newArr0)){var obj係数=get補正係数(RT,RB,LT,LB,lenY), newArr1=[]}\r\n for0L(newArr0, function(Y){newArr1[Y] = []})\r\n for0L(newArr0[0], function(X){\r\n for0L(newArr0, function(Y){\r\n newArr1[Y][X] = 整数化({v:newArr0[Y][X], min:obj係数.min}, function(o){return o.v - o.min}) - Y*Math.tan(-obj係数.rad)\r\n })\r\n })\r\n \r\n // 最小値を0にする\r\n var arrMin=[]\r\n for0L(newArr1, function(Y,arrX){ arrMin[Y] = Math.min.apply(null,arrX) })\r\n var min=Math.min.apply(null, arrMin)\r\n for0L(newArr1,function(Y,arrX){\r\n for0L(arrX,function(X,v){\r\n arrX[X] = 整数化({min:min, v:v}, function(o){return o.v-o.min})\r\n })\r\n })\r\n \r\n return newArr1\r\n}\r\n",
"日時を省略表記" : "str2dat=function(){\r\n var 桁=function(num,桁数){var str0=num+'', str1=Array(桁数+1).join(0)+num; return (桁数 < str0.length) ? str0 : str1.slice(str1.length-桁数,str1.length)}\r\n var nd=function(){\r\n var toStr=function(フォーマット){\r\n // フォーマットは「YY/MM/DD hh:mm:ss」のような文字列\r\n var d=this.dat, obj={Y:d.getFullYear(), M:d.getMonth()+1, D:d.getDate(), h:d.getHours(), m:d.getMinutes(), s:d.getSeconds()}, chr, reg, res\r\n for(chr in obj){\r\n reg = new RegExp(chr+'+')\r\n res = フォーマット.match(reg)\r\n if(!res){continue}\r\n フォーマット = フォーマット.replace(reg, 桁(obj[chr], res[0].length))\r\n }\r\n return フォーマット\r\n }\r\n return function(d){\r\n return { dat:d || (new Date()), toStr:toStr }\r\n }\r\n }()\r\n var R=RegExp\r\n var rY=/^[^\\d]*(\\d{4})\\//, rMD=/(\\d{1,2})\\/(\\d{1,2})/, rHM=/(\\d{1,2}):(\\d{1,2})/, rYMD=/(\\d{4})\\/?(\\d{2})\\/?(\\d{2})/, rFull=/(\\d{4})\\/?(\\d{2})\\/?(\\d{2}) *(\\d{2}):?(\\d{2})/, rD2D2=/(\\d{2})(\\d{2})[^\\d]*?$/\r\n return function(str, datBA, swBefore){\r\n // datBA(Dateオブジェクト)は有っても無くてもOK\r\n // datBAを指定するとdatBAよりも(swBeforeがfalseなら後ろ、trueなら前)の日時を返す。\r\n var str0=str, obj={}, rC=function(){str0=R.rightContext}\r\n if(str0 && str0.match(rFull)){ obj={Y:R.$1, M:R.$2, D:R.$3, h:R.$4, m:R.$5}, str0='' }\r\n if(str0 && str0.match(rY)){ obj.Y=R.$1, rC() }\r\n if(str0 && str0.match(rMD)){ obj.M=R.$1, obj.D=R.$2, rC() }\r\n if(str0 && str0.match(rHM)){ obj.h=R.$1, obj.m=R.$2, rC() }\r\n if(str0 && str0.match(rYMD)){ obj.Y=R.$1, obj.M=R.$2, obj.D=R.$3, rC() }\r\n if(str0 && str0.match(rD2D2)){ obj.h=R.$1, obj.m=R.$2, str0=R.leftContext }\r\n if(str0 && str0.match(rD2D2)){ obj.M=R.$1, obj.D=R.$2, str0=R.leftContext }\r\n var d=nd(), Y=obj.Y || d.toStr('Y'), M=obj.M || d.toStr('M'), D=obj.D || 1, h=obj.h || d.toStr('h'), m=obj.m || d.toStr('m')\r\n var str1 = [Y,M,D].join('/') + (obj.h ? (' '+[h,m].join(':')) : ''), dat=new Date(str1)\r\n if(datBA && !isNaN(dat) && !obj.Y){\r\n var T=datBA.getTime()\r\n while((!swBefore && (dat.getTime() <= T)) || (swBefore && (T <= dat.getTime()))){\r\n if(isFinite(obj.M)){ dat.setFullYear(dat.getFullYear()+(swBefore?-1:1)) }else{ dat.setDate(dat.getDate()+(swBefore?-1:1)) }\r\n }\r\n }\r\n div.innerText = '['+str1+']'\r\n div.innerText += '\\n' + nd(dat).toStr('Y/MM/DD hh:mm:ss')\r\n }\r\n}()\r\n",
"桁" : "桁=function(num,桁数){\r\n var str0=num+'', str1=Array(桁数+1).join(0)+num\r\n return (桁数 < str0.length) ? str0 : str1.slice(str1.length-桁数,str1.length)\r\n}",
"相対日時" : "setDate=function(dat0, str条件, swBefore){\r\n // datより後(swBefore=trueなら前)の日時(str条件と一致するタイミング)を返す。\r\n // obj条件の中身は'M1D2'のような形式。'M1D2'なら「1月2日」の意味。\r\n var dat=new Date(dat0), obj={}, reg=/([^\\d])(\\d+)/, res, objMethod={Y:'setFullYear', M:'setMonth', D:'setDate', h:'setHours', m:'setMinutes'}, chr, T=dat.getTime()\r\n while(res=str条件.match(reg)){\r\n obj[res[1]] = res[2]-0\r\n str条件 = RegExp.rightContext\r\n }\r\n if(obj.Y){\r\n if((swBefore && dat.getFullYear()<obj.Y) || (!swBefore && obj.Y<dat.getFullYear())){\r\n // 条件が矛盾(swBefore=trueなのにdatが2016年、obj.Yは2017とか)の場合は何もしない。\r\n return dat\r\n }\r\n dat.setFullYear(obj.Y, obj.M-1, obj.D)\r\n }\r\n while(1){\r\n for(chr in objMethod){ chr!='Y' && isFinite(obj[chr]) && dat[objMethod[chr]](obj[chr]-(chr=='M'?1:0)) }\r\n if((swBefore && dat.getTime()<T) || (!swBefore && T<dat.getTime())){break}\r\n var 一つ前\r\n for(chr in objMethod){\r\n if(chr=='Y' || !obj[chr]){\r\n 一つ前 = chr\r\n continue\r\n }\r\n dat[objMethod[一つ前]]( dat[objMethod[一つ前].replace(/^set/,'get')]() + (swBefore ? -1:1) )\r\n break\r\n }\r\n }\r\n return dat\r\n}\r\nsetDay=function(dat, 曜日, swBefore){\r\n // 先週月曜、とか来週火曜、のDateオブジェクトを返す。\r\n var num='日月火水木金土'.indexOf(曜日), newD=new Date(dat), num元=newD.getDay()\r\n newD.setDate( newD.getDate() + (swBefore ? (num元<num?-7:0) : (num<num元?7:0)) + (num-num元) )\r\n return newD\r\n}\r\n",
"RegExp" : "",
"エラー" : "try{\r\n throw new Error('エラー内容')\r\n}\r\ncatch(e){\r\n // エラーが発生時のみ実行される。\r\n}\r\nfinally{\r\n // エラーが起きても起きなくても最終的に実行される。\r\n}\r\n\r\n// エラー発生行の取得はFireFoxのみ(ブラウザ独自機能)。IEでは不可。\r\n",
"予約語" : "",
"HTML5" : "<html>\r\n<head>\r\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\r\n</head>\r\n<title>HTML5</title>\r\n<body></body>\r\n</html>\r\n",
"setProp" : "setProp=function(){\r\n getClone=function(){\r\n var gt=function(obj){return typeof(obj)}\r\n var gc=function(obj){return obj.constructor}\r\n var objT={}\r\n objT[gt('')] = objT[gt(0)] = objT[gt(true)] = objT[gt(objT.und)] = true\r\n var objC={}\r\n objC[gc({})] = function(obj,swSub){return setProp({}, obj, swSub)}\r\n objC[gc([])] = function(obj,swSub){return setProp([], obj, swSub)}\r\n objC[gc(/1/)] = function(obj){var re; eval('re = '+obj); return re}\r\n objC[gc(new Date())] = function(obj){return new Date(obj+'')}\r\n objC[gc(gc)] = function(obj,swSub){var f; eval('f = '+obj); return setProp(f, obj, swSub)}\r\n return function(obj, swSub){ return (objT[gt(obj)] || obj===null) ? obj : objC[gc(obj)](obj, swSub) }\r\n }()\r\n var funChildsCheck=function(){return true}\r\n var arrT, arrP, 階層, swSub_, swValue_\r\n var fun=function(n,v){\r\n if(swSub_ && forIn(v,funChildsCheck)){\r\n fun0(arrT[階層][n] || (arrT[階層][n]=getClone(v)), v)\r\n return\r\n }\r\n if(swValue_ && !v){return}\r\n arrT[階層][n] = v\r\n }\r\n var fun0=function(objT, objP){\r\n arrT.push(objT)\r\n arrP.push(objP)\r\n 階層++\r\n forIn(objP, fun)\r\n 階層--\r\n arrT.pop()\r\n arrP.pop()\r\n }\r\n return function(objTarget, objProp, swSub, swValue){\r\n arrT=[], arrP=[], 階層=-1, swSub_=swSub, swValue_=swValue\r\n fun0(objTarget, objProp)\r\n return objTarget\r\n }\r\n}()\r\n",
"結果" : "",
"excel" : " excel=function(){\r\n var app=function(objIns){return objIns.Application}\r\n var wsf=function(objIns){return app(objIns).WorksheetFunction}\r\n var 定数={\r\n xlAutomatic:-4105,\r\n xlBetween:1,\r\n xlCalculationAutomatic:-4105,\r\n xlCalculationManual:-4135,\r\n xlCellValue:1,\r\n xlCenter:-4108,\r\n xlEqual:3,\r\n xlGreater:5,\r\n xlGreaterEqual:7,\r\n xlIMEModeNoControl:0,\r\n xlLastCell:11,\r\n xlLess:6,\r\n xlLessEqual:8,\r\n xlNone:-4142,\r\n xlNotBetween:2,\r\n xlNotEqual:4,\r\n xlPasteValues:-4163,\r\n xlPasteFormats:-4122,\r\n xlPasteAll:-4104,\r\n xlSolid:1,\r\n xlValidAlertStop:1,\r\n xlValidateList:3\r\n }\r\n var num2hex=function(num, 桁数){ var str=num.toString(16), L='length', 桁=桁数||str[L], str0='00000'+str, L0=str0[L]; return str0.slice(L0-桁,L0) }\r\n var RGB=function(R,G,B){return parseInt(num2hex(B,2)+num2hex(G,2)+num2hex(R,2), 16)}\r\n return {\r\n newInstance:function(){return new ActiveXObject('Excel.Application')},\r\n getInstance:function(){\r\n var obj\r\n try{obj=GetObject('','Excel.Application')}catch(e){obj=this.newInstance()}\r\n return obj\r\n },\r\n 定数:定数,\r\n wsf:wsf,\r\n RGB:RGB,\r\n 読み取り専用で開く:function(objIns, path, updateLinks){return objIns.Workbooks.Open(path, updateLinks, true)},\r\n getLastCell:function(sh){return sh.Cells.SpecialCells(定数.xlLastCell)},\r\n pasteSpecial:function(){\r\n var obj={値のみ:'xlPasteValues', 書式のみ:'xlPasteFormats'}\r\n return function(rng, 貼りつけるもの, sw空白無視){\r\n var paste=定数[obj[貼りつけるもの] || 'xlPasteAll'], operation=定数.xlNone\r\n rng.PasteSpecial(paste, 定数.xlNone, operation, sw空白無視 || false) // 第4引数をtrueにすると行列の入れ替えができる…筈なんだけど4番目の引数を渡すと何故かエラーになる。。\r\n }\r\n }(),\r\n set警告表示:function(objIns, sw){app(objIns).DisplayAlerts = sw},\r\n set画面更新:function(objIns, sw){app(objIns).ScreenUpdating = sw},\r\n set演算:function(objIns, sw){app(objIns).Calculation = sw ? 定数.xlCalculationAutomatic : 定数.xlCalculationManual},\r\n set文字色:function(rng, R, G, B){rng.Font.Color = RGB(R, G, B)},\r\n set背景色:function(rng, sw塗りつぶしなし, R, G, B){\r\n with(rng.Interior){\r\n TintAndShade = 0\r\n PatternTintAndShade = 0\r\n if(sw塗りつぶしなし){\r\n Pattern = 定数.xlNone\r\n return\r\n }\r\n Pattern = 定数.xlSolid\r\n PatternColorIndex = 定数.xlAutomatic\r\n Color = RGB(R, G, B)\r\n }\r\n },\r\n 条件付き書式:function(){\r\n var F=function(rng){return rng.FormatConditions}, obj演算子={AとBの間:'xlBetween', Aと等しい:'xlEqual', Aより大きい:'xlGreater', A以上:'xlGreaterEqual', Aより小さい:'xlLess', A以下:'xlLessEqual', AとBの間以外:'xlNotBetween', Aと等しくない:'xlNotEqual'}\r\n return {\r\n 削除:function(rng){ F(rng).Delete() },\r\n 追加:function(rng, 演算子, A, B){\r\n var f=F(rng), newCon=f.Add(定数.xlCellValue, 定数[obj演算子[演算子]], A, B)\r\n newCon.SetFirstPriority()\r\n newCon.StopIfTrue = false\r\n return newCon\r\n }\r\n }\r\n }(),\r\n 入力規則_リスト:function(rng, str){\r\n with(rng.Validation){\r\n Delete()\r\n Add(定数.xlValidateList, 定数.xlValidAlertStop, 定数.xlBetween, str)\r\n IgnoreBlank = true\r\n InCellDropdown = true\r\n InputTitle = \"\"\r\n ErrorTitle = \"\"\r\n InputMessage = \"\"\r\n ErrorMessage = \"\"\r\n IMEMode = 定数.xlIMEModeNoControl\r\n ShowInput = true\r\n ShowError = true\r\n }\r\n },\r\n setセル書式:function(){\r\n var obj={標準:'G/標準', 数値:'0_ ', 数値小数第4位:'0.0000_ ', 文字列:'@', 年月日:'yyyy\"年\"m\"月\"d\"日\";@'}\r\n return function(rng, 種類, str){ rng. NumberFormatLocal=str || obj[種類 || '標準']}\r\n }(),\r\n セル結合:function(rng){\r\n rng.MergeCells = false\r\n rng.Merge()\r\n },\r\n セル内中央寄せ:function(rng){\r\n rng.HorizontalAlignment = 定数.xlCenter\r\n rng.VerticalAlignment = 定数.xlCenter\r\n }\r\n }\r\n }()",
"バイナリファイル" : "bin_write = function(path,v){\r\n var str = WScript.CreateObject('ADODB.Stream');\r\n str.type = 2 //adTypeText\r\n str.charset = 'iso-8859-1'\r\n str.open()\r\n \r\n v = v.split('')\r\n for(var i=0,L=v[LEN],int_; i<L; i+=3){\r\n try{\r\n eval('int_ = 0x' + v[i] + v[i+1])\r\n }catch(e){\r\n return WScript.Echo('i:'+i+'\\nv[i]:'+v[i]+'\\nv[i+1]:'+v[i+1]+'\\n')\r\n }\r\n str.writeText(String.fromCharCode(int_))\r\n }\r\n str.saveToFile(path, 2)\r\n str.close()\r\n str = null\r\n}\r\nbin_read = function(path){\r\n var me=arguments.callee\r\n if(!me.func){\r\n // 変換がおかしいところは~0xffの範囲外\r\n if(0){\r\n var REPLSRC = [\r\n 0x20ac, 0x81 , 0x201a, 0x192 , 0x201e, 0x2026, 0x2020, 0x2021,\r\n 0x2c6 , 0x2030, 0x160 , 0x2039, 0x152 , 0x8d , 0x17d , 0x8f ,\r\n 0x90 , 0x2018, 0x2019, 0x201c, 0x201d, 0x2022, 0x2013, 0x2014,\r\n 0x2dc , 0x2122, 0x161 , 0x203a, 0x153 , 0x9d , 0x17e , 0x178\r\n ]\r\n var REPLDST = [\r\n 0x80 , 0x81 , 0x82 , 0x83 , 0x84 , 0x85 , 0x86 , 0x87 ,\r\n 0x88 , 0x89 , 0x8a , 0x8b , 0x8c , 0x8d , 0x8e , 0x8f ,\r\n 0x90 , 0x91 , 0x92 , 0x93 , 0x94 , 0x95 , 0x96 , 0x97 ,\r\n 0x98 , 0x99 , 0x9a , 0x9b , 0x9c , 0x9d , 0x9e , 0x9f\r\n ]\r\n var obj={}\r\n for(var i=0,L=REPLSRC[LEN];i<L;i++){ obj[REPLSRC[i]] = REPLDST[i] }\r\n }else{\r\n var obj={}\r\n for0L([\r\n 0x20ac, 0x81 , 0x201a, 0x192 , 0x201e, 0x2026, 0x2020, 0x2021,\r\n 0x2c6 , 0x2030, 0x160 , 0x2039, 0x152 , 0x8d , 0x17d , 0x8f ,\r\n 0x90 , 0x2018, 0x2019, 0x201c, 0x201d, 0x2022, 0x2013, 0x2014,\r\n 0x2dc , 0x2122, 0x161 , 0x203a, 0x153 , 0x9d , 0x17e , 0x178\r\n ],function(i,src){ obj[src] = 0x80 + i })\r\n }\r\n \r\n me.func=function(path){\r\n var txt='', out='', c=0, idx=0\r\n with(WScript.CreateObject('ADODB.Stream')){\r\n type = 2 //adTypeText\r\n charset = 'iso-8859-1'\r\n open()\r\n loadFromFile(path)\r\n txt = readText()\r\n close()\r\n }\r\n \r\n for(var i=0,L=txt[LEN]; i<L;i++){\r\n c = txt.charCodeAt(i)\r\n c = obj[c] || c\r\n out += (c < 0x10) ? '0' + c.toString(16) : c.toString(16)\r\n out += ' ';\r\n if (i % 16 == 15 && i >= 0xf) out += '\\n'\r\n }\r\n \r\n return out\r\n }\r\n }\r\n return me.func(path)\r\n}",
"atan2" : "// X 軸から座標 (x,y) までのラジアン単位の角度を返すatan2メソッドは\r\n// JScriptだと第1引数は Y \r\n\r\n// excel関数だとatan2(x,y)で逆(というかこちらが普通な気がするが。。)\r\n\r\n角度 = Math.atan2(y, x)\r\n",
"vbs" : "vbs=function(){\r\n var sc=new ActiveXObject('ScriptControl')\r\n sc.Language = 'VBScript'\r\n sc.AddCode((function(){/*\r\n F GetTypeName(obj) : GetTypeName = TypeName(obj): EF\r\n F vbMsgBox(str, buttons, title) : vbMsgBox = msgbox(str, buttons, title): EF\r\n F vbInputBox(str, title, default) : vbInputBox = inputbox(str, title, default): EF\r\n F getAdminMembers(pcName)\r\n Dim objGroup, objUser, str\r\n set objGroup = GetObject(\"WinNT://\" & pcName & \"/Administrators\")\r\n str = \"\"\r\n For Each objUser in objGroup.Members\r\n str = str & objUser.Name & vbLf\r\n Next\r\n getAdminMembers = str\r\n EF\r\n Class TerminaterClass\r\n Public funTer\r\n Private Sub Class_Terminate: funTer: End Sub\r\n Public Sub setF(f): set funTer=f: End Sub\r\n End Class\r\n F getTerminater\r\n Set getTerminater = New TerminaterClass\r\n EF\r\n Sub a(f)\r\n dim b\r\n set b = New TerminaterClass\r\n b.C(f)\r\n msgbox 1111\r\n End Sub\r\n */}+'').split('/*')[1].split('*/')[0].replace(/(\\s)EF(\\s)/g,'$1End F$2').replace(/(\\s)F(\\s)/g,'$1Function$2'))\r\n return {\r\n sc:sc,\r\n msgbox:function(prompt, buttons, title){\r\n // [buttons]\r\n // 0:OK、 1:OK・キャンセル、 2:中止・再試行・無視、 3:はい・いいえ・キャンセル、 4:はい・いいえ、 5:再試行・キャンセル\r\n // 0x10:警告メッセージアイコン, 0x20:問い合わせメッセージアイコン、0x30:注意メッセージアイコン、 0x40:情報メッセージアイコン\r\n // 0:第1ボタンを標準ボタン、 0x100:第2ボタンを、 0x200:第3ボタン、 0x300:第4\r\n sc.Run('vbMsgBox', prompt, buttons, title)\r\n },\r\n inputbox:function(prompt, title, def){return sc.Run('vbInputBox', prompt, title, def)},\r\n getAdminNames:function(PC名){var arr=sc.Run('getAdminMembers', PC名).split('\\n'); arr.pop(); return arr},\r\n setTerminate:function(fun){\r\n var obj=sc.Run('getTerminater')\r\n obj.setF(fun)\r\n return obj\r\n }\r\n }\r\n}()",
"試験" : "試験=function(バラツキ確認回数, fun試験, fun試験前, fun試験後, fun全行程終了後){\r\n var 実施回数=0\r\n setTimeout(function(){\r\n setTimeout(function(){ fun試験前() },0)\r\n setTimeout(function(){ fun試験 () },0)\r\n setTimeout(function(){ fun試験後() },0)\r\n \r\n 実施回数++\r\n if(実施回数<バラツキ確認回数){setTimeout(arguments.callee, 0)}else{ fun全行程終了後() }\r\n },0)\r\n}",
"time単位" : "time単位=function(ミリ秒){\r\n // 値の大きさに応じて「秒」「分」「時間」などの単位に直した文字列を返す。\r\n var f=function(){return Math.round(ミリ秒/1000/num*10)/10}, num=1\r\n if(ミリ秒 < 1000 * 60){return f()+'秒'}\r\n if(ミリ秒 < 1000 * (num=60) * 60){return f()+'分'}\r\n if(ミリ秒 < 1000 * (num=60 * 60) * 24){return f()+'時間'}\r\n if(ミリ秒 < 1000 * (num=60 * 60 * 24) * 7){return f()+'日'}\r\n if(ミリ秒 < 1000 * (num=60 * 60 * 24) * 31){return f(num*=7)+'週'}\r\n if(ミリ秒 < 1000 * (num=60 * 60 * 24) * 365){return f(num*=31)+'月'}\r\n num = 60 * 60 * 24 * 365\r\n return f()+'年'\r\n}\r\n",
"time詳細" : "time詳細=function(ms){\r\n var arr=[], 単位=1000, 単位_, f=function(閾値,str){var 余り=ms % (単位_=閾値); ms -= 余り; arr.unshift(桁(Math.round(余り/単位), 2)+str); 単位=単位_ }\r\n if(ms){ f(単位*60 ,'秒' ) }\r\n if(ms){ f(単位*60 ,'分' ) }\r\n if(ms){ f(単位*24 ,'時間') }\r\n if(ms){ f(単位*31 ,'日' ) } \r\n if(ms){ f(単位*12,'ヵ月') }\r\n if(ms){ arr.unshift(ms / 単位_ + '年') }\r\n return arr.join('')\r\n}\r\n",
"dir" : "// cmd.exeが一瞬チラつく\r\ngetDir = function(path, swFile){\r\n path = path.indexOf(' ') ? ('\"'+path+'\"') : path\r\n var obj=(new ActiveXObject('WScript.Shell')).exec('cmd /C dir /A'+(swFile?'-':'')+'D /B '+path), arr=obj.StdOut.ReadAll().split('\\r\\n')\r\n arr.pop()\r\n return arr\r\n}\r\n",
"toJSON" : "toJSON=function(){\r\n var gt=function(o){return typeof(o)}, gc=function(o){return o.constructor}, objT={}, objC={}, fStr, rNg=/\\n/g, nt='\\n\\t', main\r\n objT[gt('')] = fStr = function(s){return s.replace(/\\\\/g,'\\\\').replace(/\\r/g,'\\\\r').replace(/\\n/g,'\\\\n').replace(/\"/g,'\\\\\"')}\r\n objT[gt(0)] = objT[gt(true)] = objT[gt(gt.und)] = objC[gc(/1/)] = function(v){return v}\r\n objC[gc(new Date())] = function(o){return 'new Date(\"'+o+'\")'}\r\n objC[gc(gc)] = function(o){return インデント調整(o)}\r\n objC[gc({})] = function(o){\r\n var a=[], i=0\r\n forIn(o,function(n,v){ a[i++] = fStr(n)+':'+(main(v)+'').replace(rNg,nt) })\r\n return '{'+nt+a.join(','+nt)+'\\n}'\r\n }\r\n objC[gc([])] = function(o){\r\n var a0=[], s, a1=[], i=0\r\n for0L(o,function(i,v){a0[i]=main(v)}), s='['+nt+a0.join(','+nt)+'\\n]'\r\n forIn(o,function(n,v){ !a0[n] && (a1[i++] = 'a[\"'+fStr(n)+'\"]='+main(v)) })\r\n return a1[LEN] ? (インデント調整(function(){\r\n var a=sss\r\n aaa111\r\n return a\r\n })+'()').replace(/sss/,s.replace(rNg,nt)).replace(/aaa111/,a1.join(nt)) : s\r\n }\r\n return main=function(o){ var t=gt(o), r=o===null ? 'null' : objT[t] ? objT[t](o) : objC[gc(o)](o); return r }\r\n}()\r\n"
}
objSample = {
"getsETN":{
"sample.hta" : "<html>\r\n<title>getsETN</title>\r\n<body>\r\n <div>1</div>\r\n <div>2</div>\r\n <div>3</div>\r\n</body>\r\n<script>\r\n resizeTo(200,140)\r\n getsETN=function(elem,name){return elem.getElementsByTagName(name)}\r\n onload=function(){\r\n var arrDIV=getsETN(document.body,'div')\r\n arrDIV[0].innerText = 123\r\n }\r\n</script>\r\n</html>\r\n"
},
"getPID":{
"sample.js" : "getPID=function(){\r\n var f=function(){\r\n // 子プロセスをcscriptにすると黒い画面が一瞬表示されてしまう。\r\n // 「//B」オプションを付けないとwscriptの設定画面が表示されてしまう。\r\n var childPID = (new ActiveXObject('WScript.Shell')).Exec('wscript //B').ProcessID\r\n \r\n // 子の親(自身)のPIDを特定する\r\n var res = new Enumerator(GetObject(\"winmgmts:root\\\\CIMV2\").ExecQuery(\"SELECT * FROM Win32_Process where ProcessID=\"+childPID))\r\n return res.atEnd() ? (void 0) : res.item().ParentProcessID\r\n }\r\n // 1度目で取得に成功すればその値を返し、ダメなら2回目の処理を実行する。\r\n return f() || f()\r\n}\r\nWScript.Echo(getPID())\r\n"
},
"getTime":{
"sample.js" : "getTime=function(d){return (d || (new Date())).getTime()}\r\nWScript.Echo(getTime())\r\n"
},
"wsh":{
"sample.wsf" : "<job>\r\n<script>\r\n main = function(){\r\n // 汎用関数などの読み込みまで完了したらこの関数が呼ばれる。\r\n // この関数の終了=このスクリプトファイルの終了\r\n WScript.Echo(WScript.Arguments.length)\r\n }\r\n AXO=function(name){return new ActiveXOBject('Scripting.FileSystemObject')}\r\n main()\r\n</script>\r\n</job>\r\n"
},
"基準フォルダ":{
"sample.wsf" : "<job>\r\n<script>\r\n基準フォルダ = function(path){\r\n try{path = location.href}catch(e){path = WScript.ScriptFullName}\r\n return decodeURI(path).replace(/^file:|[\\\\\\/][^\\\\\\/]+$/g,'').replace(/^\\/+([A-Z]:)/i,'$1')\r\n}()\r\nWScript.Echo(基準フォルダ)\r\n</script>\r\n</job>\r\n",
"sample.hta" : "<html>\r\n<script>\r\n基準フォルダ = function(path){\r\n try{path = location.href}catch(e){path = WScript.ScriptFullName}\r\n return decodeURI(path).replace(/^file:|[\\\\\\/][^\\\\\\/]+$/g,'').replace(/^\\/+([A-Z]:)/i,'$1')\r\n}()\r\nconfirm(基準フォルダ)\r\nwindow.close()\r\n</script>\r\n</html>\r\n"
},
"tab入力":{
"sample.hta" : "<html>\r\n<title>tabスペース</title>\r\n<body style=\"overflow:hidden\">\r\n<textarea style=\"width:100%;height:100%\" wrap=off></textarea>\r\n</body>\r\n<script>\r\nresizeTo(300,300)\r\nonload=function(){\r\n タブスペース入力可にする(document.getElementsByTagName('textarea')[0])\r\n}\r\nタブスペース入力可にする=function(elem){\r\n elem.onkeydown=function(){\r\n if(elem.style.imeMode!='active' && event.keyCode!=9){return}\r\n event.cancelBubble = true\r\n var r=document.selection.createRange(), str=r.text\r\n if(event.shiftKey){\r\n if(str){\r\n r.text = str.replace(/\\n\\t|\\n {1,4}/g,'\\n').replace(/^\\t|^ {1,4}/,'')\r\n }else{\r\n r.moveEnd('character',4)\r\n r.text = r.text ? r.text.replace(/\\t| +/,'') : ''\r\n }\r\n }else{\r\n r.text = str ? ('\\t'+str.replace(/\\n/g,'\\n\\t')) : '\\t'\r\n }\r\n return false\r\n }\r\n}\r\n</script>\r\n</html>"
},
"getChilds":{
"sample.hta" : "<html>\r\n<title>getChilds</title>\r\n<body>\r\n <div id=div>\r\n <div>\r\n <div title=123>\r\n <div title=456>\r\n <span>789</span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div id=div0 style=\"border:solid 1px #000;\"></div>\r\n</body>\r\n<script>\r\n resizeTo(400,400)\r\n onload = function(){\r\n var obj=getChilds(div[FI]), d456=obj.removeNode('div456')\r\n \r\n // getChildsを利用したエレメントやその子要素に対してremoveNodeしたい場合は\r\n // getChildsが返したオブジェクトに紐づいているremoveNodeメソッドを利用する。\r\n // エレメントに対して直接removeNodeを実行してしまうと、getChildsが返したオブジェクトについているプロパティからの参照が残ってしまう。\r\n // removeNodeしたエレメントを使いまわすにしても参照先が不正という問題もあるので、removeNodeする場合はオブジェクトのメソッドを利用すること。\r\n \r\n var objClone=obj.getClone()\r\n div[iB](objClone.elem)\r\n div[iB](d456.elem)\r\n \r\n d456.span789[iT] = 'obj.div456:'+obj.div456+'\\nobjClone.div456:'+objClone.div456\r\n \r\n div0.innerText = div.innerHTML\r\n }\r\n iT='innerText', iH='innerHTML', PA='parentNode', FI='firstChild', CN='childNodes', NE='nextSibling', PR='previousSibling', sI='selectedIndex', iB='insertBefore', OP='options', LEN='length'\r\n for0L = function(arr,fun){for(var i=0,L=arr[LEN],res;i<L;i++){if(res=fun(i,arr[i])){return res}}}\r\n forIn = function(obj,fun){var name,res; for(name in obj){if(res=fun(name, obj[name])){return res}}}\r\n getChilds=function(){\r\n var tagName2接頭辞={button:'btn', input:'inp', select:'sel', a:'lnk', iframe:'ifr', table:'tbl', textarea:'ta'}\r\n var inp接頭辞={checkbox:'chk', radio:'rad', text:'inp', number:'num'}\r\n var arr階層=[], arr階層_i=0\r\n var get名前=function(){\r\n var F=function(prop, v){return {prop:prop, v:v}}\r\n var E, objNames={value:1, title:1, innerText:1}, forIn用=function(name){ return E[name] ? F(name, E[name]) : 0 }\r\n return function(elem){\r\n E = elem\r\n var obj=forIn(objNames, forIn用)\r\n if(obj){return obj}\r\n if(E.src){return F('src', E.src.replace(/[\\\\\\/]([^\\\\\\/]+)$/)[1])}\r\n }\r\n }()\r\n var return用obj, objクリア対象外={btn:1}\r\n var for0L用=function(i, elem){\r\n var name=(elem.tagName || '').toLowerCase()\r\n if(!name){return}\r\n arr階層[arr階層_i] = true\r\n arr階層[++arr階層_i] = false\r\n fun再帰(elem[CN])\r\n arr階層_i--\r\n \r\n // 例えば「<button>開始</button>」なら「btn開始」のような名前で参照できるようにする。\r\n var 接頭辞 = ((name=='input' ? inp接頭辞[elem.type] : '') || tagName2接頭辞[name] || name)\r\n var 名前 = get名前(elem)\r\n \r\n // 名前があってもそれがiT由来で、かつ子要素を持つエレメントの場合は参照の対象外。\r\n if(!名前 || 名前.prop!=iT || !arr階層[arr階層+1]){return用obj[接頭辞 + (名前 ? 名前.v : '')] = elem}\r\n \r\n // 名前.vが「*」から始まる場合は「*」のみ削除する。それ以外の場合は名前.v=''とする。\r\n if(名前 && !objクリア対象外[接頭辞] && (名前.prop!=iT || !arr階層[arr階層_i+1])){ elem[名前.prop] = 名前.v.charAt(0)=='*' ? 名前.v.replace(/^\\*/,'') : '' }\r\n \r\n arr階層.pop()\r\n }\r\n var fun再帰=function(cn){ for0L(cn,for0L用) }\r\n var getKey=function(elem, topElem){\r\n // topElemからelemに辿りつくためのFI, NEの配列を調べて返す。\r\n var arr=[]\r\n while(elem!=topElem && (elem[PR] || (elem[PA] && elem[PA].tagName))){\r\n if(elem[PR]){\r\n arr.unshift(NE); elem=elem[PR]\r\n }else{\r\n arr.unshift(FI); elem=elem[PA]\r\n }\r\n }\r\n return arr\r\n }\r\n var getClone = function(){\r\n // elemとobjChildsの関係性を丸ごと複製したものを作成して返す。\r\n var objModel=this, elemClone=objModel.elem.cloneNode(true), objRet={elem:elemClone}\r\n forIn(objModel, function(name, elem){\r\n // 列挙されるプロパティのうち「elem」は無視する。functionは参照コピーする。\r\n if(name=='elem'){return}\r\n if(typeof(elem)=='function'){objRet[name]=objModel[name]; return}\r\n \r\n var elemC=elemClone\r\n for0L(getKey(elem, objModel.elem), function(i, str){ elemC=elemC[str] })\r\n objRet[name] = elemC\r\n })\r\n return objRet\r\n }\r\n var removeNode = function(targetName){\r\n // 指定されたnameに対応するエレメントをremoveNodeする。\r\n // そのエレメントとそのエレメントに含まれている要素への参照用プロパティをまとめてdeleteする。\r\n \r\n var obj=this, objRet={elem:obj[targetName].removeNode(true)}, arr不正=[]\r\n forIn(obj, function(name,elem){\r\n if(name==targetName){delete obj[name]; return}\r\n if(typeof(elem)=='function'){objRet[name]=obj[name]; return}\r\n \r\n while(elem[PR] || (elem[PA] && elem[PA].tagName)){\r\n if(elem==obj.elem){return}\r\n elem = elem[elem[PR] ? PR : PA]\r\n }\r\n if(elem!=objRet.elem){arr不正.push(name); return alert(elem.tagName)}\r\n \r\n // ここまで継続したnameは参照解除の対象(removeNodeするエレメントの子要素)\r\n objRet[name] = obj[name]\r\n delete obj[name]\r\n })\r\n if(arr不正[LEN]){alert('以下が不正な参照状態になっています。\\nエレメントの削除はgetChildsが返すobjectのremoveNodeメソッドを使用してください。\\n\\n'+arr不正.join('\\n'))}\r\n return objRet\r\n }\r\n return function(elem){\r\n return用obj={elem:elem, getClone:getClone, removeNode:removeNode}\r\n fun再帰(elem[CN])\r\n return return用obj\r\n }\r\n }()\r\n</script>\r\n</html>\r\n"
},
"整数化":{
"sample.js" : "LEN='length'\r\nforIn = function(obj,fun){var name,res; for(name in obj){if(res=fun(name, obj[name])){return res}}}\r\n\r\nswitch(2){\r\n case 0:\r\n // 以下では「66.9+0.01」の結果が「66.89000000000001」になってしまう。\r\n 整数化=function(){\r\n var reg=/\\.(\\d+)/, get桁数=function(num){return (num+'').match(reg) ? RegExp.$1.length : 0}\r\n var obj0, arr0, arr0L, obj1, forIn用=function(name,v){ arr0[arr0L++]=get桁数(v) }, max, x, 反映=function(name,v){ obj1[name] = v * x }\r\n var check=function(name,v){(v+'').match(reg) && WScript.Echo([v,x].join('\\n'))}\r\n return function(obj, fun){\r\n arr0 = []\r\n arr0L= 0\r\n obj1 = {}\r\n forIn(obj0=obj, forIn用)\r\n max=Math.max.apply(null, arr0), x=(1+Array(max+1).join(0))-0\r\n forIn(obj0, 反映)\r\n forIn(obj1, check)\r\n return fun(obj1) / x\r\n }\r\n }()\r\n break\r\n case 1:\r\n // 以下では「1.234e-16」のような値に対応できない。\r\n 整数化=function(){\r\n var reg=/\\.(\\d+)/, arr, arrL, obj0\r\n var getObj=function(num){\r\n var str=num+'', obj={元:num, str:str.replace(reg,'$1'), 桁数:arr[arrL++]=RegExp.$1.length}\r\n return obj\r\n }\r\n return function(obj, func){\r\n arr = []\r\n arrL = 0\r\n obj0 = {}\r\n forIn(obj,function(name, v){ obj0[name] = getObj(v) })\r\n var max=Math.max.apply(null, arr), obj1={}\r\n forIn(obj0,function(name, v){\r\n obj1[name] = (v.str + Array(max-v.桁数+1).join(0)) - 0\r\n \r\n // 万が一整数化に失敗した場合はどのような値で失敗したのか通知する。\r\n if(0<(''+obj1[name]).indexOf('.')){ WScript.Echo('整数化失敗\\n'+obj1[name]+'\\nstr:'+v.str) }\r\n })\r\n return func(obj1) / (1+Array(max+1).join(0))\r\n }\r\n }()\r\n break\r\n case 2:\r\n 整数化=function(){\r\n var regDot=/\\.(\\d+)/, regE=/\\.(\\d+)e-(\\d+)/, arr, arrL, obj0\r\n var getObj=function(num){\r\n var str=num+'', 桁数=0\r\n while(1){\r\n if(str.match(regE )){ 桁数=RegExp.$2-(-3) ; str=str.replace(regE ,'$1'); break }\r\n if(str.match(regDot)){ 桁数=RegExp.$1.length; str=str.replace(regDot,'$1'); break }\r\n break\r\n }\r\n return {元:num, str:str, 桁数:arr[arrL++]=桁数}\r\n }\r\n return function(obj, func){\r\n arr = []\r\n arrL = 0\r\n obj0 = {}\r\n forIn(obj,function(name, v){ obj0[name] = getObj(v) })\r\n var max=Math.max.apply(null, arr), obj1={}\r\n forIn(obj0,function(name, v){\r\n obj1[name] = (v.str + Array(max-v.桁数+1).join(0)) - 0\r\n \r\n // 言語で扱える数字のサイズを超えてしまった場合は通知する。\r\n if(!isFinite(obj1[name])){ alert('整数化失敗\\nisFinite=false\\n'+obj[name]+'\\nstr:'+str) }\r\n \r\n // 万が一整数化に失敗した場合はどのような値で失敗したのか通知する。\r\n if(0<(''+obj1[name]).indexOf('.') && !(''+obj1[name]).match(/e\\+/)){ WScript.Echo('整数化失敗\\n'+obj1[name]+'\\nstr:'+v.str) }\r\n })\r\n return func(obj1) / (1+Array(max+1).join(0))\r\n }\r\n }()\r\n break\r\n}\r\n\r\na = -20.41\r\nb = -43.3\r\nc = a - b\r\nd = 整数化({a:a, b:b}, function(obj){return obj.a - obj.b})\r\n\r\ne = 66.9\r\nf = 0.01\r\ng = 整数化({e:e, f:f}, function(obj){return obj.e - obj.f})\r\n\r\nh = 90071992547409.92\r\ni = 1.234e-16\r\nj = 整数化([h,i], function(arr){return arr[0] - arr[1]})\r\n\r\n// 22.889999999999997\r\n// 22.89\r\nWScript.Echo([c,d,g,j].join('\\n'))\r\n"
},
"傾き補正3D":{
"sample.hta" : "<html>\r\n<title>傾き補正</title>\r\n<body style=\"text-align:center;overflow:hidden\">\r\n<textarea id=ta0 wrap=off style=\"width:100%;height:42%\"></textarea>\r\n<button id=btn style=\"width:100%;height:16%\">↓</button>\r\n<textarea id=ta1 wrap=off style=\"width:100%;height:42%\"></textarea>\r\n</body>\r\n<script>\r\n resizeTo(300,300)\r\n btn.onclick=function(){\r\n var arr2D=ta0.value.split('\\r\\n')\r\n for0L(arr2D, function(i,str){ arr2D[i] = str.split('\\t') })\r\n if(arr2D[arr2D[LEN]-1][LEN]==1){arr2D.pop()}\r\n \r\n var arr2D_ = 傾き補正(arr2D)\r\n for0L(arr2D_, function(i,arr){ arr2D_[i] = arr.join('\\t') })\r\n ta1.value = arr2D_.join('\\r\\n')\r\n }\r\n \r\n 整数化=function(){\r\n var regDot=/\\.(\\d+)/, regE=/\\.(\\d+)e-(\\d+)/, arr, arrL, obj0\r\n var getObj=function(num){\r\n var str=num+'', 桁数=0\r\n while(1){\r\n if(str.match(regE )){ 桁数=RegExp.$2-(-3) ; str=str.replace(regE ,'$1'); break }\r\n if(str.match(regDot)){ 桁数=RegExp.$1.length; str=str.replace(regDot,'$1'); break }\r\n break\r\n }\r\n return {元:num, str:str, 桁数:arr[arrL++]=桁数}\r\n }\r\n return function(obj, func){\r\n arr = []\r\n arrL = 0\r\n obj0 = {}\r\n forIn(obj,function(name, v){ obj0[name] = getObj(v) })\r\n var max=Math.max.apply(null, arr), obj1={}\r\n forIn(obj0,function(name, v){\r\n obj1[name] = (v.str + Array(max-v.桁数+1).join(0)) - 0\r\n \r\n // 言語で扱える数字のサイズを超えてしまった場合は通知する。\r\n if(!isFinite(obj1[name])){ alert('整数化失敗\\nisFinite=false\\n'+obj[name]+'\\nstr:'+str) }\r\n \r\n // 万が一整数化に失敗した場合はどのような値で失敗したのか通知する。\r\n if(0<(''+obj1[name]).indexOf('.') && !(''+obj1[name]).match(/e\\+/)){ alert('整数化失敗\\n'+obj1[name]+'\\nstr:'+v.str) }\r\n })\r\n return func(obj1) / (1+Array(max+1).join(0))\r\n }\r\n }()\r\n me=function(){return arguments.callee.caller}\r\n 傾き補正=function(arr2D){\r\n // 2次元配列内部の左上、右上、左下、右下のうち2箇所以上が0になるように配列全体の値を補正する。\r\n \r\n var lenX=arr2D[0][LEN]-1, lenY=arr2D[LEN]-1\r\n var get四つ角=function(arr){ return {LT:arr[0][0], RT:arr[0][lenX], LB:arr[lenY][0], RB:arr[lenY][lenX]} }\r\n var get補正係数=function(v00, v01, v10, v11, 軸max){\r\n var obj\r\n if(Math.abs(v00-v01) < Math.abs(v10-v11)){ obj={v0:v00, v1:v01} }else{ obj={v0:v10, v1:v11} }\r\n obj.rad=Math.atan2(整数化(obj, function(obj){return obj.v0-obj.v1}), 軸max)\r\n obj.min=Math.min(obj.v0,obj.v1)\r\n return obj\r\n }\r\n \r\n // X軸\r\n with(get四つ角(arr2D)){var obj係数=get補正係数(RT,LT,RB,LB,lenX), newArr0=[]}\r\n for0L(arr2D, function(Y, arrX){\r\n newArr0[Y] = []\r\n for0L(arrX, function(X, v){\r\n newArr0[Y][X] = 整数化({v:v, min:obj係数.min}, function(o){return o.v - o.min}) - X*Math.tan(obj係数.rad)\r\n })\r\n })\r\n \r\n // Y軸\r\n with(get四つ角(newArr0)){var obj係数=get補正係数(RT,RB,LT,LB,lenY), newArr1=[]}\r\n for0L(newArr0, function(Y){newArr1[Y] = []})\r\n for0L(newArr0[0], function(X){\r\n for0L(newArr0, function(Y){\r\n newArr1[Y][X] = 整数化({v:newArr0[Y][X], min:obj係数.min}, function(o){return o.v - o.min}) - Y*Math.tan(-obj係数.rad)\r\n })\r\n })\r\n \r\n // 最小値を0にする\r\n var arrMin=[]\r\n for0L(newArr1, function(Y,arrX){ arrMin[Y] = Math.min.apply(null,arrX) })\r\n var min=Math.min.apply(null, arrMin)\r\n for0L(newArr1,function(Y,arrX){\r\n for0L(arrX,function(X,v){\r\n arrX[X] = 整数化({min:min, v:v}, function(o){return o.v-o.min})\r\n })\r\n })\r\n \r\n return newArr1\r\n }\r\n \r\n LEN='length'\r\n for0L = function(arr,fun){for(var i=0,L=arr[LEN],res;i<L;i++){if(res=fun(i,arr[i])){return res}}}\r\n forIn = function(obj,fun){var name,res; for(name in obj){if(res=fun(name, obj[name])){return res}}}\r\n</script>\r\n</html>\r\n"
},
"日時を省略表記":{
"sample.hta" : "<html>\r\n<title>日時を省略表記</title>\r\n<body>\r\n <input id=inp>\r\n <label><input type=checkbox id=chk>before</label>\r\n <div id=div></div>\r\n</body>\r\n<script>\r\n resizeTo(250,150)\r\n inp.onkeyup=function(){ str2dat(this.value, new Date(), chk.checked) }\r\n str2dat=function(){\r\n var 桁=function(num,桁数){var str0=num+'', str1=Array(桁数+1).join(0)+num; return (桁数 < str0.length) ? str0 : str1.slice(str1.length-桁数,str1.length)}\r\n var nd=function(){\r\n var toStr=function(フォーマット){\r\n // フォーマットは「YY/MM/DD hh:mm:ss」のような文字列\r\n var d=this.dat, obj={Y:d.getFullYear(), M:d.getMonth()+1, D:d.getDate(), h:d.getHours(), m:d.getMinutes(), s:d.getSeconds()}, chr, reg, res\r\n for(chr in obj){\r\n reg = new RegExp(chr+'+')\r\n res = フォーマット.match(reg)\r\n if(!res){continue}\r\n フォーマット = フォーマット.replace(reg, 桁(obj[chr], res[0].length))\r\n }\r\n return フォーマット\r\n }\r\n return function(d){\r\n return { dat:d || (new Date()), toStr:toStr }\r\n }\r\n }()\r\n var R=RegExp\r\n var rY=/^[^\\d]*(\\d{4})\\//, rMD=/(\\d{1,2})\\/(\\d{1,2})/, rHM=/(\\d{1,2}):(\\d{1,2})/, rYMD=/(\\d{4})\\/?(\\d{2})\\/?(\\d{2})/, rFull=/(\\d{4})\\/?(\\d{2})\\/?(\\d{2}) *(\\d{2}):?(\\d{2})/, rD2D2=/(\\d{2})(\\d{2})[^\\d]*?$/\r\n return function(str, datBA, swBefore){\r\n // datBA(Dateオブジェクト)は有っても無くてもOK\r\n // datBAを指定するとdatBAよりも(swBeforeがfalseなら後ろ、trueなら前)の日時を返す。\r\n var str0=str, obj={}, rC=function(){str0=R.rightContext}\r\n if(str0 && str0.match(rFull)){ obj={Y:R.$1, M:R.$2, D:R.$3, h:R.$4, m:R.$5}, str0='' }\r\n if(str0 && str0.match(rY)){ obj.Y=R.$1, rC() }\r\n if(str0 && str0.match(rMD)){ obj.M=R.$1, obj.D=R.$2, rC() }\r\n if(str0 && str0.match(rHM)){ obj.h=R.$1, obj.m=R.$2, rC() }\r\n if(str0 && str0.match(rYMD)){ obj.Y=R.$1, obj.M=R.$2, obj.D=R.$3, rC() }\r\n if(str0 && str0.match(rD2D2)){ obj.h=R.$1, obj.m=R.$2, str0=R.leftContext }\r\n if(str0 && str0.match(rD2D2)){ obj.M=R.$1, obj.D=R.$2, str0=R.leftContext }\r\n var d=nd(), Y=obj.Y || d.toStr('Y'), M=obj.M || d.toStr('M'), D=obj.D || 1, h=obj.h || d.toStr('h'), m=obj.m || d.toStr('m')\r\n var str1 = [Y,M,D].join('/') + (obj.h ? (' '+[h,m].join(':')) : ''), dat=new Date(str1)\r\n if(datBA && !isNaN(dat) && !obj.Y){\r\n var T=datBA.getTime()\r\n while((!swBefore && (dat.getTime() <= T)) || (swBefore && (T <= dat.getTime()))){\r\n if(isFinite(obj.M)){ dat.setFullYear(dat.getFullYear()+(swBefore?-1:1)) }else{ dat.setDate(dat.getDate()+(swBefore?-1:1)) }\r\n }\r\n }\r\n div.innerText = '['+str1+']'\r\n div.innerText += '\\n' + nd(dat).toStr('Y/MM/DD hh:mm:ss')\r\n }\r\n }()\r\n</script>\r\n</html>\r\n"
},
"桁":{
},
"相対日時":{
"sample.wsf" : "<job>\r\n<script>\r\n setDate=function(dat0, str条件, swBefore){\r\n // datより後(swBefore=trueなら前)の日時(str条件と一致するタイミング)を返す。\r\n // obj条件の中身は'M1D2'のような形式。'M1D2'なら「1月2日」の意味。\r\n var dat=new Date(dat0), obj={}, reg=/([^\\d])(\\d+)/, res, objMethod={Y:'setFullYear', M:'setMonth', D:'setDate', h:'setHours', m:'setMinutes'}, chr, T=dat.getTime()\r\n while(res=str条件.match(reg)){\r\n obj[res[1]] = res[2]-0\r\n str条件 = RegExp.rightContext\r\n }\r\n if(obj.Y){\r\n if((swBefore && dat.getFullYear()<obj.Y) || (!swBefore && obj.Y<dat.getFullYear())){\r\n // 条件が矛盾(swBefore=trueなのにdatが2016年、obj.Yは2017とか)の場合は何もしない。\r\n return dat\r\n }\r\n dat.setFullYear(obj.Y, obj.M-1, obj.D)\r\n }\r\n while(1){\r\n for(chr in objMethod){ chr!='Y' && isFinite(obj[chr]) && dat[objMethod[chr]](obj[chr]-(chr=='M'?1:0)) }\r\n if((swBefore && dat.getTime()<T) || (!swBefore && T<dat.getTime())){break}\r\n var 一つ前\r\n for(chr in objMethod){\r\n if(chr=='Y' || !obj[chr]){\r\n 一つ前 = chr\r\n continue\r\n }\r\n dat[objMethod[一つ前]]( dat[objMethod[一つ前].replace(/^set/,'get')]() + (swBefore ? -1:1) )\r\n break\r\n }\r\n }\r\n return dat\r\n }\r\n setDay=function(dat, 曜日, swBefore){\r\n // 先週月曜、とか来週火曜、のDateオブジェクトを返す。\r\n var num='日月火水木金土'.indexOf(曜日), newD=new Date(dat), num元=newD.getDay()\r\n newD.setDate( newD.getDate() + (swBefore ? (num元<num?-7:0) : (num<num元?7:0)) + (num-num元) )\r\n return newD\r\n }\r\n WScript.Echo(\r\n setDate(new Date(), 'D2', 0)+'\\n'+\r\n setDay(new Date(), '月', 1)\r\n )\r\n</script>\r\n</job>\r\n"
},
"RegExp":{
"sample.hta" : "<html>\r\n<title>RegExp</title>\r\n<style>\r\n .max{width:100%;height:100%}\r\n .w-max{width:100%}\r\n .nowrap{white-space:nowrap}\r\n .ta-c{text-align:center}\r\n .bc{border-collapse:collapse}\r\n</style>\r\n<body style=\"overflow:hidden\">\r\n <table class=\"max bc\">\r\n <tr><td><textarea id=ta0 wrap=off class=max></textarea></td></tr>\r\n <tr height=1>\r\n <td>\r\n <table class=\"w-max bc\">\r\n <td width=1><span class=nowrap>RE = new RegExp(</span></td>\r\n <td><input class=w-max id=inpRE></td>\r\n <td width=1>,</td>\r\n <td width=1>\r\n <label><input type=checkbox id=chkG>g</label>\r\n <label><input type=checkbox id=chkI>i</label>\r\n </td>\r\n <td width=1><span class=nowrap>);</span></td>\r\n </table>\r\n </td>\r\n </tr>\r\n <tr height=1><td class=ta-c><button id=btnM>res = textarea.match(RE)</button></td></tr>\r\n <tr id=tr0><td class=ta-c>match箇所無し</td></tr>\r\n <tr id=tr1 height=1>\r\n <td>\r\n <table class=\"w-max bc\" border=1>\r\n <tr>\r\n <td>res</td>\r\n <td><textarea id=taRes class=w-max wrap=off style=\"height:100px\"></textarea></td>\r\n </tr>\r\n <tr>\r\n <td>res[n]</td>\r\n <td><div id=divResN style=\"height:100px;overflow:auto\"></div></td>\r\n </tr>\r\n <tr><td>lastMatch</td><td id=tdLM></td></tr>\r\n <tr><td>lastParen</td><td id=tdLP></td></tr>\r\n <tr>\r\n <td width=1><span class=nowrap>rightContext</span></td>\r\n <td><textarea id=taRC class=w-max style=\"height:100px\" wrap=off></textarea></td>\r\n </tr>\r\n </table>\r\n </td>\r\n </tr>\r\n </table>\r\n</body>\r\n<script>\r\n resizeTo(400,600)\r\n iT='innerText', iH='innerHTML', FI='firstChild', CN='childNodes'\r\n tr0.style.display = tr1.style.display = 'none'\r\n btnM.onclick=function(){\r\n var RE=new RegExp(inpRE.value, (chkG.checked ? 'g' : '') + (chkI.checked ? 'i' : '')), str=ta0.value, res=str.match(RE)\r\n if(!res){\r\n tr0.style.display = 'block'\r\n tr1.style.display = 'none'\r\n return\r\n }\r\n tr0.style.display = 'none'\r\n tr1.style.display = 'block'\r\n \r\n divResN[iH] = '<table class=\"max bc\" border=1><td width=1></td><td></td></table>'\r\n var tbo=divResN[FI][FI], tr=tbo[FI].removeNode(true), i=0, L=res.length, newTR\r\n for(;i<L;i++){\r\n tbo.insertBefore(newTR=tr.cloneNode(true))\r\n newTR[CN][0][iT] = i\r\n newTR[CN][1][iT] = res[i]\r\n }\r\n \r\n setTimeout(function(){\r\n with(RegExp){\r\n taRes.value = res\r\n tdLM[iT] = lastMatch\r\n tdLP[iT] = lastParen\r\n taRC.value = rightContext\r\n }\r\n },1)\r\n }\r\n</script>\r\n</html>\r\n",
"正規表現の構文.hta" : "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 3.2 Final//EN\">\r\n<HTML DIR=\"LTR\"><HEAD>\r\n<META HTTP-EQUIV=\"Content-Type\" Content=\"text/html; charset=shift_jis\">\r\n<TITLE>正規表現の構文</TITLE>\r\n<!--CSS_START-->\r\n<script>\r\nresizeTo(600,1200)\r\n</script>\r\n<style type=\"text/css\">\r\n/* VERSION 9106 */\r\n/* THIS A PRE-RELEASE VERSION OF THE CSS. */\r\n/* Cascading Style Sheet for use with Developer Tools User Education Docs in the Visual Studio.NET timeframe */\r\n\r\n\r\n/* --------------------------------------------------\r\n MAIN TOPIC STYLES\r\n-------------------------------------------------- */\r\n\r\nbody /* This body tag requires the use of one of the sets of banner and/or text div ids */\r\n {\r\n margin: 0px 0px 0px 0px;\r\n padding: 0px 0px 0px 0px;\r\n background: #ffffff; \r\n color: #000000;\r\n font-family: MS Pゴシック, Verdana, Arial, Helvetica, sans-serif;\r\n font-size: 75%;\r\n width: 100%;\r\n }\r\ndiv#scrollyes /* Allows topic to scroll. Cannot be used with running head banner */\r\n { /* Must immediately follow <body>. */\r\n padding: 2px 15px 2px 22px;\r\n width: 100%;\r\n }\r\ndiv#nsbanner /* Creates Nonscrolling banner region */\r\n {\r\n position: relative;\r\n left: 0px;\r\n padding: 0px 0px 0px 0px;\r\n border-bottom: 1px solid #999999;\r\n }\r\ndiv#nstext /* Creates the scrolling text area for Nonscrolling region topic */\r\n {\r\n padding: 5px 10px 0px 22px; \r\n }\r\ndiv#scrbanner /* Creates the running head bar in a full-scroll topic */\r\n { /* Allows topic to scroll. */\r\n margin: 0px 0px 0px 0px;\r\n padding: 0px 0px 0px 0px;\r\n border-bottom: 1px solid #999999;\r\n }\r\ndiv#scrtext /* Creates the text area in a full-scroll topic */\r\n { /* Allows topic to scroll. */\r\n width: 100%; /* Forces tables to have correct right margin */\r\n padding: 0px 10px 0px 22px; \r\n }\r\ndiv#bannerrow1 /* provides full-width color to top row in running head (requires script) */\r\n {\r\n background-color: #99ccff;\r\n }\r\ndiv#titlerow /* provides non-scroll topic title area (requires script) */\r\n {\r\n width: 100%; /* Forces tables to have correct right margin */\r\n padding: 0px 10px 0px 22px; \r\n background-color: #99ccff; \r\n }\r\n\r\n/* --------------------------------------------------\r\n HEADING STYLES\r\n-------------------------------------------------- */\r\n\r\nh1, h2, h3, h4\r\n {\r\n font-family: MS Pゴシック, Verdana, Arial, Helvetica, sans-serif;\r\n margin-bottom: 1em; \r\n margin-top: 1em;\r\n font-weight: bold;\r\n }\r\nh1\r\n {\r\n font-size: 120%;\r\n margin-top: 1em;\r\n }\r\nh2\r\n {\r\n font-size: 120%;\r\n }\r\nh3\r\n {\r\n font-size: 110%;\r\n }\r\nh4\r\n {\r\n font-size: 100%;\r\n }\r\n.dtH1, .dtH2, .dtH3, .dtH4\r\n {\r\n margin-left: -18px;\r\n }\r\ndiv#titlerow h1\r\n {\r\n margin-bottom: .2em\r\n }\r\n\r\n/* --------------------------------------------------\r\n TEXT STYLES\r\n-------------------------------------------------- */\r\n\r\np\r\n {\r\n margin: .5em 0em .5em 0em;\r\n line-height: 125%;\r\n }\r\nblockquote.dtBlock\r\n {\r\n margin: .5em 1.5em .5em 1.5em;\r\n }\r\ndiv#dtHoverText\r\n {\r\n color: #000066;\r\n }\r\n.normal\r\n {\r\n margin: .5em 0em .5em 0em;\r\n }\r\n.fineprint\r\n {\r\n font-size: 90%; /* i.e., 90% of 70% */\r\n }\r\n.indent\r\n {\r\n margin: .5em 5em .5em 5em;\r\n }\r\n.topicstatus /* Topic Status Boilerplate class */\r\n {\r\n display: block;\r\n color: red;\r\n }\r\n\r\n/* --------------------------------------------------\r\n LABEL STYLES\r\n-------------------------------------------------- */\r\n\r\np.label\r\n {\r\n margin-top: 1em;\r\n }\r\np.labelproc\r\n {\r\n margin-top: 1em;\r\n color: #000066;\r\n }\r\n\r\n/* --------------------------------------------------\r\n GRAPHIC STYLES\r\n-------------------------------------------------- */\r\n\r\nimg\r\n {\r\n border: none; \r\n }\r\n\r\n/* --------------------------------------------------\r\n LIST STYLES\r\n-------------------------------------------------- */\r\n\r\nol, ul\r\n {\r\n margin: 1em 0em 0em 2em;\r\n line-height: 125%;\r\n \r\n }\r\nli\r\n {\r\n margin-bottom: .5em;\r\n }\r\nul p, ol p, dl p\r\n {\r\n margin-left: 0em;\r\n }\r\nul p.label, ol p.label\r\n {\r\n margin-top: .5em;\r\n }\r\n\r\n/* --------------------------------------------------\r\n DEFINITION LIST STYLES\r\n-------------------------------------------------- */\r\n\r\ndl\r\n {\r\n margin-top: 0em; \r\n padding-left: 1px; /* Prevents italic-letter descenders from being cut off */\r\n }\r\ndd\r\n {\r\n margin-bottom: 0em; \r\n margin-left: 1.5em; \r\n }\r\ndt\r\n {\r\n margin-top: .5em; \r\n }\r\n\r\n/* --------------------------------------------------\r\n CODE, SYNTAX, and REFTIP STYLES\r\n-------------------------------------------------- */\r\n\r\npre\r\n {\r\n margin-top: .5em;\r\n margin-bottom: .5em; \r\n }\r\npre, code, .code\r\n {\r\n font: 100% MS ゴシック, Courier New, Courier; /* This is 100% of 70% */\r\n color: #000066;\r\n }\r\npre b, code b\r\n {\r\n letter-spacing: .1em; /* opens kerning on bold in Syntax/Code */\r\n }\r\npre.syntax\r\n {\r\n background: #cccccc;\r\n padding: 4px 8px;\r\n cursor: text;\r\n margin-top: 1em;\r\n margin-bottom: 1em; \r\n color: #000000;\r\n border-width: 1px;\r\n border-style: solid;\r\n border-color: #999999;\r\n }\r\n\r\n/* --------------------------------------------------\r\n LINK STYLES\r\n-------------------------------------------------- */\r\n\r\na:link\r\n {\r\n color: #0000ff;\r\n }\r\na:visited\r\n {\r\n color: #0000ff;\r\n }\r\na:hover\r\n {\r\n color: #3366ff;\r\n }\r\n\r\n/* ---------------------------\r\nMSHelp\\:link - Help HxLinks\r\n--------------------------- */\r\nMSHelp\\:link\r\n {\r\n text-decoration: underline; \r\n color: #0000ff; \r\n hoverColor: #3366ff;\r\n } \r\nA.HxLinkTable /* MSHelp\\:link - Table disambiguation elements */\r\n {\r\n }\r\n/* ---------------------------\r\nMSHelp\\:ktable - Help links\r\n--------------------------- */\r\nMSHelp\\:ktable\r\n {\r\n behavior:url(hxktable.htc);\r\n disambiguator: span;\r\n separator: &nbsp|&#32;\r\n prefix: |&#32;\r\n postfix: &nbsp;\r\n }\r\ndiv.HxLinkTable\r\n {\r\n width: auto; /* Works around IE5.x bug: Forces tables to have correct right margins and top spacing */\r\n margin-top: -.4em;\r\n visibility: visible;\r\n }\r\nol div.HxLinkTable, ul div.HxLinkTable\r\n {\r\n margin-top: 0em; /* Forces tables to have correct right margins and top spacing */\r\n }\r\ntable.HxLinkTable /* Keep in sync with general table settings below */\r\n {\r\n width: auto;\r\n margin-top: .6em;\r\n margin-bottom: .3em;\r\n border-width: 1px 1px 0px 0px;\r\n border-style: solid;\r\n border-color: #999999;\r\n background-color: #999999; \r\n font-size: 75%; /* Text in Table is same size as text outside table */\r\n behavior:url(hxlinktable.htc); /* Attach the behavior to link elements. */\r\n }\r\ntable.HxLinkTable th, table.HxLinkTable td /* Keep in sync with general table settings below */\r\n { \r\n border-style: solid; /* Creates the cell border and color */\r\n border-width: 0px 0px 1px 1px;\r\n border-style: solid;\r\n border-color: #999999;\r\n padding: 4px 6px;\r\n text-align: left;\r\n }\r\ntable.HxLinkTable th /* Keep in sync with general table settings below */\r\n { \r\n background: #cccccc; /* Creates the shaded table header row */\r\n vertical-align: bottom;\r\n }\r\ntable.HxLinkTable td /* Keep in sync with general table settings below */\r\n {\r\n background: #ffffff;\r\n vertical-align: top;\r\n }\r\n\r\n/* --------------------------------------------------\r\n TABLE STYLES\r\n-------------------------------------------------- */\r\n\r\ndiv.tablediv\r\n {\r\n width: 100%; /* Works around IE5.x bug: Forces tables to have correct right margins and top spacing */\r\n margin-top: -.4em;\r\n }\r\nol div.tablediv, ul div.tablediv, ol div.HxLinkTable, ul div.HxLinkTable\r\n {\r\n margin-top: 0em; /* Forces tables to have correct right margins and top spacing */\r\n }\r\ntable.dtTABLE\r\n {\r\n width: 100%; /* Forces tables to have correct right margin */\r\n margin-top: .6em;\r\n margin-bottom: .3em;\r\n border-width: 1px 1px 0px 0px;\r\n border-style: solid;\r\n border-color: #999999;\r\n background-color: #999999; \r\n font-size: 100%; /* Text in Table is same size as text outside table */\r\n }\r\ntable.dtTABLE th, table.dtTABLE td\r\n { \r\n border-style: solid; /* Creates the cell border and color */\r\n border-width: 0px 0px 1px 1px;\r\n border-style: solid;\r\n border-color: #999999;\r\n padding: 4px 6px;\r\n text-align: left;\r\n }\r\ntable.dtTABLE th \r\n { \r\n background: #cccccc; /* Creates the shaded table header row */\r\n vertical-align: bottom;\r\n }\r\ntable.dtTABLE td \r\n {\r\n background: #ffffff;\r\n vertical-align: top;\r\n }\r\ntable.SampMgr\r\n {\r\n margin: 0px 0px 0px -22px;\r\n }\r\ntable.SampMgr td\r\n {\r\n padding-left: 22px;\r\n }\r\n\r\n/* --------------------------------------------------\r\nISSUE REPORTING AND MISC LINKS TOPIC FOOTER\r\n-------------------------------------------------- */\r\n\r\ndiv.footer\r\n {\r\n font-style: italic;\r\n }\r\ndiv.footer hr\r\n {\r\n color: #999999;\r\n height: 1px;\r\n }\r\n\r\n/* --------------------------------------------------\r\n STYLES FOR RUNNING HEADS\r\n-------------------------------------------------- */\r\n\r\ntable.bannerparthead, table.bannertitle /* General values for the Running Head tables */\r\n {\r\n position: relative;\r\n left: 0px;\r\n top: 0px;\r\n padding: 0px 0px 0px 0px;\r\n margin: 0px 0px 0px 0px;\r\n width: 100%;\r\n height: 21px; \r\n border-collapse: collapse;\r\n border-style: solid;\r\n border-width: 0px;\r\n background-color: #99ccff; \r\n font-size: 100%;\r\n }\r\ntable.bannerparthead td /* General Values for cells in the top row of running head */\r\n {\r\n margin: 0px 0px 0px 0px;\r\n padding: 2px 0px 0px 4px;\r\n vertical-align: middle;\r\n /*border-width: 0px 0px 1px 0px; */\r\n border-width: 0px\r\n border-style: solid;\r\n border-color: #999999;\r\n background: transparent; \r\n font-family: Verdana, Arial, Helvetica, sans-serif, MS Pゴシック;\r\n font-style: normal;\r\n font-weight: normal;\r\n }\r\ntable.bannerparthead td.product /* Values for top right cell in running head */\r\n { /* Allows for a second text block in the running head */\r\n text-align: right;\r\n padding: 2px 5px 0px 5px;\r\n }\r\ntable.bannertitle td /* General Values for cells in the bottom row of running head */\r\n {\r\n margin: 0px 0px 0px 0px;\r\n padding: 0px 0px 0px 3px;\r\n vertical-align: middle;\r\n border-width: 0px 0px 1px 0px;\r\n border-style: solid;\r\n border-color: #999999;\r\n background: transparent;\r\n font-weight: bold;\r\n }\r\ntd.button1 /* Values for button cells */\r\n {\r\n width: 14px;\r\n cursor: hand;\r\n }\r\n\r\n\r\n/* =================================================\r\n STYLES REQUIRED BY THE SCRIPT */\r\n\r\n/* --------------------------------------------------\r\nRUNNING HEAD BAR POPUP STYLES: See Also, Requirements, MultiLang Filtering\r\n-------------------------------------------------- */\r\n\r\ndiv.sapop, div.langMenu /* See Also & Requirements popups */\r\n {\r\n position: absolute;\r\n left: 0px;\r\n z-index: 1;\r\n width: 50%;\r\n padding: 0px 8px 5px 26px;\r\n visibility: hidden;\r\n border: 1px solid #999999; /* Same as all other border colors */\r\n background: #ffffcc;\r\n }\r\ndiv.langMenu /* MultiLang Filter popup */\r\n {\r\n padding: 10px 10px 10px 10px;\r\n }\r\ndiv.langMenu ul\r\n {\r\n list-style-type: none;\r\n padding-left: 5px;\r\n margin-left: 0px;\r\n }\r\n.lang, .ilang /* controls the multilang tag styles */\r\n {\r\n color: #333333;\r\n font-family: MS Pゴシック, Verdana, Arial, Helvetica, sans-serif;\r\n font-size: 75%;\r\n font-weight: normal;\r\n font-style: normal;\r\n }\r\nh1 .lang, h1 .ilang \r\n {\r\n font-size: 65%;\r\n }\r\ndiv.filtered\r\n {\r\n margin-top: .6em;\r\n margin-bottom: .6em;\r\n margin-left: -7px;\r\n padding: 0px 0px 0px 6px;\r\n border-left: 1px solid #999999;\r\n background: #ffffff;\r\n }\r\ndiv.filtered h1, div.filtered h2, div.filtered h3, div.filtered h4\r\n {\r\n margin-left: -22px;\r\n }\r\ndiv.filtered span.lang\r\n {\r\n position: relative;\r\n left: 0px;\r\n }\r\n\r\n/* --------------------------------------------------\r\n PARAMETER POPUP STYLES\r\n-------------------------------------------------- */\r\n\r\ndiv.reftip /* Defines the RefTip popup in Syntax */\r\n {\r\n position: absolute;\r\n z-index: 1;\r\n visibility: hidden;\r\n border: 1px solid #999999;\r\n background: #ffffcc;\r\n/* padding: 0px 0px 0px 0px; */ \r\n }\r\ndiv.reftip dl /* Sets margin around the text within the popup */\r\n {\r\n margin: 3px 8px 8px 8px;\r\n }\r\na.synParam /* parameter popup links */\r\n {\r\n color: #0000ff; /* Must match the a:link style color */\r\n text-decoration: underline;\r\n }\r\na.synParam:visited /* ensures parameter popup links are always the unvisited color */\r\n {\r\n color: #0000ff; /* Must match the a:link style color */\r\n text-decoration: underline;\r\n }\r\na.synParam:hover /* parameter popup links */\r\n {\r\n color: #3366ff; /* Must match the a:hover style color */\r\n text-decoration: underline;\r\n font-style: italic;\r\n }\r\n\r\n/* COMMENT OUT GLOSSARY SECTION\r\n/* GLOSSARY POPUP STYLES - Not used by Visual Studio.net */\r\n\r\n/*div#popUpWindow\r\n { Controlled by the script in the variable L_PopUpBoxStyle_Style\r\n }*/\r\na.glosslink:link\r\n {\r\n color: #000000;\r\n }\r\na.glosslink:visited\r\n {\r\n color: #000000; \r\n }\r\na.glosslink:hover\r\n {\r\n color: #000000;\r\n font-style: italic;\r\n }\r\ndiv#popUpWindow h5 /* Controls the style of the Term in Glossary Popups */\r\n {\r\n margin: 5px 5px 5px 5px;\r\n color: #000000;\r\n }\r\ndiv#popUpWindow p /* Controls the style of the Text in Glossary Popups */\r\n {\r\n margin: 5px 5px 5px 5px;\r\n color: #000000;\r\n }\r\np.GLOSSARY_TEXT\r\n {\r\n }\r\ndiv#popUpWindow a /* Controls the style of the Links in Glossary Popups */\r\n {\r\n }\r\n\r\n*//* END COMMENT OUT OF GLOSSARY SECTION */\r\n\r\n/* END STYLES REQUIRED BY THE SCRIPT \r\n================================================== */\r\n</style>\r\n<!--CSS_END--></HEAD>\r\n<body topmargin=0 id=\"bodyID\" class = \"dtBODY\">\r\n\r\n<!--NONSCROLLING BANNER START-->\r\n<div id=\"nsbanner\">\r\n<div id=\"bannerrow1\">\r\n<TABLE CLASS=\"bannerparthead\" CELLSPACING=0>\r\n<TR ID=\"hdr\">\r\n<TD CLASS=\"runninghead\" nowrap>JScript</TD>\r\n<TD CLASS=\"product\" nowrap>&nbsp;</TD>\r\n</TR>\r\n</TABLE>\r\n</div>\r\n<div id=\"TitleRow\">\r\n<H1 class=\"dtH1\"><A NAME=\"js56jsgrpregexpsyntax\"></A>正規表現の構文</H1>\r\n</div></div>\r\n<!--NONSCROLLING BANNER END-->\r\n<DIV id=\"nstext\" valign=\"bottom\">\r\n<P>正規表現は、通常の文字 (a ~ z など) と、\"メタキャラクタ\" という特殊文字から構成される文字列のパターンです。パターンによって、テキスト本文を検索するときに一致する 1 つ以上の文字列を指定します。正規表現は、検索対象の文字列と文字パターンを一致させるためのテンプレートとして機能します。</P>\r\n\r\n<P>正規表現の例をいくつか次に示します。</P>\r\n<div class=\"tablediv\"><table cellspacing=\"0\" class=\"dtTABLE\">\r\n\r\n<TR VALIGN=\"top\">\r\n<TH width=30%>JScript</TH>\r\n<TH width=30%>VBScript</TH>\r\n<TH width=40%>一致結果</TH>\r\n</TR>\r\n\r\n<TR VALIGN=\"top\">\r\n<TD width=30%>/^\\[ \\t]*$/</TD>\r\n<TD width=30%>\"^\\[ \\t]*$\"</TD>\r\n<TD width=40%>空行に一致</TD>\r\n</TR>\r\n\r\n<TR VALIGN=\"top\">\r\n<TD width=30%>/\\d{2}-\\d{5}/</TD>\r\n<TD width=30%>\"\\d{2}-\\d{5}\"</TD>\r\n<TD width=40%>2 桁の数字、ハイフン、5 桁の数字で構成される ID 番号を確認</TD>\r\n</TR>\r\n\r\n<TR VALIGN=\"top\">\r\n<TD width=30%>/&lt;(.*)&gt;.*&lt;\\/\\1&gt;/</TD>\r\n<TD width=30%>\"&lt;(.*)&gt;.*&lt;\\/\\1&gt;\"</TD>\r\n<TD width=40%>HTML タグに一致</TD>\r\n</TR>\r\n</table></div>\r\n\r\n<P>次の表は、メタキャラクタの全リストと、正規表現でのメタキャラクタの動作を示しています。</P>\r\n<div class=\"tablediv\"><table cellspacing=\"0\" class=\"dtTABLE\">\r\n\r\n<TR VALIGN=\"top\">\r\n<TH width=16%>文字</TH>\r\n<TH width=84%>説明</TH>\r\n</TR>\r\n\r\n<TR VALIGN=\"top\">\r\n<TD width=16%>\\</TD>\r\n<TD width=84%>次に続く文字が特殊文字、リテラル、後方参照、または 8 進エスケープであることを示します。たとえば、\"n\" は文字 \"n\" と一致します。'\\n' は改行文字と一致します。\"\\\\\" は \"\\\" と、\"\\(\" は \"(\" と一致します。</TD>\r\n</TR>\r\n\r\n<TR VALIGN=\"top\">\r\n<TD width=16%>^</TD>\r\n<TD width=84%>入力文字列の先頭と一致します。RegExp オブジェクトの Multiline プロパティが設定されている場合、^ は '\\n' または '\\r' の直後にも一致します。</TD>\r\n</TR>\r\n\r\n<TR VALIGN=\"top\">\r\n<TD width=16%>$</TD>\r\n<TD width=84%>入力文字列の末尾と一致します。RegExp オブジェクトの Multiline プロパティが設定されている場合、$ は '\\n' または '\\r' の直前にも一致します。</TD>\r\n</TR>\r\n\r\n<TR VALIGN=\"top\">\r\n<TD width=16%>*</TD>\r\n<TD width=84%>直前のサブ式と 0 回以上一致します。たとえば、\"zo*\" は \"z\" とも \"zoo\" とも一致します。* は {0,} と同じ意味になります。</TD>\r\n</TR>\r\n\r\n<TR VALIGN=\"top\">\r\n<TD width=16%>+</TD>\r\n<TD width=84%>直前のサブ式と 1 回以上一致します。たとえば、\"zo+\" は \"zo\" や \"zoo\" とは一致しますが、\"z\" とは一致しません。+ は {1,} と同じ意味になります。</TD>\r\n</TR>\r\n\r\n<TR VALIGN=\"top\">\r\n<TD width=16%>?</TD>\r\n<TD width=84%>直前のサブ式と 0 回または 1 回一致します。たとえば、\"do(es)?\" は \"do\" または \"does\" の\"do\" と一致します。? は {0,1} と同じ意味になります。</TD>\r\n</TR>\r\n\r\n<TR VALIGN=\"top\">\r\n<TD width=16%>{<I>n</I>}</TD>\r\n<TD width=84%><I>n</I> には 0 以上の整数を指定します。正確に <I>n</I> 回一致します。たとえば、'o{2}' は \"Bob\" の 'o' とは一致しませんが、\"food\" の 2 つの o とは一致します。</TD>\r\n</TR>\r\n\r\n<TR VALIGN=\"top\">\r\n<TD width=16%>{<I>n</I>,}</TD>\r\n<TD width=84%><I>n</I> には 0 以上の整数を指定します。少なくとも <I>n</I> 回一致します。たとえば、'o{2}' は \"Bob\" の \"o\" とは一致しませんが、\"foooood\" のすべての o とは一致します。'o{1,}' は 'o+' と同じ意味になります。'o{0,}' は 'o*' と同じ意味になります。</TD>\r\n</TR>\r\n\r\n<TR VALIGN=\"top\">\r\n<TD width=16%>{<I>n</I>,<I>m</I>}</TD>\r\n<TD width=84%><I>m</I> および <I>n</I> には 0 以上の整数を指定します。<I>n</I> は <I>m </I>以下です。<I>n</I> ~ <I>m</I> 回一致します。たとえば、\"o{1,3}\" は \"fooooood\" の最初の 3 つの o と一致します。'o{0,1}' は 'o?' と同じ意味になります。カンマと数の間には、スペースを入れないでください。</TD>\r\n</TR>\r\n\r\n<TR VALIGN=\"top\">\r\n<TD width=16%>?</TD>\r\n<TD width=84%>ほかの修飾子 (*, +, ?, {<I>n</I>}, {<I>n</I>,}, {<I>n</I>,<I>m</I>}) の直後に指定すると、一致パターンを制限することができます。既定のパターンでは、できるだけ多数の文字列と一致するのに比べて、制限されたパターンでは、できるだけ少ない文字列と一致します。たとえば、文字列 \"oooo\" に対して、'o+?' を指定すると 1 つの \"o\" と一致し、'o+' を指定するとすべての 'o' と一致します。</TD>\r\n</TR>\r\n\r\n<TR VALIGN=\"top\">\r\n<TD width=16%>.</TD>\r\n<TD width=84%>\"\\n\" を除く任意の 1 文字に一致します。'\\n' など、任意の文字と一致するには、'[.\\n]' などのパターンを指定します。</TD>\r\n</TR>\r\n\r\n<TR VALIGN=\"top\">\r\n<TD width=16%>(<I>pattern</I>)</TD>\r\n<TD width=84%><I>pattern</I> と一致した文字列を記憶します。記憶した一致文字列は、VBScript の SubMatches コレクションまたは JScript の $0...$9 プロパティを使用して Matches コレクションから取得できます。かっこ ( ) と一致するには、'\\(' または '\\)' を指定します。</TD>\r\n</TR>\r\n\r\n<TR VALIGN=\"top\">\r\n<TD width=16%>(?:<I>pattern</I>)</TD>\r\n<TD width=84%><I>pattern</I> と一致しても、その文字列は記憶されず、後で使用することはできません。\"or\" を意味する (|) を使用してパターンの一部を結合するときに便利です。たとえば、'industry|industries' と指定する代わりに、'industr(?:y|ies)' と指定する方が簡単です。</TD>\r\n</TR>\r\n\r\n<TR VALIGN=\"top\">\r\n<TD width=16%>(?=<I>pattern</I>)</TD>\r\n<TD width=84%><I>pattern </I>で指定した文字列が続く場合に一致と見なされます (肯定先読み)。一致した文字列は記憶されず、後で使用することはできません。たとえば、\"Windows(?=95|98|NT|2000)\" は \"Windows 2000 \" の \"Windows\" には一致しますが、\"Windows 3.1\" の \"Windows \" には一致しません。先読み処理では、読み進まれた文字は処理済みとは見なされません。一致の検出後、次の検索処理は先読みされた文字列の後からではなく、一致文字列のすぐ後から開始されます。</TD>\r\n</TR>\r\n\r\n<TR VALIGN=\"top\">\r\n<TD width=16%>(?!<I>pattern</I>)</TD>\r\n<TD width=84%><I>pattern</I> で指定しない文字列が続く場合に一致と見なされます (否定先読み)。一致した文字列は記憶されず、後で使用することはできません。たとえば、\"Windows(?=95|98|NT|2000)\" は \"Windows 3.1\" の \"Windows\" には一致しますが、\"Windows 2000\" の \"Windows \" には一致しません。先読み処理では、読み進まれた文字は処理済みとは見なされません。一致の検出後、次の検索処理は先読みされた文字列の後からではなく、一致文字列のすぐ後から開始されます。</TD>\r\n</TR>\r\n\r\n<TR VALIGN=\"top\">\r\n<TD width=16%><I>x</I>|<I>y</I></TD>\r\n<TD width=84%><I>x</I> または <I>y</I> と一致します。たとえば、'z|food' は \"z\" または \"food\" と一致します。\"(z|f)ood\" は \"zoo\" または \"food\" に一致します。</TD>\r\n</TR>\r\n\r\n<TR VALIGN=\"top\">\r\n<TD width=16%>[<I>xyz</I>]</TD>\r\n<TD width=84%>文字セットを指定します。角かっこで囲まれた文字の中のいずれかに一致します。たとえば、'[abc]' は \"plain\" の 'a' と一致します。</TD>\r\n</TR>\r\n\r\n<TR VALIGN=\"top\">\r\n<TD width=16%>[^<I>xyz</I>]</TD>\r\n<TD width=84%>除外する文字セットを指定します。角かっこで囲まれた文字以外の文字に一致します。たとえば、'[^abc]' は \"plain\" の 'p' と一致します。</TD>\r\n</TR>\r\n\r\n<TR VALIGN=\"top\">\r\n<TD width=16%>[<I>a-z</I>]</TD>\r\n<TD width=84%>除外する文字の範囲を指定します。指定された範囲にある文字と一致します。たとえば、\"[a-z]\" は小文字の英字 \"a\" から \"z\" の範囲にある任意の文字と一致します。</TD>\r\n</TR>\r\n\r\n<TR VALIGN=\"top\">\r\n<TD width=16%>[^<I>a-z</I>]</TD>\r\n<TD width=84%>否定の文字の範囲。指定範囲以外の文字と一致します。たとえば、\"[^<I>a-z</I>]\" は小文字の英字 \"a\" から \"z\" の範囲外にある任意の文字と一致します。</TD>\r\n</TR>\r\n\r\n<TR VALIGN=\"top\">\r\n<TD width=16%>\\b</TD>\r\n<TD width=84%>単語の境界と一致します。単語の境界とは、単語とスペースとの間の位置のことです。たとえば、'er\\b' は \"never\" の 'er' と一致しますが、\"verb\" の 'er' とは一致しません。</TD>\r\n</TR>\r\n\r\n<TR VALIGN=\"top\">\r\n<TD width=16%>\\B</TD>\r\n<TD width=84%>単語境界以外と一致します。たとえば、'er\\B' は \"verb\" の 'er' と一致しますが、\"never\" の 'er' とは一致しません。</TD>\r\n</TR>\r\n\r\n<TR VALIGN=\"top\">\r\n<TD width=16%>\\c<I>x</I></TD>\r\n<TD width=84%><I>x</I> で指定した制御文字と一致します。たとえば、\\cM は Control-M またはキャリッジ リターン文字と一致します。<I>x </I>の値は、A-Z または a-z の範囲内で指定します。それ以外を指定すると、リテラル文字 \"c\" と認識されます。</TD>\r\n</TR>\r\n\r\n<TR VALIGN=\"top\">\r\n<TD width=16%>\\d</TD>\r\n<TD width=84%>任意の 10 進文字と一致します。[0-9] と同じ意味になります。</TD>\r\n</TR>\r\n\r\n<TR VALIGN=\"top\">\r\n<TD width=16%>\\D</TD>\r\n<TD width=84%>10 進数字以外の任意の 1 文字と一致します。[^0-9] と同じ意味になります。</TD>\r\n</TR>\r\n\r\n<TR VALIGN=\"top\">\r\n<TD width=16%>\\f</TD>\r\n<TD width=84%>フォームフィード文字と一致します。\\x0c および \\cL と同じ意味になります。</TD>\r\n</TR>\r\n\r\n<TR VALIGN=\"top\">\r\n<TD width=16%>\\n</TD>\r\n<TD width=84%>改行文字と一致します。\\x0a および \\cJ と同じ意味になります。</TD>\r\n</TR>\r\n\r\n<TR VALIGN=\"top\">\r\n<TD width=16%>\\r</TD>\r\n<TD width=84%>キャリッジ リターン文字と一致します。\\x0d および \\cM と同じ意味になります。</TD>\r\n</TR>\r\n\r\n<TR VALIGN=\"top\">\r\n<TD width=16%>\\s</TD>\r\n<TD width=84%>スペース、タブ、フォームフィードなどの任意の空白文字と一致します。[&nbsp;\\f\\n\\r\\t\\v] と同じ意味になります。</TD>\r\n</TR>\r\n\r\n<TR VALIGN=\"top\">\r\n<TD width=16%>\\S</TD>\r\n<TD width=84%>空白文字以外の任意の文字と一致します。[^&nbsp;\\f\\n\\r\\t\\v] と同じ意味になります。</TD>\r\n</TR>\r\n\r\n<TR VALIGN=\"top\">\r\n<TD width=16%>\\t</TD>\r\n<TD width=84%>タブ文字と一致します。\\x09 および \\cI と同じ意味になります。</TD>\r\n</TR>\r\n\r\n<TR VALIGN=\"top\">\r\n<TD width=16%>\\v</TD>\r\n<TD width=84%>垂直タブ文字と一致します。\\x0b および \\cK と同じ意味になります。</TD>\r\n</TR>\r\n\r\n<TR VALIGN=\"top\">\r\n<TD width=16%>\\w</TD>\r\n<TD width=84%>単語に使用される任意の文字と一致します。アンダースコアも含まれます。'[A-Za-z0-9_]' と同じ意味になります。</TD>\r\n</TR>\r\n\r\n<TR VALIGN=\"top\">\r\n<TD width=16%>\\W</TD>\r\n<TD width=84%>単語に使用される文字以外の任意の文字と一致します。'[^A-Za-z0-9_]' と同じ意味になります。</TD>\r\n</TR>\r\n\r\n<TR VALIGN=\"top\">\r\n<TD width=16%>\\x<I>n</I></TD>\r\n<TD width=84%><I>n </I>に指定した 16 進数のエスケープ値と一致します。16 進数のエスケープ値は 2 桁である必要があります。たとえば、'\\x41' は \"A\" と一致します。'\\x041' は '\\x04' および \"1\" と同じ意味になります。この表記により、正規表現で ASCII コードを使用できるようになります。</TD>\r\n</TR>\r\n\r\n<TR VALIGN=\"top\">\r\n<TD width=16%>\\<I>num</I></TD>\r\n<TD width=84%><I>num</I> と一致します。<I>num</I> には正の整数を指定します。既に見つかって記憶されている部分と一致します。たとえば、'(.)\\1' は、連続する 2 つの同じ文字と一致します。</TD>\r\n</TR>\r\n\r\n<TR VALIGN=\"top\">\r\n<TD width=16%>\\<I>n</I></TD>\r\n<TD width=84%>8 進エスケープ値または後方参照を指定します。\\<I>n</I> の前に少なくとも <I>n</I> 個の記憶されたサブ式がある場合は、<I>n</I> は後方参照になります。それ以外の場合で <I>n</I> が 8 進数値 (0-7) である場合は、<I>n</I> は 8 進エスケープです。</TD>\r\n</TR>\r\n\r\n<TR VALIGN=\"top\">\r\n<TD width=16%>\\<I>nm</I></TD>\r\n<TD width=84%>8 進数のエスケープ値または後方参照を指定します。\\<I>nm</I> の前に少なくとも <I>nm</I> 個の記憶されたサブ式がある場合は、<I>nm</I> は後方参照になります。\\<I>nm</I> の前に少なくとも <I>n</I> 個の記憶されたサブ式がある場合は、<I>n</I> が後方参照になります。どちらの条件にも当てはまらない場合で <I>n </I>および <I>m</I> が 8 進数 (0-7) である場合は、\\<I>nm</I> は 8 進数のエスケープ値 <I>nm</I> と一致します。</TD>\r\n</TR>\r\n\r\n<TR VALIGN=\"top\">\r\n<TD width=16%>\\<I>nml</I></TD>\r\n<TD width=84%><I>n</I> が 8 進数値 (0-3) で、<I>m</I> と <I>l</I> が 8 進数値 (0-7) の場合、8 進エスケープ値 <I>nml</I> と一致します。</TD>\r\n</TR>\r\n\r\n<TR VALIGN=\"top\">\r\n<TD width=16%>\\u<I>n</I></TD>\r\n<TD width=84%><I>n</I> と一致します。<I>n</I> には Unicode 文字で表した 4 桁の 16 進数を指定します。たとえば、\\u00A9 は著作権の記号 (&copy;)と一致します。</TD>\r\n</TR>\r\n</table></div>\r\n<!--Footer Start-->\r\n<DIV CLASS=\"footer\">\r\n<br>\r\n<HR><!--Copyright-->\r\n<p>&copy; 2001 Microsoft Corporation. All rights reserved.</p></div> <!--Closes the footer div-->\r\n</div> <!--closes the topic content div-->\r\n<!--FOOTER_END-->\r\n</BODY>\r\n</HTML>\r\n"
},
"hta":{
"sample.hta" : "<html>\r\n<head>\r\n <title>行番号</title>\r\n <style type=\"text/css\">\r\n .max{width:100%;height:100%}\r\n .w-max{width:100%}\r\n .nowrap{white-space:nowrap}\r\n .ta-c{text-align:center}\r\n .bc{border-collapse:collapse}\r\n .of-auto{overflow:auto}\r\n .of-hidden{overflow:hidden}\r\n .border1{border:solid 1px #000}\r\n </style>\r\n</head>\r\n<body class=\"of-hidden\">\r\n <table class=\"bc max\">\r\n <tr><td><textarea id=ta class=max wrap=off></textarea></td></tr>\r\n <tr><td><textarea id=ta1 class=max wrap=off></textarea></td></tr>\r\n <tr height=1><td>行:<input id=inp行> 列:<input id=inp列></td></tr>\r\n </table>\r\n</body>\r\n<script>\r\n resizeTo(400,400)\r\n ta.onkeyup=ta.onkeydown=function(){\r\n var r=document.selection.createRange()\r\n r.moveStart('character', -this.value.length)\r\n r.moveEnd ('character', 1)\r\n var reg=/\\n/g, res=r.text.match(reg), 行, 列\r\n if(res){\r\n 行 = res.length\r\n 列 = RegExp.rightContext.length - 1\r\n }else{\r\n 行 = 0\r\n 列 = r.text.length - 1\r\n }\r\n inp行.value = 行\r\n inp列.value = 列\r\n }\r\n</script>\r\n</html>\r\n",
"行番号とtab入力と自動インデント.hta" : "<hta:application id=hta icon=icon.ico>\r\n<html>\r\n<head>\r\n <title>自動インデント</title>\r\n <style type=\"text/css\">\r\n .max{width:100%;height:100%}\r\n .w-max{width:100%}\r\n .bc{border-collapse:collapse}\r\n .of-hidden{overflow:hidden}\r\n .nowrap{white-space:nowrap}\r\n .border1{border:solid 1px #000}\r\n </style>\r\n</head>\r\n<body class=\"of-hidden\">\r\n <table class=\"bc max\">\r\n <tr><td><textarea id=ta class=max wrap=off style=\"line-height:1.2em\"></textarea></td></tr>\r\n <tr height=1>\r\n <td>\r\n <table class=\"bc w-max\">\r\n <td><input id=inpPath class=w-max></td>\r\n <td width=1><button id=btnDrop>drop</button></td>\r\n <td width=1>行</td>\r\n <td width=1 class=border1 style=\"padding:1 6 1 6\"><span id=span行 class=nowrap></span></td>\r\n <td width=1>列</td>\r\n <td width=1 class=border1 style=\"padding:1 6 1 6\"><span id=span列 class=nowrap></span></td>\r\n </table>\r\n </td>\r\n </tr>\r\n </table>\r\n <hr id=hr style=\"position:absolute\">\r\n</body>\r\n<script>\r\n resizeTo(400,400)\r\n document.body.onkeydown=function(){\r\n if(event.ctrlKey){\r\n switch(event.keyCode){\r\n case 66: 実行() // B\r\n case 83: 保存() // S\r\n }\r\n }\r\n }\r\n 実行=function(){\r\n var path=inpPath.value\r\n if(!path){ return inpPath.select(), alert('pathを入力してください') }\r\n shell.run(pathDQ(path))\r\n }\r\n 保存=function(){\r\n var path=inpPath.value\r\n if(!path){ return inpPath.select(), alert('pathを入力してください') }\r\n fso.Write(path, ta.value)\r\n }\r\n ta.onscroll=ta.onfocus=ta.onclick=ta.onkeyup=ta.onkeydown=function(){\r\n var obj=getテキストカーソル位置(this), str=this.value.slice(0,obj.start), arr=str.split('\\n')\r\n span行[iT] = arr.length\r\n span列[iT] = arr[arr.length-1].length + 1\r\n カーソル追従()\r\n }\r\n sumOffset=function(elem, p){\r\n var n=elem[p], PA='parentNode', n0\r\n while(elem[PA]){ n0=(elem=elem[PA])[p], n += isFinite(n0) ? n0 : 0 }\r\n return n\r\n }\r\n カーソル追従=function(){\r\n var lh=getLineHeight(ta), s=hr.style\r\n s.top = sumOffset(ta,'offsetTop') + lh * span行[iT] - ta.scrollTop\r\n s.left = sumOffset(ta,'offsetLeft')\r\n s.width = ta.clientWidth\r\n }\r\n getLineHeight=function(ta){\r\n var c=document.body.insertBefore(ta.cloneNode(true)), h='scrollHeight', v=c.value='', h0=c[h], v=c.value='A\\n', h1=c[h]\r\n return c.removeNode(true), h1-h0\r\n }\r\n ta.onkeydown=function(){\r\n var obj={9:タブキー操作, 13:エンターキー操作}, kc=event.keyCode\r\n return obj[kc] ? obj[kc](this) : 0\r\n }\r\n エンターキー操作=function(elem){\r\n var obj=getテキストカーソル位置(elem), res=elem.value.slice(0,obj.start).match(/(\\r?\\n?)([\\t ]*)[^\\r\\n]*$/), rng=document.selection.createRange()\r\n rng.text = (res[1] || '\\r\\n')+res[2]\r\n rng.select()\r\n return false\r\n }\r\n タブキー操作=function(elem){\r\n event.cancelBubble = true\r\n \r\n var obj=getテキストカーソル位置(elem), rng=document.selection.createRange(), v=elem.value, L=v.length, str=v.slice(obj.start, obj.end)\r\n if(event.shiftKey){\r\n if(str){\r\n rng.text = str.replace(/\\n\\t|\\n {4}/g,'\\n').replace(/^\\t|^ {4}/g,'')\r\n }else if(obj.end < L){\r\n var 文字数=Math.min(4,L-obj.end), reg=/^\\t|^ {1,4}/, res\r\n rng.moveEnd('character', 文字数)\r\n if(res=rng.text.match(reg)){}else{ return false }\r\n rng.text = rng.text.replace(reg,'')\r\n rng.moveEnd('character', -(4-res[0].length))\r\n rng.select()\r\n }\r\n }else{\r\n rng.text = '\\t' + str.replace(/\\n/g,'\\n\\t')\r\n }\r\n \r\n return false\r\n }\r\n getテキストカーソル位置=function(elem){\r\n // 左記URLのページを参照させていただきました。 http://d.hatena.ne.jp/nakazawaken1/20100125/p1\r\n var rngSel=document.selection.createRange(), rngElem=document.body.createTextRange()\r\n rngElem.moveToElementText(elem)\r\n \r\n // rngSelより前の範囲を選択する(rngElemのEndをrngSelのStart位置に合わせる)\r\n rngElem.setEndPoint('EndToStart', rngSel)\r\n \r\n var f=function(rng){\r\n var str=rng.text, str0=str\r\n // 選択文字数が0でない間(前の範囲)\r\n while(rng.compareEndPoints('StartToEnd', rng) != 0){\r\n // 一文字ずつ範囲終了位置を前にずらしていく\r\n rng.moveEnd('character', -1)\r\n \r\n // ずらす前と後の文字列が異なる状態ならbreak\r\n if(str0 != rng.text){break}\r\n \r\n // ずらす前と後の値が同じ状態の間は改行を付け足していく。\r\n str += '\\r\\n'\r\n }\r\n return str\r\n }\r\n \r\n var str前=f(rngElem), str選択=f(rngSel), start=str前.length, end=start + str選択.length\r\n return {start:start, end:end}\r\n }\r\n span行.onclick = span列.onclick = function(){\r\n var chr=this.id.split('').pop(), num=prompt(chr,this[iT])-0\r\n isFinite(num) && (this[iT]=num) && setカーソル位置(ta, span行[iT], span列[iT])\r\n }\r\n setカーソル位置=function(elem, 行,列){\r\n var arr=ta.value.split('\\r\\n'), rng=document.body.createTextRange()\r\n 行 = isFinite(行) ? 行 : 1\r\n 列 = isFinite(列) ? 列 : 1\r\n rng.moveToElementText(elem)\r\n rng.moveStart('character', arr.slice(0,行).join('\\r\\n').length - (行-1))\r\n rng.moveStart('character', 列 - (arr[行-1]||[]).length - 1)\r\n while(rng.compareEndPoints('StartToEnd', rng) != 0){ rng.moveEnd('character',-1) }\r\n rng.select()\r\n }\r\n btnDrop.onclick=function(){\r\n var pathDIR=閉じたら削除する(), pathJS=pathDIR+'/このファイルにD&Dして編集開始.js'\r\n fso.Write(pathJS,'a='+function(pathHTA){\r\n arg=WScript.Arguments\r\n if(!arg.length){return}\r\n ;(new ActiveXObject('WScript.Shell')).run('\"'+pathHTA+'\" \"'+arg(0)+'\"')\r\n }+'(\"'+decodeURI((''+document.location).replace(/^file:/,'').replace(/^\\/+(\\w:)/,'$1'))+'\")')\r\n }\r\n window.attachEvent('onload',function(){\r\n var c=hta.commandLine, reg=/\"([^\"]+)\"/g, res=c.match(reg), path\r\n if(path=res[1]){ ta.value = fso.Read(inpPath.value = path.replace(reg,'$1')) }\r\n })\r\n iT='innerText', iH='innerHTML'\r\n gt=function(d){return (d || new Date()).getTime()}\r\n 閉じたら削除する=function(){\r\n var t=gt(), pathDIR=fso.gsf2+'/'+t, pathJS=fso.gsf2+'/'+t+'.js', pathHTA=pathJS+'.hta'\r\n fso.AXO.createFolder(pathDIR)\r\n fso.Write(pathJS, '('+function(){\r\n AXO=function(name){return new ActiveXObject(name)}\r\n fs=AXO('Scripting.FileSystemObject')\r\n arg=WScript.Arguments\r\n AXO('WScript.Shell').Run(arg(0), 1, true)\r\n 待機回数 = 0\r\n while(true){\r\n try{\r\n fs.DeleteFolder(arg(1))\r\n break\r\n }catch(e){ WScript.Sleep(1000 * 10) }\r\n if(待機回数++ > 100){break}\r\n }\r\n fs.DeleteFile(arg(0))\r\n fs.DeleteFile(WScript.ScriptFullName)\r\n }+')()')\r\n var X=(window.screenLeft || window.screenX || 0) + (window.innerWidth || document.body.cliendWidth || document.documentElement.clientWidth || 300) / 2\r\n var Y=(window.screenTop || window.screenY || 0) + (window.innerHeight || document.body.cliendHeight || document.documentElement.clientHeight || 300) / 2\r\n fso.Write(pathHTA,(''+function(){/*\r\n <-title>-path-<-/title>\r\n <-style type=\"text/css\">\r\n .max{width:100%;height:100%}\r\n <-/style>\r\n <-body>\r\n <table class=max>\r\n <tr height=1><td><input style=\"width:100%\" value=\"-path-\"></td></tr>\r\n <tr><td><iframe class=max src=\"-path-\" style=\"border:solid 1px #000\"></iframe></td></tr>\r\n </table>\r\n <-/body>\r\n <-script>\r\n resizeTo(400,300)\r\n moveTo(-x- - 150, -y- - 150)\r\n <-/script>\r\n */}).split('/*')[1].split('*/')[0].replace(/<-/g,'<').replace(/-path-/g,pathDIR).replace(/-x-/,X).replace(/-y-/,Y))\r\n shell.run(pathDQ(pathJS)+' '+pathDQ(pathHTA)+' '+pathDQ(pathDIR))\r\n return pathDIR\r\n }\r\n AXO=function(name){return new ActiveXObject(name)}\r\n shell=AXO('WScript.Shell')\r\n pathDQ=function(path){return 0<path.indexOf(' ') ? ('\"'+path+'\"') : path}\r\n fso=function(){\r\n var fs=AXO('Scripting.FileSystemObject')\r\n return {\r\n AXO:fs,\r\n gsf2:fs.GetSpecialFolder(2), // Z:\\TEMP\r\n Read:function(path, swCreate, swUnicode){\r\n if(!fs.FileExists(path)){return}\r\n with(fs.OpenTextFile(path, 1, swCreate, swUnicode)){ var str=AtEndOfStream ? '' : ReadAll(); Close() }\r\n return str\r\n },\r\n Write:function(path,str,swUnicode,sw上書きしない){ with(fs.CreateTextFile(path, !sw上書きしない, swUnicode)){ Write(str); Close() } }\r\n }\r\n }()\r\n</script>\r\n</html>\r\n",
"htaタグ.hta" : "<html>\r\n<head>\r\n<HTA:APPLICATION\r\n APPLICATIONNAME=\"value\"\r\n BORDER=\"thick\" | \"dialog\" | \"none\" | \"thin\"\r\n BORDERSTYLE=\"normal\" | \"complex\" | \"raised\" | \"static\" | \"sunken\"\r\n CAPTION=\"yes\" | \"no\"\r\n CONTEXTMENU=\"yes\" | \"no\"\r\n ICON=\"value\"\r\n ID=\"value\"\r\n INNERBORDER=\"yes\" | \"no\"\r\n MAXIMIZEBUTTON=\"yes\" | \"no\"\r\n MINIMIZEBUTTON=\"yes\" | \"no\"\r\n NAVIGABLE=\"no\" | \"yes\"\r\n SCROLL=\"yes\" | \"no\" | \"auto\"\r\n SCROLLFLAT=\"no\" | \"yes\"\r\n SELECTION=\"yes\" | \"no\"\r\n SHOWINTASKBAR=\"yes\" | \"no\"\r\n SINGLEINSTANCE=\"no\" | \"yes\"\r\n SYSMENU=\"yes\" | \"no\"\r\n VERSION=\"value\"\r\n WINDOWSTATE=\"normal\" | \"maximize\" | \"minimize\" />\r\n</head>\r\n<body>\r\n</body>\r\n</html>\r\n",
"scriptCode共有.hta" : "<html>\r\n<title>終了後ファイル削除</title>\r\n<body>\r\n<input id=inp style=\"width:100%\">\r\n</body>\r\n<script id=scriptCode共有用>\r\n AXO=function(name){return new ActiveXObject(name)}\r\n shell = AXO('WScript.Shell')\r\n fso=function(){\r\n var fs=AXO('Scripting.FileSystemObject')\r\n return {\r\n AXO:fs,\r\n gsf2:fs.GetSpecialFolder(2), // Z:\\TEMP\r\n Read:function(path, swCreate, swUnicode){\r\n if(!fs.FileExists(path)){return}\r\n with(fs.OpenTextFile(path, 1, swCreate, swUnicode)){ var str=AtEndOfStream ? '' : ReadAll(); Close() }\r\n return str\r\n },\r\n Write:function(path,str,swUnicode,sw上書きしない){ with(fs.CreateTextFile(path, !sw上書きしない, swUnicode)){ Write(str); Close() } },\r\n Lock:function(path){\r\n var pathL=path+'.lock', ws, wsn=AXO('WScript.Network')\r\n try{\r\n ws=fs.CreateTextFile(pathL)\r\n ws.Write(wsn.computerName+'\\r\\n'+wsn.userName)\r\n return {Close:function(){ ws.Close(); fs.DeleteFile(pathL) }}\r\n }\r\n catch(e){\r\n return this.Read(pathL)\r\n }\r\n }\r\n }\r\n }()\r\n</script>\r\n<script>\r\n resizeTo(300,100)\r\n PID=function(){\r\n // プロセス起動中にPIDが更新されることは無いので一度取得したら取得用関数は不要なのでPIDだけ保持する。\r\n var f=function(){\r\n // 子プロセスをcscriptにすると黒い画面が一瞬表示されてしまう。\r\n // 「//B」オプションを付けないとwscriptの設定画面が表示されてしまう。\r\n var childPID = shell.Exec('wscript //B').ProcessID\r\n \r\n // 子の親(自身)のPIDを特定する\r\n var res = new Enumerator(GetObject(\"winmgmts:root\\\\CIMV2\").ExecQuery(\"SELECT * FROM Win32_Process where ProcessID=\"+childPID))\r\n return res.atEnd() ? (void 0) : res.item().ParentProcessID\r\n }\r\n // 1度目で取得に成功すればその値を返し、ダメなら2回目の処理を実行する。\r\n return f() || f()\r\n }()\r\n \r\n onload=function(){\r\n var path=inp.value=fso.gsf2+'\\\\'+(new Date()).getTime()\r\n fso.Write(path, '')\r\n wsf.終了後ファイル削除(path)\r\n }\r\n \r\n wsf=function(){\r\n var pathDQ=function(path){return 0<path.indexOf(' ') ? ('\"'+path+'\"') : path }\r\n return {\r\n newWSF:function(fun){\r\n var path=fso.gsf2+'\\\\'+(new Date()).getTime()+'.wsf'\r\n fso.Write(path, ['<-job>',scriptCode共有用.outerHTML,'<-script>','!'+fun+'()','<-/script>','<-/job>'].join('\\r\\n').replace(/<-/g,'<'))\r\n return path\r\n },\r\n 終了後ファイル削除:function(path){\r\n var m=arguments.callee\r\n if(!m.wsf){\r\n m.wsf = this.newWSF(function(){\r\n arg = WScript.Arguments\r\n PID = arg(0)\r\n path = arg(1)\r\n while(true){\r\n WScript.Sleep(1000)\r\n var res = new Enumerator(GetObject(\"winmgmts:root\\\\CIMV2\").ExecQuery(\"SELECT * FROM Win32_Process where ProcessID=\"+PID))\r\n if(res.atEnd()){break}\r\n }\r\n arr = fso.Read(path).split('\\r\\n')\r\n for(i=0,L=arr.length;i<L;i++){ fso.AXO.DeleteFile(arr[i]) }\r\n })\r\n fso.Write(m.path = m.wsf+'.list', [m.wsf, m.path].join('\\r\\n'))\r\n shell.Run('cmd /C '+pathDQ(m.wsf)+' '+PID+' '+pathDQ(m.path), 0)\r\n }\r\n var arr=fso.Read(m.path).split('\\r\\n')\r\n arr.push(path)\r\n fso.Write(m.path, arr.join('\\r\\n'))\r\n }\r\n }\r\n }()\r\n</script>\r\n</html>\r\n",
"終了後ファイル削除.hta" : "<html>\r\n<title>終了後ファイル削除</title>\r\n<body>\r\n<input id=inp style=\"width:100%\">\r\n</body>\r\n<script id=scriptCode共有用>\r\n AXO=function(name){return new ActiveXObject(name)}\r\n shell = AXO('WScript.Shell')\r\n fso=function(){\r\n var fs=AXO('Scripting.FileSystemObject')\r\n return {\r\n AXO:fs,\r\n gsf2:fs.GetSpecialFolder(2), // Z:\\TEMP\r\n Read:function(path, swCreate, swUnicode){\r\n if(!fs.FileExists(path)){return}\r\n with(fs.OpenTextFile(path, 1, swCreate, swUnicode)){ var str=AtEndOfStream ? '' : ReadAll(); Close() }\r\n return str\r\n },\r\n Write:function(path,str,swUnicode,sw上書きしない){ with(fs.CreateTextFile(path, !sw上書きしない, swUnicode)){ Write(str); Close() } },\r\n Lock:function(path){\r\n var pathL=path+'.lock', ws, wsn=AXO('WScript.Network')\r\n try{\r\n ws=fs.CreateTextFile(pathL)\r\n ws.Write(wsn.computerName+'\\r\\n'+wsn.userName)\r\n return {Close:function(){ ws.Close(); fs.DeleteFile(pathL) }}\r\n }\r\n catch(e){\r\n return this.Read(pathL)\r\n }\r\n }\r\n }\r\n }()\r\n</script>\r\n<script>\r\n resizeTo(300,100)\r\n PID=function(){\r\n // プロセス起動中にPIDが更新されることは無いので一度取得したら取得用関数は不要なのでPIDだけ保持する。\r\n var f=function(){\r\n // 子プロセスをcscriptにすると黒い画面が一瞬表示されてしまう。\r\n // 「//B」オプションを付けないとwscriptの設定画面が表示されてしまう。\r\n var childPID = shell.Exec('wscript //B').ProcessID\r\n \r\n // 子の親(自身)のPIDを特定する\r\n var res = new Enumerator(GetObject(\"winmgmts:root\\\\CIMV2\").ExecQuery(\"SELECT * FROM Win32_Process where ProcessID=\"+childPID))\r\n return res.atEnd() ? (void 0) : res.item().ParentProcessID\r\n }\r\n // 1度目で取得に成功すればその値を返し、ダメなら2回目の処理を実行する。\r\n return f() || f()\r\n }()\r\n \r\n onload=function(){\r\n var path=inp.value=fso.gsf2+'\\\\'+(new Date()).getTime()\r\n fso.Write(path, '')\r\n wsf.終了後ファイル削除(path)\r\n }\r\n \r\n wsf=function(){\r\n var pathDQ=function(path){return 0<path.indexOf(' ') ? ('\"'+path+'\"') : path }\r\n var getTime=function(dat){return (dat || (new Date())).getTime()}\r\n return {\r\n newWSF:function(fun){\r\n var path=fso.gsf2+'\\\\'+getTime()+'.wsf'\r\n fso.Write(path, ['<-job>',scriptCode共有用.outerHTML,'<-script>','!'+fun+'()','<-/script>','<-/job>'].join('\\r\\n').replace(/<-/g,'<'))\r\n return path\r\n },\r\n 終了後ファイル削除:function(path){\r\n var m=arguments.callee\r\n if(!m.wsf){\r\n m.wsf = this.newWSF(function(){\r\n arg = WScript.Arguments\r\n PID = arg(0)\r\n path = arg(1)\r\n while(true){\r\n WScript.Sleep(1000)\r\n var res = new Enumerator(GetObject(\"winmgmts:root\\\\CIMV2\").ExecQuery(\"SELECT * FROM Win32_Process where ProcessID=\"+PID))\r\n if(res.atEnd()){break}\r\n }\r\n arr = fso.Read(path).split('\\r\\n')\r\n for(i=0,L=arr.length;i<L;i++){ fso.AXO.DeleteFile(arr[i]) }\r\n })\r\n fso.Write(m.path = m.wsf+'.list', [m.wsf, m.path].join('\\r\\n'))\r\n shell.Run('cmd /C '+pathDQ(m.wsf)+' '+PID+' '+pathDQ(m.path), 0)\r\n }\r\n var arr=fso.Read(m.path).split('\\r\\n')\r\n arr.push(path)\r\n fso.Write(m.path, arr.join('\\r\\n'))\r\n },\r\n negoWrite:function(path, fun, fun終了後){\r\n // path…整合性を維持したいファイルのpath\r\n \r\n // fun …ロック成功したら「fun(path)」の形で実行される関数\r\n \r\n // fun終了後…上記funの完了をhta側で検知したら実行される関数。\r\n // ただしwindow.onbeforeunloadが発生した場合はこの処理は省略される(実行前にhtaが終了してしまう)ので\r\n // ファイルの後始末などはこの関数では行わないこと。(hta画面上の表示内容変更などを行うための関数)\r\n var m=arguments.callee\r\n if(!m.wsf){\r\n m.wsf = this.newWSF(function(){\r\n arg = WScript.Arguments\r\n path = arg(0)\r\n pathFunc = arg(1)\r\n pathLock = path+'.lock'\r\n wsn = AXO('WScript.Network')\r\n eval('arrF = '+fso.Read(pathFunc))\r\n while(true){\r\n try{\r\n lock = fso.AXO.CreateTextFile(pathLock)\r\n lock.Write(wsn.computerName+'\\r\\n'+wsn.userName)\r\n }\r\n catch(e){ WScript.Sleep(1000 * 10 * Math.random()) }\r\n }\r\n for(i=0,L=arrF.length;i<L;i++){ arrF[i](path) }\r\n lock.Close()\r\n })\r\n this.終了後ファイル削除(m.wsf)\r\n \r\n m.obj={}\r\n }\r\n \r\n // pathに対するfunを一時的に保管しておくための配列が未作成なら作成する。\r\n if(!m.obj[path]){ m.obj[path] = [] }\r\n \r\n m.obj[path].push(fun)\r\n m.obj[path].保留開始 = getTime()\r\n var 保留期間 = 1000 * 10\r\n \r\n var fun期間経過後=function(){\r\n // 保留期間中に保留開始時刻が更新された場合は、更新時に新しいsetTimeoutが実行されているので古い方は終了する。\r\n if(getTime() < (m.obj[path].保留開始+保留期間)){return}\r\n \r\n var pathF=fso.gsf2+'\\\\fun'+getTime()+'.js', pathO=pathF+'.txt'\r\n var リダイレクト = fun終了後 ? (' > '+pathDQ(pathO)) : ''\r\n fso.Write(pathF, '['+m.obj[path]+']')\r\n shell.run('cmd /C cscript '+pathDQ(pathWSF)+' '+pathDQ(path)+' '+pathDQ(pathF)+リダイレクト, 0)\r\n if(!fun終了後){return}\r\n var objIV=setInterval(function(){\r\n if(!fso.AXO.FileExists(pathO)){return}\r\n try{fso.AXO.DeleteFile(pathO)}catch(e){return}\r\n fun終了後()\r\n clearInterval(objIV)\r\n },1000)\r\n }\r\n setTimeout(fun期間経過後, 保留期間)\r\n \r\n // ウィンドウのonbeforeunloadイベントが発生したら即時実行されるようにしておく。\r\n window.attachEvent('onbeforeunload', function(){\r\n m.obj[path].保留開始 = fun終了後 = 0\r\n fun期間経過後\r\n })\r\n }\r\n }\r\n }()\r\n</script>\r\n</html>\r\n",
"最前面.hta" : "<html>\r\n<head>\r\n <title>最前面</title>\r\n <style type=\"text/css\">\r\n .max{width:100%;height:100%;}\r\n .w-max{width:100%;}\r\n .ta-c{text-align:center;}\r\n button{width:25%;padding:3px;}\r\n </style>\r\n</head>\r\n<body style=\"overflow:hidden;margin:0px;\">\r\n <div id=div最前面 style=\"display:none;position:absolute;top:0px;left:0px;\" class=max>\r\n <div style=\"position:absolute;background-color:#000;filter:alpha(opacity=50);\" class=max></div>\r\n <table class=max style=\"position:absolute;\"><td class=ta-c><table onClick=\"event.cancelBubble=true\"><td id=td最前面 style=\"background-color:#fff;padding:10px;\">少々お待ちください。。</td></table></td></table>\r\n </div>\r\n \r\n <table class=max>\r\n <tr height=1>\r\n <td>\r\n <select id=sel class=w-max></select>\r\n <textarea id=ta0 class=w-max style=\"height:100px;\"></textarea>\r\n <button id=btn>now Date</button>\r\n <button id=btn1>最前面1</button>\r\n <button id=btn2>最前面2</button>\r\n <button id=btn3>最前面3</button>\r\n </td>\r\n </tr>\r\n <tr><td><textarea id=ta1 class=max></textarea></td></tr>\r\n </table>\r\n</body>\r\n<script>\r\n resizeTo(350,550)\r\n fun=function(){ var f; eval('f = '+ta0.value); f() }\r\n fun追記=function(elem){ ta1.value += (new Date()) + '\\n' + elem.innerText +'\\n\\n' }\r\n btn.onclick = function(){ fun追記(this) }\r\n btn1.onclick = function(){\r\n fun追記(this)\r\n div最前面.style.display = 'block'\r\n fun()\r\n div最前面.style.display = 'none'\r\n }\r\n btn2.onclick = function(){\r\n fun追記(this)\r\n div最前面.style.display = 'block'\r\n setTimeout(fun2,0)\r\n }\r\n fun2=function(){\r\n fun()\r\n div最前面.style.display = 'none'\r\n }\r\n btn3.onclick = function(){\r\n fun追記(this)\r\n div最前面.style.display = 'block'\r\n setTimeout(fun3,0)\r\n }\r\n fun3=function(){\r\n fun()\r\n setTimeout(function(){div最前面.style.display = 'none'},0)\r\n }\r\n onload=function(){\r\n var ops=sel.options, i=0\r\n ops[i++] = new Option('cmd /C settimeout /T 5', function(){ (new ActiveXObject('WScript.Shell')).Run('cmd /C timeout /T 5', 1, true) })\r\n ops[i++] = new Option('while', function(){ var f=function(){return (new Date()).getTime()}, t=f(); while((f()-t)<5000){} })\r\n ops[0].selected = true\r\n sel.onchange()\r\n }\r\n sel.onchange=function(){ ta0.value = sel.options[sel.selectedIndex].value }\r\n</script>\r\n</html>\r\n",
"カレンダー.hta" : "<html>\r\n<title>カレンダー</title>\r\n<body style=\"text-align:center;\">\r\n <input id=inp value='2017/2/1'><button id=btn>表示</button>\r\n <div id=div></div>\r\n</body>\r\n<script>\r\n resizeTo(300,700)\r\n onl=function(f){window.attachEvent('onload',f)}\r\n \r\n btn.onclick = function(){\r\n var objSD=objカレンダー.specialDay.get('2017/02/27', function(elem){\r\n elem.title = '誕生日'\r\n elem.style.backgroundColor = '#3c3'\r\n })\r\n var objNew=objカレンダー.新規(new Date(inp.value), objSD, 3, 1)\r\n div[iT] = ''\r\n div[iB](objNew.elems.TBL)\r\n objNew.onclick=function(dat, td, obj){ confirm(dat) }\r\n }\r\n \r\n onl(function(){\r\n var ce=function(name){return document.createElement(name)}\r\n var div=ce('div'), tbl, tbody, tr, td\r\n div.innerHTML = '<table border=1><td></td></table>'\r\n tbl = div[FI].removeNode(true)\r\n tbody = tbl[FI]\r\n tr = tbody[FI]\r\n td = tr[FI]\r\n setProp(td.style, {width:'24px', height:'24px', fontSize:'12px', textAlign:'center'})\r\n for(var i=0;i<6;i++){ tr[iB](td.cloneNode(true)) }\r\n for0L('日月火水木金土'.split(''), function(i,chr){ tr[CN][i][iT] = chr })\r\n tr[CN][0].style.backgroundColor = '#fcc'\r\n tr[CN][6].style.backgroundColor = '#ccf'\r\n var get年月日=function(dat){return {年:dat.getFullYear(), 月:dat.getMonth()+1, 日:dat.getDate()}}\r\n var str年月日=function(dat){with(get年月日(dat)){return [年,月,日].join('/')}}\r\n objカレンダー={\r\n 新規:function(dat, objSpecialDay, 月数, オフセット){\r\n dat = dat || new Date()\r\n var newTBL=tbl.cloneNode(true), newTBO=newTBL[FI], obj年月日=get年月日(dat)\r\n if(オフセット){\r\n dat.setMonth(obj年月日.月-1-オフセット)\r\n obj年月日=get年月日(dat)\r\n }\r\n var 年=obj年月日.年, 月=obj年月日.月, 日=1, dat0=new Date([年, 月, 日].join('/')), 曜日, newTR\r\n \r\n newTBO[FI].removeNode(true)\r\n var obj出力={\r\n elems:{TBL:newTBL, tds:[]},\r\n onclick:null\r\n }\r\n \r\n for(var 月数i=0; 月数i<月数 ;月数i++){\r\n var td日onclick=function(){\r\n if(!obj出力.onclick){return}\r\n var m=arguments.callee\r\n obj出力.onclick(new Date(m.年,m.月-1,this[iT]-0), this, obj出力)\r\n }\r\n setProp(td日onclick, {年:年, 月:月})\r\n \r\n // 最上段:年月表示\r\n newTBO[iB](newTR=ce('TR'))\r\n newTR[iB](ce('TD'))\r\n setProp(newTR[FI], {innerHTML:'<div style=\"white-space:nowrap;text-align:center;\">'+年+'年 '+月+'月</div>', colSpan:7})\r\n \r\n newTBO[iB](tr.cloneNode(true))\r\n \r\n // 日\r\n newTBO[iB](newTR=tr.cloneNode(true))\r\n 曜日 = dat0.getDay()\r\n for(var i=0;i<曜日;i++){ newTR[CN][i][iT] = ' ' }\r\n while((月-1)==dat0.getMonth()){\r\n obj出力.elems.tds[str年月日(dat0)] = td日 = newTR[CN][曜日++]\r\n td日[iT] = 日\r\n td日.onclick = td日onclick\r\n objSpecialDay && objSpecialDay[年] && objSpecialDay[年][月] && objSpecialDay[年][月][日] && objSpecialDay[年][月][日](td日)\r\n if(曜日==7){ newTBO[iB](newTR=tr.cloneNode(true)); 曜日=0 }\r\n dat0.setDate(++日)\r\n }\r\n while(曜日<7){ newTR[CN][曜日++][iT] = ' ' }\r\n obj年月日 = get年月日(dat0)\r\n 年=obj年月日.年, 月=obj年月日.月, 日=1\r\n }\r\n \r\n return obj出力\r\n },\r\n specialDay:{\r\n add:function(dat, fun, objSD){\r\n typeof(dat)=='string' && (dat=new Date(dat))\r\n var obj=get年月日(dat), obj0={}\r\n obj0[obj.年] = {}\r\n obj0[obj.年][obj.月] = {}\r\n obj0[obj.年][obj.月][obj.日] = fun\r\n setProp(objSD, obj0, true)\r\n },\r\n get:function(dat, fun){\r\n var obj={}\r\n dat && fun && this.add(dat, fun, obj)\r\n return obj\r\n }\r\n }\r\n }\r\n })\r\n \r\n iT='innerText', iH='innerHTML', PA='parentNode', FI='firstChild', CN='childNodes', NE='nextSibling', PR='previousSibling', sI='selectedIndex', iB='insertBefore', OP='options', LEN='length'\r\n for0L = function(arr,fun){for(var i=0,L=arr[LEN],res;i<L;i++){if(res=fun(i,arr[i])){return res}}}\r\n forIn = function(obj,fun){var name,res; for(name in obj){if(res=fun(name, obj[name])){return res}}}\r\n setProp=function(objTarget, objProp, swSub, swValue){\r\n var getClone=function(){\r\n var gt=function(obj){return typeof(obj)}\r\n var gc=function(obj){return obj.constructor}\r\n var objT={}\r\n objT[gt('')] = objT[gt(0)] = objT[gt(true)] = objT[gt(objT.und)] = true\r\n var objC={}\r\n objC[gc({})] = function(obj,swSub){return setProp({}, obj, swSub)}\r\n objC[gc([])] = function(obj,swSub){return setProp([], obj, swSub)}\r\n objC[gc(/1/)] = function(obj){var re; eval('re = '+obj); return re}\r\n objC[gc(new Date())] = function(obj){return new Date(obj+'')}\r\n objC[gc(gc)] = function(obj,swSub){var f; eval('f = '+obj); return setProp(f, obj, swSub)}\r\n return function(obj, swSub){ return (objT[gt(obj)] || obj===null) ? obj : objC[gc(obj)](obj, swSub) }\r\n }()\r\n var funChildsCheck=function(){return true}\r\n var arrT=[], arrP=[], 階層=-1, arrC=[].constructor\r\n var fun=function(n,v){\r\n if(swSub && forIn(v,funChildsCheck)){\r\n fun0(arrT[階層][n] || (arrT[階層][n]=getClone(v)), v)\r\n return\r\n }\r\n if(swValue && !v){return}\r\n arrT[階層][n] = v\r\n }\r\n var fun0=function(objT, objP){\r\n arrT.push(objT)\r\n arrP.push(objP)\r\n 階層++\r\n forIn(objP, fun)\r\n 階層--\r\n arrT.pop()\r\n arrP.pop()\r\n }\r\n fun0(objTarget, objProp)\r\n return objTarget\r\n }\r\n</script>\r\n</html>\r\n",
"iframe.hta" : "<html>\r\n<head>\r\n<title>フォルダ内ファイルリスト取得</title>\r\n<style type=\"text/css\">\r\n.max{width:100%;height:100%;}\r\n</style>\r\n</head>\r\n<body>\r\n <table class=max>\r\n <tr><td><iframe name=ifrName id=ifr class=max style=\"border:solid 1px #000;\"></iframe></td></tr>\r\n <tr height=1><td><button id=btn>cls</button></td></tr>\r\n <tr height=1><td><input id=inp0 style=\"width:100%;\"></td></tr>\r\n <tr height=1><td><input id=inp1 style=\"width:100%;\"></td></tr>\r\n <tr height=1><td><select id=sel></select></td></tr>\r\n </table>\r\n</body>\r\n<script>\r\n resizeTo(400,300)\r\n onload = function(){ btn.onclick() }\r\n \r\n getEI=function(id){return document.getElementById(id)}\r\n btn.onclick = function(){\r\n var ifr_=getEI('ifr'), sw初期化, swロック\r\n ifr_.onreadystatechange=function(){\r\n if(swロック || this.readyState!='complete'){return}\r\n if(sw初期化){\r\n var doc=ifr_.contentWindow.document\r\n swロック = true\r\n doc.open()\r\n doc.write('ここにフォルダをドラッグ&ドロップしてください')\r\n doc.close()\r\n return sw初期化 = swロック = false\r\n }\r\n inp0.value = ifr.location\r\n inp1.value = decodeURI(inp0.value.replace(/^file:/,'').replace(/^\\/+(\\w:)/,'$1'))\r\n sel更新()\r\n ifr初期化()\r\n }\r\n var ifr初期化=function(){\r\n sw初期化 = true\r\n ifr.location = 'about:blank'\r\n }\r\n ifr初期化()\r\n \r\n inp0.value=inp1.value=''\r\n sel初期化()\r\n }\r\n sel初期化=function(){\r\n var ops=sel[OP]\r\n while(ops[0]){ ops[0]=null }\r\n }\r\n sel更新=function(){\r\n sel初期化()\r\n var ops=sel[OP], path=inp1.value\r\n if(!fs.FolderExists(path)){return alert('フォルダPathが取得できませんでした')}\r\n for0L(getFileList(path.replace(/[\\\\\\/]$/,'')+'\\\\*.*'), function(i,name){ ops[i] = new Option(name, path+'\\\\'+name) })\r\n }\r\n \r\n // 以下、汎用\r\n iT='innerText', iH='innerHTML', PA='parentNode', FI='firstChild', CN='childNodes', NE='nextSibling', PR='previousSibling', sI='selectedIndex', iB='insertBefore', OP='options', LEN='length'\r\n AXO=function(name){return new ActiveXObject(name)}\r\n shell = AXO('WScript.Shell')\r\n fs = AXO('Scripting.FileSystemObject')\r\n gsf2 = fs.GetSpecialFolder(2)\r\n Read = function(p){var o=fs.OpenTextFile(p), s=o.AtEndOfStream?'':o.ReadAll(); o.Close(); return s}\r\n ReadU = function(p){var o=fs.OpenTextFile(p,1,false,true), s=o.AtEndOfStream?'':o.ReadAll(); o.Close(); return s}\r\n Write = function(path,v){\r\n var flagErr\r\n try{ with(fs.CreateTextFile(path)){Write(v);return Close()} }catch(e){ flagErr=true }\r\n if(flagErr){\r\n // UTF-8でなければ保存できない文字列を含んでいる場合、エラーになる。試しにUTF-8で保存してみる。\r\n try{ with(fs.CreateTextFile(path,true,true)){Write(v);return Close()} }catch(e){\r\n // 書き込み禁止などによるエラーと推測される。\r\n alert('下記Pathファイルを保存できませんでした。\\n'+path+'\\n\\nv(先頭3行)['+(v+'').split('\\n').slice(0,3).join('\\n')+']\\n\\ncaller:'+arguments.callee.caller)\r\n }\r\n }\r\n }\r\n RAS = function(p){return Read(p).split('\\r\\n')}\r\n for0L = function(arr,fun){for(var i=0,L=arr[LEN],res;i<L;i++){if(res=fun(i,arr[i])){return res}}}\r\n forIn = function(obj,fun){var name,res; for(name in obj){if(res=fun(name, obj[name])){return res}}}\r\n execCMD=function(コマンド){\r\n var path0=gsf2+'/'+getTime(), path1=path0+'err', obj={}, fun=function(path,name){if(fs.FileExists(path)){ obj[name]=Read(path); fs.DeleteFile(path) }}\r\n shell.Run('cmd /C '+コマンド + ' > '+path0+' 2> '+path1, 0, true)\r\n fun(path0, 'StdOut')\r\n fun(path1, 'StdErr')\r\n return obj\r\n }\r\n getDirList = function(path, swFile){\r\n var pathTMP=gsf2+'/getDirList_'+getTime()+'.txt', arr\r\n var ret=execCMD('dir /A'+(swFile?'-':'')+'D /B \"'+path+'\" > \"'+pathTMP+'\"')\r\n arr = ret.StdOut ? ret.StdOut.split('\\r\\n') : []\r\n arr.pop()\r\n return arr\r\n }\r\n getFileList=function(path){return getDirList(path, true)}\r\n getTime=function(){return (new Date()).getTime()}\r\n</script>\r\n</html>",
"動作テスト機能付きHTMLソース作成.hta" : "<html>\r\n<title>動作テスト機能付きHTMLソース作成</title>\r\n<body>\r\n\r\n<div>\r\n <div style=\"margin-bottom:30px;\">\r\n <b>用途・目的</b>\r\n <textarea style=\"width:100%;height:100px;margin-bottom:30px;padding:0.5em;\" wrap=off onfocus=\"this.select()\"></textarea>\r\n <b>ソース</b>\r\n <textarea style=\"width:100%;height:100px;margin-bottom:30px;padding:0.5em;\" wrap=off onfocus=\"this.select()\"></textarea>\r\n <div>\r\n <b>サンプル</b>\r\n <textarea style=\"width:100%;height:100px;margin-bottom:30px;padding:0.5em;\" wrap=off onfocus=\"this.select()\"></textarea>\r\n <button onclick=\"eval(this.parentNode.getElementsByTagName('textarea')[0].value)\">動作テスト</button>\r\n </div>\r\n </div>\r\n \r\n <button onclick=\"var fun; eval('fun='+this.nextSibling.innerText); fun(this)\">変換</button><pre style=\"display:none;\">\r\n function(btn){\r\n var f=function(elem, name){return elem.getElementsByTagName(name) }\r\n var arrDIV=f(btn.parentNode, 'div'), arrTA=f(arrDIV[0], 'textarea')\r\n for(var i=0,L=arrTA.length;i&lt;L;i++){ arrTA[i].style.height = (arrTA[i].value.split('\\n').length + 3) + 'em' }\r\n \r\n var d=document.createElement('div'), d0=d.cloneNode(true), iH='innerHTML'\r\n d[iH] = arrDIV[0][iH]\r\n d.insertBefore(d0, f(d, 'b')[0].nextSibling)\r\n d0.innerHTML = f(d, 'textarea')[0].innerHTML.replace(/\\n/g,'&lt;br&gt;')\r\n d0.style.marginBottom = '30px'\r\n f(d, 'textarea')[0].removeNode(true)\r\n \r\n f(btn.parentNode, 'textarea')[3].value = d.innerHTML\r\n }\r\n </pre>\r\n \r\n <textarea style=\"width:100%;height:100px;margin-bottom:30px;\" wrap=off onfocus=\"this.select()\"></textarea>\r\n \r\n <button onclick=\"var f=this.parentNode.getElementsByTagName; f('div')[2].innerHTML = f('textarea')[3].value\">表示</button>\r\n \r\n <div style=\"border:solid 5px #000;padding:10px;\"></div>\r\n</div>\r\n\r\n&lt;!--more--&gt;\r\n\r\n</body>\r\n<script>\r\nresizeTo(600,1200)\r\n</script>\r\n</html>\r\n",
"一時フォルダ.js" : "vbs=function(){\r\n var sc=new ActiveXObject('ScriptControl')\r\n sc.Language = 'VBScript'\r\n sc.AddCode((function(){/*\r\n F GetTypeName(obj) : GetTypeName = TypeName(obj): EF\r\n F vbMsgBox(str, buttons, title) : vbMsgBox = msgbox(str, buttons, title): EF\r\n F vbInputBox(str, title, default) : vbInputBox = inputbox(str, title, default): EF\r\n F getAdminMembers(pcName)\r\n Dim objGroup, objUser, str\r\n set objGroup = GetObject(\"WinNT://\" & pcName & \"/Administrators\")\r\n str = \"\"\r\n For Each objUser in objGroup.Members\r\n str = str & objUser.Name & vbLf\r\n Next\r\n getAdminMembers = str\r\n EF\r\n Class TerminaterClass\r\n Public funTer\r\n Private Sub Class_Terminate: funTer: End Sub\r\n Public Sub setF(f): set funTer=f: End Sub\r\n End Class\r\n F getTerminater\r\n Set getTerminater = New TerminaterClass\r\n EF\r\n Sub a(f)\r\n dim b\r\n set b = New TerminaterClass\r\n b.C(f)\r\n msgbox 1111\r\n End Sub\r\n */}+'').split('/*')[1].split('*/')[0].replace(/(\\s)EF(\\s)/g,'$1End F$2').replace(/(\\s)F(\\s)/g,'$1Function$2'))\r\n return {\r\n sc:sc,\r\n msgbox:function(prompt, buttons, title){\r\n // [buttons]\r\n // 0:OK、 1:OK・キャンセル、 2:中止・再試行・無視、 3:はい・いいえ・キャンセル、 4:はい・いいえ、 5:再試行・キャンセル\r\n // 0x10:警告メッセージアイコン, 0x20:問い合わせメッセージアイコン、0x30:注意メッセージアイコン、 0x40:情報メッセージアイコン\r\n // 0:第1ボタンを標準ボタン、 0x100:第2ボタンを、 0x200:第3ボタン、 0x300:第4\r\n return sc.Run('vbMsgBox', prompt, buttons, title)\r\n },\r\n inputbox:function(prompt, title, def){return sc.Run('vbInputBox', prompt, title, def)},\r\n getAdminNames:function(PC名){var arr=sc.Run('getAdminMembers', PC名).split('\\n'); arr.pop(); return arr},\r\n setTerminate:function(fun){\r\n var obj=sc.Run('getTerminater')\r\n obj.setF(fun)\r\n return obj\r\n }\r\n }\r\n}()\r\nAXO = function(n){return new ActiveXObject(n)}\r\nfs = AXO('Scripting.FileSystemObject')\r\nshell = AXO('WScript.Shell')\r\n\r\npathTMP = fs.GetSpecialFolder(2)+'\\\\'+(new Date()).getTime()\r\npathHTA = pathTMP+'.hta'\r\nfs.CreateFolder(pathTMP)\r\n\r\nws = fs.CreateTextFile(pathHTA)\r\nws.Write((''+function(){/*\r\n <html>\r\n <title>一時フォルダ</title>\r\n <style type=\"text/css\">\r\n .max{width:100%;height:100%}\r\n .w-max{width:100%}\r\n </style>\r\n <body>\r\n <table class=max>\r\n <tr height=1>\r\n <td>\r\n <table class=w-max>\r\n <td><input id=inp class=w-max value=\"-path-\"></td>\r\n <td width=1><button id=btn>開く</button></td>\r\n </table>\r\n </td>\r\n </tr>\r\n <tr><td><iframe id=ifr class=max style=\"border:solid 1px #000\" src=\"-path-\"></iframe></td></tr>\r\n </table>\r\n </body>\r\n <script>\r\n resizeTo(400,400)\r\n btn.onclick=function(){\r\n path = inp.value\r\n ;(new ActiveXObject('WScript.Shell')).run(0<path.indexOf(' ') ? ('\"'+path+'\"') : path)\r\n }\r\n </script>\r\n </html>\r\n*/}).split('/*')[1].split('*/')[0].replace(/-path-/g,pathTMP))\r\nws.Close()\r\n\r\nwhile(true){\r\n shell.run(pathHTA, 1, true)\r\n if(vbs.msgbox('['+pathTMP+']を削除します', 1, '一時フォルダ')!=2){break}\r\n}\r\n\r\nfs.DeleteFolder(pathTMP)\r\nfs.DeleteFile(pathHTA)\r\n",
"一時画像フォルダ.js" : "vbs=function(){\r\n var sc=new ActiveXObject('ScriptControl')\r\n sc.Language = 'VBScript'\r\n sc.AddCode((function(){/*\r\n F GetTypeName(obj) : GetTypeName = TypeName(obj): EF\r\n F vbMsgBox(str, buttons, title) : vbMsgBox = msgbox(str, buttons, title): EF\r\n F vbInputBox(str, title, default) : vbInputBox = inputbox(str, title, default): EF\r\n F getAdminMembers(pcName)\r\n Dim objGroup, objUser, str\r\n set objGroup = GetObject(\"WinNT://\" & pcName & \"/Administrators\")\r\n str = \"\"\r\n For Each objUser in objGroup.Members\r\n str = str & objUser.Name & vbLf\r\n Next\r\n getAdminMembers = str\r\n EF\r\n Class TerminaterClass\r\n Public funTer\r\n Private Sub Class_Terminate: funTer: End Sub\r\n Public Sub setF(f): set funTer=f: End Sub\r\n End Class\r\n F getTerminater\r\n Set getTerminater = New TerminaterClass\r\n EF\r\n Sub a(f)\r\n dim b\r\n set b = New TerminaterClass\r\n b.C(f)\r\n msgbox 1111\r\n End Sub\r\n */}+'').split('/*')[1].split('*/')[0].replace(/(\\s)EF(\\s)/g,'$1End F$2').replace(/(\\s)F(\\s)/g,'$1Function$2'))\r\n return {\r\n sc:sc,\r\n msgbox:function(prompt, buttons, title){\r\n // [buttons]\r\n // 0:OK、 1:OK・キャンセル、 2:中止・再試行・無視、 3:はい・いいえ・キャンセル、 4:はい・いいえ、 5:再試行・キャンセル\r\n // 0x10:警告メッセージアイコン, 0x20:問い合わせメッセージアイコン、0x30:注意メッセージアイコン、 0x40:情報メッセージアイコン\r\n // 0:第1ボタンを標準ボタン、 0x100:第2ボタンを、 0x200:第3ボタン、 0x300:第4\r\n return sc.Run('vbMsgBox', prompt, buttons, title)\r\n },\r\n inputbox:function(prompt, title, def){return sc.Run('vbInputBox', prompt, title, def)},\r\n getAdminNames:function(PC名){var arr=sc.Run('getAdminMembers', PC名).split('\\n'); arr.pop(); return arr},\r\n setTerminate:function(fun){\r\n var obj=sc.Run('getTerminater')\r\n obj.setF(fun)\r\n return obj\r\n }\r\n }\r\n}()\r\nAXO = function(n){return new ActiveXObject(n)}\r\nfs = AXO('Scripting.FileSystemObject')\r\nshell = AXO('WScript.Shell')\r\n\r\npathTMP = fs.GetSpecialFolder(2)+'\\\\'+(new Date()).getTime()\r\npathHTA = pathTMP+'.hta'\r\nfs.CreateFolder(pathTMP)\r\n\r\nws = fs.CreateTextFile(pathHTA)\r\nws.Write((''+function(){/*\r\n <html>\r\n <title>一時フォルダ</title>\r\n <style type=\"text/css\">\r\n .max{width:100%;height:100%}\r\n .w-max{width:100%}\r\n </style>\r\n <body>\r\n <table class=max>\r\n <tr height=1>\r\n <td>\r\n <table class=w-max>\r\n <td><input id=inp class=w-max value=\"-path-\"></td>\r\n <td width=1><button id=btn>開く</button></td>\r\n <td width=1><button id=btnAdd>+</button></td>\r\n </table>\r\n </td>\r\n </tr>\r\n <tr><td><iframe id=ifr class=max style=\"border:solid 1px #000\" src=\"-path-\"></iframe></td></tr>\r\n </table>\r\n </body>\r\n <script>\r\n resizeTo(400,400)\r\n btn.onclick=function(){\r\n path = inp.value\r\n ;(new ActiveXObject('WScript.Shell')).run(0<path.indexOf(' ') ? ('\"'+path+'\"') : path)\r\n }\r\n fs = new ActiveXObject('Scripting.FileSystemObject')\r\n btnAdd.onclick=function(){\r\n var i=0, path=inp.value, path0\r\n while(fs.FileExists(path0=path+'/'+i+'.png')){ i++ }\r\n fs.CreateTextFile(path0).Close()\r\n }\r\n </script>\r\n </html>\r\n*/}).split('/*')[1].split('*/')[0].replace(/-path-/g,pathTMP))\r\nws.Close()\r\n\r\nwhile(true){\r\n shell.run(pathHTA, 1, true)\r\n if(vbs.msgbox('['+pathTMP+']を削除します', 1, '一時フォルダ')!=2){break}\r\n}\r\n\r\nfs.DeleteFolder(pathTMP)\r\nfs.DeleteFile(pathHTA)\r\n",
"時間帯を色分け.hta" : "<hta:application icon=\"icon.ico\" />\r\n<html>\r\n<head>\r\n <title>時間帯の色分け</title>\r\n <style type=\"text/css\">\r\n .max{width:100%;height:100%}\r\n .w-max{width:100%}\r\n .nowrap{white-space:nowrap}\r\n .ta-c{text-align:center}\r\n .bc{border-collapse:collapse}\r\n .of-auto{overflow:auto}\r\n .of-hidden{overflow:hidden}\r\n .border1{border:solid 1px #000}\r\n </style>\r\n</head>\r\n<body class=of-hidden>\r\n <table class=\"bc max\">\r\n <tr height=1>\r\n <td>\r\n <table class=\"w-max bc\">\r\n <td width=1><select id=sel></select></td>\r\n <td><div id=div0 class=\"of-auto nowrap border1\" style=\"width:100%;height:40px\"></div></td>\r\n <td width=1><button id=btn開始>開始</button><button id=btn終了 style=\"display:none\">終了</button></td>\r\n <td width=1><button id=btn出力>出力</button></td>\r\n <td width=1><button id=btn入力>入力</button></td>\r\n <td width=1><button id=btn挿入>挿入</button></td>\r\n </table>\r\n </td>\r\n </tr>\r\n <tr>\r\n <td>\r\n <table class=\"bc max\" border=1>\r\n <td width=300>\r\n <table id=tbl色 class=\"w-max bc\" border=1>\r\n <tr>\r\n <td>colorCode</td>\r\n <td>種類</td>\r\n <td><button id=btn累計>累計</button></td>\r\n <td>現在</td>\r\n </tr>\r\n <tr>\r\n <td width=75><input class=w-max></td>\r\n <td><input class=w-max></td>\r\n <td width=1><span class=nowrap style=\"background-color:#fff\"></span></td>\r\n <td width=1><input type=radio name=色 style=\"zoom:2\"></td>\r\n </tr>\r\n </table>\r\n <button id=btn色追加>色追加</button>\r\n </td>\r\n <td>\r\n <table class=\"max bc\" border=1>\r\n <tr height=1><td>index</td><td><table class=\"bc w-max\"><td><select id=selインデックス class=w-max></select></td><td width=1><button id=btn削除>削除</button></td></table></td></tr>\r\n <tr height=1><td>内容</td><td><select id=sel内容 class=w-max></select></td></tr>\r\n <tr><td width=60>コメント</td><td><textarea id=ta class=max wrap=off></textarea></td></tr>\r\n <tr height=1><td>開始</td><td id=td開始></td></tr>\r\n <tr height=1><td>終了</td><td id=td終了></td></tr>\r\n <tr height=1><td>期間</td><td id=td期間></td></tr>\r\n </table>\r\n </td>\r\n </table>\r\n <td>\r\n </tr>\r\n </table>\r\n</body>\r\n<script>\r\n resizeTo(800,480)\r\n me=function(){return arguments.callee.caller}\r\n bgc=function(elem, color){elem.style.backgroundColor = '#'+color}\r\n onload=function(){\r\n var ops=sel.options, i=0\r\n ops[i++] = new Option('全体',0)\r\n ops[i++] = new Option('分' ,1000*60)\r\n ops[i++] = new Option('時間',1000*60*60)\r\n ops[i++] = new Option('日' ,1000*60*60*24)\r\n ops[i++] = new Option('週' ,1000*60*60*24*7)\r\n ops[i++] = new Option('月' ,1000*60*60*24*31)\r\n ops[i++] = new Option('年' ,1000*60*60*24*365)\r\n \r\n // 最初は文字列型になっているが内容なども記録するのでオブジェクト型に変える\r\n for0L(arr色,function(i,str){arr色[i] = {code:arr色[i]} })\r\n \r\n var tbo=tbl色[FI], tr=tbo[FI][NE].removeNode(true), newTR, ops=sel内容[OP]\r\n var fun色=function(i,obj色){\r\n tbo[iB](newTR=tr.cloneNode(true))\r\n bgc(ops[i] = new Option(obj色.内容 || ''), obj色.code)\r\n var cn=newTR[CN], inp0=cn[0][FI], inp1=cn[1][FI], span=cn[2][FI], rad=cn[3][FI]\r\n bgc(newTR, inp0.value=obj色.code)\r\n inp0.onchange=function(){\r\n var str=this.value\r\n if(!str){\r\n if(arr記録.length){\r\n alert('開始後は色追加は可能ですが削除はできません')\r\n return this.value = obj.code\r\n }else{\r\n if(!confirm('['+obj色.code+']を削除しますか?')){ return this.value = obj色.code }\r\n }\r\n arr色 = arr色.slice(0,i).concat(arr色.slice(i+1,arr色.length))\r\n return 色の種類表示を初期化()\r\n }\r\n bgc(this[PA][PA], obj色.code=str)\r\n bgc(ops[i], str)\r\n }\r\n inp1.onchange=function(){ ops[i].text = arr色[i].内容 = this.value }\r\n inp1.value = obj色.内容 || ''\r\n rad.onclick=function(){ chg(i) }\r\n }\r\n 色の種類表示を初期化=function(){\r\n while(tbo[CN][1]){ tbo[CN][1].removeNode(true) }\r\n while(ops[0]){ops[0] = null}\r\n for0L(arr色,fun色)\r\n }\r\n 色の種類表示を初期化()\r\n btn色追加.onclick=function(){\r\n var code='cccccc', obj={code:code}\r\n fun色(arr色.push(obj)-1, obj)\r\n }\r\n }\r\n arr記録 = []\r\n arr色 = ['E60012', 'F39800', 'FFF100', '009944', '0068B7', '1D2088', '920783']\r\n インターバル={\r\n 開始:function(){ this.クリア用obj = setInterval(帯を表示, this.間隔) },\r\n 終了:function(){ clearInterval(this.クリア用obj); 帯を表示() },\r\n クリア用obj:null,\r\n 間隔:1000\r\n }\r\n sel.onchange=function(){ 帯を表示() }\r\n 桁=function(num,桁数){\r\n var str0=num+'', str1=Array(桁数+1).join(0)+num\r\n return (桁数 < str0.length) ? str0 : str1.slice(str1.length-桁数,str1.length)\r\n }\r\n ms2日時=function(ms){with(new Date(ms)){return [getFullYear(), 桁(getMonth()+1,2),桁(getDate(),2)].join('/')+' '+[桁(getHours(),2),桁(getMinutes(),2),桁(getSeconds(),2)].join(':')}}\r\n 変更操作直後のみ実行=function(){\r\n // 画面表示の更新に関わる処理を何でも「帯を表示」関数に紐づけてしまうと\r\n // 例えばselのoptionが頻繁に更新されて使い物にならなかったりしてしまう。\r\n // ユーザーの変更操作直後のみ処理すれば良いような内容はこの関数で行い、\r\n // リアルタイムに更新するべき内容のみ「帯を表示」から行う。\r\n \r\n // カラーバー用のエレメント挿入\r\n var elem=document.createElement('span'), newElem, L=arr記録[LEN]-1, f\r\n div0.innerText = ''\r\n elem.height='20px'\r\n for0L(arr記録,f=function(i){\r\n if(i==L){return}\r\n div0.insertBefore(newElem=elem.cloneNode(true))\r\n bgc(newElem, arr色[arr記録[i].i].code)\r\n newElem.onmouseover = function(){ selインデックス[sI] = i; selインデックス.onchange() }\r\n newElem.ondblclick=function(){ btn削除.onclick() }\r\n })\r\n 0<=L && arr記録[L].str!='終了' && f(L++,L-1), L--\r\n \r\n // selインデックスの更新\r\n var opsIndex=selインデックス[OP]\r\n while(opsIndex[0]){ opsIndex[0] = null }\r\n for0L(arr記録,function(i,obj){ bgc(opsIndex[i] = new Option(i + ' ' + ms2日時(arr記録[i].t)), arr色[arr記録[i].i].code) })\r\n \r\n 帯を表示()\r\n selインデックス[sI] = L\r\n selインデックス.onchange()\r\n }\r\n 帯を表示=function(flagMouseOver){\r\n var L=arr記録.length\r\n if(!L){return}\r\n var 単位=sel.options[sel.selectedIndex].value-0, 今=gt(), 最後=arr記録[L-1], 期間=((最後.str=='終了' || (今<最後.t) ? 最後.t : 今) - arr記録[0].t) || 1\r\n var f=function(i){\r\n var 開始=arr記録[i].t, 終了=arr記録[i+1] ? arr記録[i+1].t : (開始<今 ? 今 : 開始), elem=div0[CN][i]\r\n // confirm('終了['+終了+'] 開始['+開始+'] e-s['+(終了-開始)+'] 単位['+単位+'] 期間['+期間+']')\r\n elem.style.width = ((終了-開始) / (単位 || 期間) * 100) + '%'\r\n }\r\n for(var i=0,L=arr記録.length-1;i<L;i++){ f(i) }\r\n 最後.str!='終了' && f(i)\r\n 累計表示()\r\n }\r\n time詳細=function(ms){\r\n var arr=[], 単位=1000, 単位_, f=function(閾値,str){var 余り=ms % (単位_=閾値); ms -= 余り; arr.unshift(桁(Math.round(余り/単位), 2)+str); 単位=単位_ }\r\n if(ms){ f(単位*60 ,'秒' ) }\r\n if(ms){ f(単位*60 ,'分' ) }\r\n if(ms){ f(単位*24 ,'時間') }\r\n if(ms){ f(単位*31 ,'日' ) } \r\n if(ms){ f(単位*12,'ヵ月') }\r\n if(ms){ arr.unshift(ms / 単位_ + '年') }\r\n return arr.join('')\r\n }\r\n 詳細表示=function(i){\r\n ta.onchange()\r\n var obj=arr記録[i], 開始=obj.t, 終了=arr記録[i+1] ? arr記録[i+1].t : gt()\r\n ta.value = obj.コメント || ''\r\n ta.onchange.i = i\r\n sel内容[sI] = obj.i || 0\r\n td開始.innerText = ms2日時(開始)\r\n td終了.innerText = ms2日時(終了)\r\n td期間.innerText = time詳細(終了-開始)\r\n }\r\n selインデックス.onchange=function(){\r\n var i=this[sI]\r\n if(-1 < i){ 詳細表示(i) }\r\n }\r\n btn削除.onclick=function(){\r\n var i=selインデックス[sI], obj=arr記録[i]\r\n if(i<0){return}\r\n if(!confirm('以下のデータを削除しますか?\\n\\n'+['内容:'+(arr色[obj.i].内容 || ''), '開始:'+ms2日時(obj.t)].join('\\n'))){return}\r\n arr記録 = arr記録.slice(0, i).concat(arr記録.slice(i+1,arr記録[LEN]))\r\n 変更操作直後のみ実行()\r\n }\r\n sel内容.onchange=function(){\r\n var i=selインデックス[sI], si=this[sI]\r\n if(i<0){return}\r\n arr記録[i].i = si\r\n bgc(selインデックス[OP][i], arr色[si].code)\r\n 変更操作直後のみ実行()\r\n }\r\n ta.onchange=function(){\r\n var i=me().i\r\n if(!isFinite(i)){return}\r\n arr記録[i].コメント = this.value\r\n }\r\n btn開始.onclick = function(){\r\n if(!arr記録[LEN]){return alert('開始時の色を選択してから開始ボタンを押してください')}\r\n btn終了.style.display = 'block'\r\n this.style.display = 'none'\r\n 変更操作直後のみ実行()\r\n インターバル.開始()\r\n }\r\n btn終了.onclick = function(){\r\n this.style.display = 'none'\r\n btn開始.style.display = 'block'\r\n arr記録.push({t:gt(), str:'終了', i:arr記録[arr記録[LEN]-1].i})\r\n インターバル.終了()\r\n }\r\n btn出力.onclick=function(){\r\n var dir=fso.gsf2+'/'+gt()\r\n fso.AXO.CreateFolder(dir)\r\n 閉じたら削除する(dir)\r\n var path=dir+'/'+ms2日時(gt()).replace(/[\\/:]/g,'')+'.txt', arr=[]\r\n \r\n var obj変換={'\\\\\\\\':'\\\\\\\\', '\"':'\\\\\"', '\\\\r':'\\\\r', '\\\\n':'\\\\n'}\r\n forIn(obj変換, function(name,v){obj変換[name] = {R:new RegExp(name,'g'), v:v}})\r\n var エスケープ=function(str){return forIn(obj変換,function(n,o){ str = str.replace(o.R, o.v) }), str}\r\n \r\n var arr2str=function(arr){\r\n var arr0=[]\r\n for0L(arr,function(i,obj){\r\n var arr1=[], j=0\r\n forIn(obj,function(name,v){ arr1[j++] = '\"'+エスケープ(name)+'\" : \"'+エスケープ(v+'')+'\"' })\r\n arr0[i] = '\\t{\\n\\t\\t'+arr1.join(',\\n\\t\\t')+'\\n\\t}'\r\n })\r\n return '[\\n'+arr0.join(',\\n')+'\\n]'\r\n }\r\n var str記録='記録 = '+arr2str(arr記録), str色='色 = '+arr2str(arr色)\r\n \r\n fso.Write(path, (str記録+'\\n\\n'+str色).replace(/\\n/g,'\\r\\n'))\r\n }\r\n btn入力.onclick=function(){\r\n var div=document.createElement('div')\r\n document.body[iB](div)\r\n div[iH] = '<iframe style=\"position:absolute;top:0;left:0\" class=max src=\"about:blank\"></iframe>'\r\n var ifr=div[FI], d=ifr.contentWindow.document\r\n d.open()\r\n d.write('ここにファイルをドロップしてください<br>ドロップエリア内をクリックするとドロップエリアが非表示になります')\r\n d.close()\r\n d.body.onclick = function(){ div.removeNode(true) }\r\n ifr.onreadystatechange=function(){\r\n if(this.readyState!='complete'){return}\r\n var str=this.contentWindow.document.body.innerText, 記録, 色\r\n div.removeNode(true)\r\n eval(str)\r\n arr色 = 色\r\n arr記録 = 記録\r\n ta.onchange.i = me().undefined\r\n for0L(記録,function(i,obj){ obj.i -=0; obj.t -= 0 })\r\n 色の種類表示を初期化()\r\n 変更操作直後のみ実行()\r\n }\r\n }\r\n btn挿入.onclick=function(){\r\n var div=document.body[iB](document.createElement('div')), td\r\n div[iH] = '<table onclick=\"event.cancelBubble=true\" style=\"position:absolute;top:0;left:0;background-color:#fff\" class=max src=\"about:blank\"><td class=ta-c></td></table>'\r\n ;(td = div[FI][FI][FI][FI])[iH] = '<select></select><input><button>挿入</button><button>キャンセル</button><br><span></span>'\r\n var cn=td[CN], sel=cn[0], inp=cn[1], btnOK=cn[2], btnCancel=cn[3], op=sel[OP], span=cn[5]\r\n for0L(sel内容[OP], function(i,elem){ bgc(op[i] = new Option(elem.text), arr色[i].code) })\r\n inp.onkeyup=inp.onchange=function(){ span[iT] = str2dat(this.value) }\r\n btnOK.onclick=function(){\r\n var t=span[iT], d=new Date(t), ms=gt(d)\r\n if(!t || -1<t.indexOf('NaN')){return inp.select(), alert('日時が不正です')}\r\n var f=function(i){ arr記録 = arr記録.slice(0,i).concat({t:ms, i:sel[sI]}).concat(arr記録.slice(i,arr記録[LEN])) }\r\n if(!for0L(arr記録,function(i,obj){return obj.t < ms ? 0 : (f(i), true)})){ f(arr記録[LEN]) }\r\n 変更操作直後のみ実行()\r\n div.removeNode(true)\r\n }\r\n btnCancel.onclick=function(){ div.removeNode(true) }\r\n }\r\n btn累計.onclick=function(){ this[iT] = '累計' + (this[iT]=='累計' ? '(詳細)' : ''); 累計表示() }\r\n 累計表示=function(){\r\n var obj結果={}, 最後=arr記録.length-1, sw詳細=btn累計[iT]!='累計'\r\n var f=function(i, ms){ obj結果[i] = (obj結果[i] || 0) + ms }\r\n for0L(arr記録,function(i,obj){ i!=最後 && f(obj.i, arr記録[i+1].t - obj.t) })\r\n arr記録[最後].str!='終了' && f(arr記録[最後].i, gt() - arr記録[最後].t)\r\n for0L(arr色,function(i,obj){\r\n var ms=obj結果[i] || 0\r\n tbl色[FI][CN][1+i][CN][2][FI][iT] = ms ? (sw詳細 ? time詳細 : time単位)(ms) : ''\r\n })\r\n }\r\n time単位=function(ミリ秒){\r\n // 値の大きさに応じて「秒」「分」「時間」などの単位に直した文字列を返す。\r\n var f=function(){return Math.round(ミリ秒/1000/num*10)/10}, num=1\r\n if(ミリ秒 < 1000 * 60){return f()+'秒'}\r\n if(ミリ秒 < 1000 * (num=60) * 60){return f()+'分'}\r\n if(ミリ秒 < 1000 * (num=60 * 60) * 24){return f()+'時間'}\r\n if(ミリ秒 < 1000 * (num=60 * 60 * 24) * 7){return f()+'日'}\r\n if(ミリ秒 < 1000 * (num=60 * 60 * 24) * 31){return f(num*=7)+'週'}\r\n if(ミリ秒 < 1000 * (num=60 * 60 * 24) * 365){return f(num*=31)+'月'}\r\n num = 60 * 60 * 24 * 365\r\n return f()+'年'\r\n }\r\n chg=function(i){\r\n arr記録[LEN] && arr記録[arr記録[LEN]-1].str=='終了' && arr記録.pop()\r\n arr記録.push({t:gt(), i:i})\r\n 変更操作直後のみ実行()\r\n }\r\n gt=function(d){return (d || new Date()).getTime()}\r\n 閉じたら削除する=function(pathDIR){\r\n var pathJS=fso.gsf2+'/'+gt()+'.js', pathHTA=pathJS+'.hta'\r\n fso.Write(pathJS, '('+function(){\r\n AXO=function(name){return new ActiveXObject(name)}\r\n fs=AXO('Scripting.FileSystemObject')\r\n arg=WScript.Arguments\r\n AXO('WScript.Shell').Run(arg(0), 1, true)\r\n 待機回数 = 0\r\n while(true){\r\n try{\r\n fs.DeleteFolder(arg(1))\r\n break\r\n }catch(e){ WScript.Echo(1000 * 10) }\r\n if(待機回数++ > 100){break}\r\n }\r\n fs.DeleteFile(arg(0))\r\n fs.DeleteFile(WScript.ScriptFullName)\r\n }+')()')\r\n var X=(window.screenLeft || window.screenX || 0) + (window.innerWidth || document.body.cliendWidth || document.documentElement.clientWidth || 300) / 2\r\n var Y=(window.screenTop || window.screenY || 0) + (window.innerHeight || document.body.cliendHeight || document.documentElement.clientHeight || 300) / 2\r\n fso.Write(pathHTA,(''+function(){/*\r\n <-title>-path-<-/title>\r\n <-iframe style=\"width:100%;height:100%\" src=\"-path-\"><-/iframe>\r\n <-script>\r\n resizeTo(300,300)\r\n moveTo(-x- - 150, -y- - 150)\r\n <-/script>\r\n */}).split('/*')[1].split('*/')[0].replace(/<-/g,'<').replace(/-path-/g,pathDIR).replace(/-x-/,X).replace(/-y-/,Y))\r\n shell.run(pathDQ(pathJS)+' '+pathDQ(pathHTA)+' '+pathDQ(pathDIR))\r\n }\r\n \r\n FI='firstChild', iB='insertBefore', CN='childNodes', LEN='length', iT='innerText', iH='innerHTML', PA='parentNode', NE='nextSibling', sI='selectedIndex', OP='options'\r\n for0L = function(arr,fun){for(var i=0,L=arr[LEN],res;i<L;i++){if(res=fun(i,arr[i])){return res}}}\r\n forIn = function(obj,fun){var name,res; for(name in obj){if(res=fun(name, obj[name])){return res}}}\r\n AXO=function(name){return new ActiveXObject(name)}\r\n shell=AXO('WScript.Shell')\r\n pathDQ=function(path){return 0<path.indexOf(' ') ? ('\"'+path+'\"') : path}\r\n fso=function(){\r\n var fs=AXO('Scripting.FileSystemObject')\r\n return {\r\n AXO:fs,\r\n gsf2:fs.GetSpecialFolder(2), // Z:\\TEMP\r\n Read:function(path, swCreate, swUnicode){\r\n if(!fs.FileExists(path)){return}\r\n with(fs.OpenTextFile(path, 1, swCreate, swUnicode)){ var str=AtEndOfStream ? '' : ReadAll(); Close() }\r\n return str\r\n },\r\n Write:function(path,str,swUnicode,sw上書きしない){ with(fs.CreateTextFile(path, !sw上書きしない, swUnicode)){ Write(str); Close() } }\r\n }\r\n }()\r\n str2dat=function(){\r\n var nd=function(){\r\n var toStr=function(フォーマット){\r\n // フォーマットは「YY/MM/DD hh:mm:ss」のような文字列\r\n var d=this.dat, obj={Y:d.getFullYear(), M:d.getMonth()+1, D:d.getDate(), h:d.getHours(), m:d.getMinutes(), s:d.getSeconds()}, chr, reg, res\r\n for(chr in obj){\r\n reg = new RegExp(chr+'+')\r\n res = フォーマット.match(reg)\r\n if(!res){continue}\r\n フォーマット = フォーマット.replace(reg, 桁(obj[chr], res[0].length))\r\n }\r\n return フォーマット\r\n }\r\n return function(d){\r\n return { dat:d || (new Date()), toStr:toStr }\r\n }\r\n }()\r\n var R=RegExp\r\n var rY=/^[^\\d]*(\\d{4})\\//, rMD=/(\\d{1,2})\\/(\\d{1,2})/, rHM=/(\\d{1,2}):(\\d{1,2})/, rYMD=/(\\d{4})\\/?(\\d{2})\\/?(\\d{2})/, rFull=/(\\d{4})\\/?(\\d{2})\\/?(\\d{2}) *(\\d{2}):?(\\d{2})/, rD2D2=/(\\d{2})(\\d{2})[^\\d]*?$/\r\n return function(str, datBA, swBefore){\r\n // datBA(Dateオブジェクト)は有っても無くてもOK\r\n // datBAを指定するとdatBAよりも(swBeforeがfalseなら後ろ、trueなら前)の日時を返す。\r\n var str0=str, obj={}, rC=function(){str0=R.rightContext}\r\n if(str0 && str0.match(rFull)){ obj={Y:R.$1, M:R.$2, D:R.$3, h:R.$4, m:R.$5}, str0='' }\r\n if(str0 && str0.match(rY)){ obj.Y=R.$1, rC() }\r\n if(str0 && str0.match(rMD)){ obj.M=R.$1, obj.D=R.$2, rC() }\r\n if(str0 && str0.match(rHM)){ obj.h=R.$1, obj.m=R.$2, rC() }\r\n if(str0 && str0.match(rYMD)){ obj.Y=R.$1, obj.M=R.$2, obj.D=R.$3, rC() }\r\n if(str0 && str0.match(rD2D2)){ obj.h=R.$1, obj.m=R.$2, str0=R.leftContext }\r\n if(str0 && str0.match(rD2D2)){ obj.M=R.$1, obj.D=R.$2, str0=R.leftContext }\r\n var d=nd(), Y=obj.Y || d.toStr('Y'), M=obj.M || d.toStr('M'), D=obj.D || d.toStr('D'), h=obj.h || d.toStr('h'), m=obj.m || d.toStr('m')\r\n var str1 = [Y,M,D].join('/') + (obj.h ? (' '+[h,m].join(':')) : ''), dat=new Date(str1)\r\n if(datBA && !isNaN(dat) && !obj.Y){\r\n var T=datBA.getTime()\r\n while((!swBefore && (dat.getTime() <= T)) || (swBefore && (T <= dat.getTime()))){\r\n if(isFinite(obj.M)){ dat.setFullYear(dat.getFullYear()+(swBefore?-1:1)) }else{ dat.setDate(dat.getDate()+(swBefore?-1:1)) }\r\n }\r\n }\r\n return nd(dat).toStr('Y/MM/DD hh:mm:ss')\r\n }\r\n }()\r\n</script>\r\n</html>\r\n",
"window.open.hta" : "<script>\r\nresizeTo(300,300)\r\nvar w=window.open()\r\nw.document.write('<iframe style=\"width:100%;height:100%\"></iframe>')\r\n</script>\r\n",
"RGB.hta" : "<html>\r\n<title>RGB</title>\r\n<style type=\"text/css\">\r\n *{font-size:16px;text-align:center}\r\n input{width:45px}\r\n button{width:100%}\r\n</style>\r\n<body style=\"overflow:hidden\">\r\n <table id=tbl>\r\n <tr>\r\n <td>R</td>\r\n <td>G</td>\r\n <td>B</td>\r\n </tr>\r\n <tr>\r\n <td><button id=btnUR>△</button></td>\r\n <td><button id=btnUG>△</button></td>\r\n <td><button id=btnUB>△</button></td>\r\n </tr>\r\n <tr>\r\n <td><input id=iR></td>\r\n <td><input id=iG></td>\r\n <td><input id=iB></td>\r\n </tr>\r\n <tr>\r\n <td><button id=btnDR>▽</button></td>\r\n <td><button id=btnDG>▽</button></td>\r\n <td><button id=btnDB>▽</button></td>\r\n </tr>\r\n </table>\r\n <input id=RGB style=\"width:80%\">\r\n</body>\r\n<script>\r\n resizeTo(200,200)\r\n 桁=function(num,len){var s=Array(len+1).join(0)+num, L=s.length; return s.slice(L-len,L)}\r\n c=function(R,G,B){return '#'+桁(R.toString(16),2)+桁(G.toString(16),2)+桁(B.toString(16),2)}\r\n btn=function(){\r\n var s=this.id, swUP=s.charAt(3)=='U', rgb=s.charAt(4), inp=document.getElementById('i'+rgb), v=n(inp.value)\r\n v += (swUP ? 1 : -1) * 0x33\r\n inp.value = v < 0 ? 0 : (255 < v ? 255 : v)\r\n chg()\r\n }\r\n for(a=document.getElementsByTagName('button'),i=0,L=a.length;i<L;i++){\r\n a[i].onclick = a[i].ondblclick = btn\r\n }\r\n n=function(s){var n=s-0; return isFinite(n) ? n : 0}\r\n iR.onchange=iG.onchange=iB.onchange=chg=function(){\r\n RGB.value = document.body.style.backgroundColor = c(n(iR.value), n(iG.value), n(iB.value))\r\n }\r\n</script>\r\n</html>\r\n",
"scrollHeight.hta" : "<html>\r\n<head>\r\n <title>scrollHeight</title>\r\n <style type=\"text/css\">\r\n .max{width:100%;height:100%}\r\n .w-max{width:100%}\r\n .nowrap{white-space:nowrap}\r\n .ta-c{text-align:center}\r\n .bc{border-collapse:collapse}\r\n .of-auto{overflow:auto}\r\n .of-hidden{overflow:hidden}\r\n .border1{border:solid 1px #000}\r\n </style>\r\n</head>\r\n<body class=of-hidden>\r\n <table class=\"max bc\">\r\n <tr height=1><td><button id=btn>for in</button></td></tr>\r\n <tr><td><textarea id=ta class=max wrap=off></textarea></td></tr>\r\n </table>\r\n</body>\r\n<script>\r\n resizeTo(300,300)\r\n getLineHeight=function(ta){\r\n var c=document.body.insertBefore(ta.cloneNode(true)), h='scrollHeight', v=c.value='', h0=c[h], v=c.value='\\n', h1=c[h]\r\n return c.removeNode(true), h1-h0\r\n }\r\n ta.onkeyup=function(){ document.title = getLineHeight(this) }\r\n btn.onclick=function(){\r\n var a=[], n\r\n for(n in ta){a.push(n +' = '+ta[n])}\r\n ta.value = a.sort().join('\\n')\r\n }\r\n</script>\r\n</html>\r\n"
},
"エラー":{
"処理を待つことができません.wsf" : "<job>\r\n<script>\r\n AXO = function(n){return new ActiveXObject(n)}\r\n fs = AXO('Scripting.FileSystemObject')\r\n shell = AXO('WScript.Shell')\r\n path = fs.GetSpecialFolder(2)+'\\\\test.html'\r\n with(fs.CreateTextFile(path)){ Write('aaa'); Close() }\r\n try{\r\n shell.run(path, 1, true)\r\n }\r\n catch(e){\r\n WScript.Echo('['+e.message+']')\r\n }\r\n</script>\r\n</job>\r\n"
},
"予約語":{
"JScriptの予約語.hta" : "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 3.2 Final//EN\">\r\n<HTML DIR=\"LTR\"><HEAD>\r\n<META HTTP-EQUIV=\"Content-Type\" Content=\"text/html; charset=shift_jis\">\r\n<TITLE>JScript の予約語</TITLE>\r\n<!--CSS_START-->\r\n<script>\r\nresizeTo(600,1200)\r\n</script>\r\n<style type=\"text/css\">\r\n/* VERSION 9106 */\r\n/* THIS A PRE-RELEASE VERSION OF THE CSS. */\r\n/* Cascading Style Sheet for use with Developer Tools User Education Docs in the Visual Studio.NET timeframe */\r\n\r\n\r\n/* --------------------------------------------------\r\n MAIN TOPIC STYLES\r\n-------------------------------------------------- */\r\n\r\nbody /* This body tag requires the use of one of the sets of banner and/or text div ids */\r\n {\r\n margin: 0px 0px 0px 0px;\r\n padding: 0px 0px 0px 0px;\r\n background: #ffffff; \r\n color: #000000;\r\n font-family: MS Pゴシック, Verdana, Arial, Helvetica, sans-serif;\r\n font-size: 75%;\r\n width: 100%;\r\n }\r\ndiv#scrollyes /* Allows topic to scroll. Cannot be used with running head banner */\r\n { /* Must immediately follow <body>. */\r\n padding: 2px 15px 2px 22px;\r\n width: 100%;\r\n }\r\ndiv#nsbanner /* Creates Nonscrolling banner region */\r\n {\r\n position: relative;\r\n left: 0px;\r\n padding: 0px 0px 0px 0px;\r\n border-bottom: 1px solid #999999;\r\n }\r\ndiv#nstext /* Creates the scrolling text area for Nonscrolling region topic */\r\n {\r\n padding: 5px 10px 0px 22px; \r\n }\r\ndiv#scrbanner /* Creates the running head bar in a full-scroll topic */\r\n { /* Allows topic to scroll. */\r\n margin: 0px 0px 0px 0px;\r\n padding: 0px 0px 0px 0px;\r\n border-bottom: 1px solid #999999;\r\n }\r\ndiv#scrtext /* Creates the text area in a full-scroll topic */\r\n { /* Allows topic to scroll. */\r\n width: 100%; /* Forces tables to have correct right margin */\r\n padding: 0px 10px 0px 22px; \r\n }\r\ndiv#bannerrow1 /* provides full-width color to top row in running head (requires script) */\r\n {\r\n background-color: #99ccff;\r\n }\r\ndiv#titlerow /* provides non-scroll topic title area (requires script) */\r\n {\r\n width: 100%; /* Forces tables to have correct right margin */\r\n padding: 0px 10px 0px 22px; \r\n background-color: #99ccff; \r\n }\r\n\r\n/* --------------------------------------------------\r\n HEADING STYLES\r\n-------------------------------------------------- */\r\n\r\nh1, h2, h3, h4\r\n {\r\n font-family: MS Pゴシック, Verdana, Arial, Helvetica, sans-serif;\r\n margin-bottom: 1em; \r\n margin-top: 1em;\r\n font-weight: bold;\r\n }\r\nh1\r\n {\r\n font-size: 120%;\r\n margin-top: 1em;\r\n }\r\nh2\r\n {\r\n font-size: 120%;\r\n }\r\nh3\r\n {\r\n font-size: 110%;\r\n }\r\nh4\r\n {\r\n font-size: 100%;\r\n }\r\n.dtH1, .dtH2, .dtH3, .dtH4\r\n {\r\n margin-left: -18px;\r\n }\r\ndiv#titlerow h1\r\n {\r\n margin-bottom: .2em\r\n }\r\n\r\n/* --------------------------------------------------\r\n TEXT STYLES\r\n-------------------------------------------------- */\r\n\r\np\r\n {\r\n margin: .5em 0em .5em 0em;\r\n line-height: 125%;\r\n }\r\nblockquote.dtBlock\r\n {\r\n margin: .5em 1.5em .5em 1.5em;\r\n }\r\ndiv#dtHoverText\r\n {\r\n color: #000066;\r\n }\r\n.normal\r\n {\r\n margin: .5em 0em .5em 0em;\r\n }\r\n.fineprint\r\n {\r\n font-size: 90%; /* i.e., 90% of 70% */\r\n }\r\n.indent\r\n {\r\n margin: .5em 5em .5em 5em;\r\n }\r\n.topicstatus /* Topic Status Boilerplate class */\r\n {\r\n display: block;\r\n color: red;\r\n }\r\n\r\n/* --------------------------------------------------\r\n LABEL STYLES\r\n-------------------------------------------------- */\r\n\r\np.label\r\n {\r\n margin-top: 1em;\r\n }\r\np.labelproc\r\n {\r\n margin-top: 1em;\r\n color: #000066;\r\n }\r\n\r\n/* --------------------------------------------------\r\n GRAPHIC STYLES\r\n-------------------------------------------------- */\r\n\r\nimg\r\n {\r\n border: none; \r\n }\r\n\r\n/* --------------------------------------------------\r\n LIST STYLES\r\n-------------------------------------------------- */\r\n\r\nol, ul\r\n {\r\n margin: 1em 0em 0em 2em;\r\n line-height: 125%;\r\n \r\n }\r\nli\r\n {\r\n margin-bottom: .5em;\r\n }\r\nul p, ol p, dl p\r\n {\r\n margin-left: 0em;\r\n }\r\nul p.label, ol p.label\r\n {\r\n margin-top: .5em;\r\n }\r\n\r\n/* --------------------------------------------------\r\n DEFINITION LIST STYLES\r\n-------------------------------------------------- */\r\n\r\ndl\r\n {\r\n margin-top: 0em; \r\n padding-left: 1px; /* Prevents italic-letter descenders from being cut off */\r\n }\r\ndd\r\n {\r\n margin-bottom: 0em; \r\n margin-left: 1.5em; \r\n }\r\ndt\r\n {\r\n margin-top: .5em; \r\n }\r\n\r\n/* --------------------------------------------------\r\n CODE, SYNTAX, and REFTIP STYLES\r\n-------------------------------------------------- */\r\n\r\npre\r\n {\r\n margin-top: .5em;\r\n margin-bottom: .5em; \r\n }\r\npre, code, .code\r\n {\r\n font: 100% MS ゴシック, Courier New, Courier; /* This is 100% of 70% */\r\n color: #000066;\r\n }\r\npre b, code b\r\n {\r\n letter-spacing: .1em; /* opens kerning on bold in Syntax/Code */\r\n }\r\npre.syntax\r\n {\r\n background: #cccccc;\r\n padding: 4px 8px;\r\n cursor: text;\r\n margin-top: 1em;\r\n margin-bottom: 1em; \r\n color: #000000;\r\n border-width: 1px;\r\n border-style: solid;\r\n border-color: #999999;\r\n }\r\n\r\n/* --------------------------------------------------\r\n LINK STYLES\r\n-------------------------------------------------- */\r\n\r\na:link\r\n {\r\n color: #0000ff;\r\n }\r\na:visited\r\n {\r\n color: #0000ff;\r\n }\r\na:hover\r\n {\r\n color: #3366ff;\r\n }\r\n\r\n/* ---------------------------\r\nMSHelp\\:link - Help HxLinks\r\n--------------------------- */\r\nMSHelp\\:link\r\n {\r\n text-decoration: underline; \r\n color: #0000ff; \r\n hoverColor: #3366ff;\r\n } \r\nA.HxLinkTable /* MSHelp\\:link - Table disambiguation elements */\r\n {\r\n }\r\n/* ---------------------------\r\nMSHelp\\:ktable - Help links\r\n--------------------------- */\r\nMSHelp\\:ktable\r\n {\r\n behavior:url(hxktable.htc);\r\n disambiguator: span;\r\n separator: &nbsp|&#32;\r\n prefix: |&#32;\r\n postfix: &nbsp;\r\n }\r\ndiv.HxLinkTable\r\n {\r\n width: auto; /* Works around IE5.x bug: Forces tables to have correct right margins and top spacing */\r\n margin-top: -.4em;\r\n visibility: visible;\r\n }\r\nol div.HxLinkTable, ul div.HxLinkTable\r\n {\r\n margin-top: 0em; /* Forces tables to have correct right margins and top spacing */\r\n }\r\ntable.HxLinkTable /* Keep in sync with general table settings below */\r\n {\r\n width: auto;\r\n margin-top: .6em;\r\n margin-bottom: .3em;\r\n border-width: 1px 1px 0px 0px;\r\n border-style: solid;\r\n border-color: #999999;\r\n background-color: #999999; \r\n font-size: 75%; /* Text in Table is same size as text outside table */\r\n behavior:url(hxlinktable.htc); /* Attach the behavior to link elements. */\r\n }\r\ntable.HxLinkTable th, table.HxLinkTable td /* Keep in sync with general table settings below */\r\n { \r\n border-style: solid; /* Creates the cell border and color */\r\n border-width: 0px 0px 1px 1px;\r\n border-style: solid;\r\n border-color: #999999;\r\n padding: 4px 6px;\r\n text-align: left;\r\n }\r\ntable.HxLinkTable th /* Keep in sync with general table settings below */\r\n { \r\n background: #cccccc; /* Creates the shaded table header row */\r\n vertical-align: bottom;\r\n }\r\ntable.HxLinkTable td /* Keep in sync with general table settings below */\r\n {\r\n background: #ffffff;\r\n vertical-align: top;\r\n }\r\n\r\n/* --------------------------------------------------\r\n TABLE STYLES\r\n-------------------------------------------------- */\r\n\r\ndiv.tablediv\r\n {\r\n width: 100%; /* Works around IE5.x bug: Forces tables to have correct right margins and top spacing */\r\n margin-top: -.4em;\r\n }\r\nol div.tablediv, ul div.tablediv, ol div.HxLinkTable, ul div.HxLinkTable\r\n {\r\n margin-top: 0em; /* Forces tables to have correct right margins and top spacing */\r\n }\r\ntable.dtTABLE\r\n {\r\n width: 100%; /* Forces tables to have correct right margin */\r\n margin-top: .6em;\r\n margin-bottom: .3em;\r\n border-width: 1px 1px 0px 0px;\r\n border-style: solid;\r\n border-color: #999999;\r\n background-color: #999999; \r\n font-size: 100%; /* Text in Table is same size as text outside table */\r\n }\r\ntable.dtTABLE th, table.dtTABLE td\r\n { \r\n border-style: solid; /* Creates the cell border and color */\r\n border-width: 0px 0px 1px 1px;\r\n border-style: solid;\r\n border-color: #999999;\r\n padding: 4px 6px;\r\n text-align: left;\r\n }\r\ntable.dtTABLE th \r\n { \r\n background: #cccccc; /* Creates the shaded table header row */\r\n vertical-align: bottom;\r\n }\r\ntable.dtTABLE td \r\n {\r\n background: #ffffff;\r\n vertical-align: top;\r\n }\r\ntable.SampMgr\r\n {\r\n margin: 0px 0px 0px -22px;\r\n }\r\ntable.SampMgr td\r\n {\r\n padding-left: 22px;\r\n }\r\n\r\n/* --------------------------------------------------\r\nISSUE REPORTING AND MISC LINKS TOPIC FOOTER\r\n-------------------------------------------------- */\r\n\r\ndiv.footer\r\n {\r\n font-style: italic;\r\n }\r\ndiv.footer hr\r\n {\r\n color: #999999;\r\n height: 1px;\r\n }\r\n\r\n/* --------------------------------------------------\r\n STYLES FOR RUNNING HEADS\r\n-------------------------------------------------- */\r\n\r\ntable.bannerparthead, table.bannertitle /* General values for the Running Head tables */\r\n {\r\n position: relative;\r\n left: 0px;\r\n top: 0px;\r\n padding: 0px 0px 0px 0px;\r\n margin: 0px 0px 0px 0px;\r\n width: 100%;\r\n height: 21px; \r\n border-collapse: collapse;\r\n border-style: solid;\r\n border-width: 0px;\r\n background-color: #99ccff; \r\n font-size: 100%;\r\n }\r\ntable.bannerparthead td /* General Values for cells in the top row of running head */\r\n {\r\n margin: 0px 0px 0px 0px;\r\n padding: 2px 0px 0px 4px;\r\n vertical-align: middle;\r\n /*border-width: 0px 0px 1px 0px; */\r\n border-width: 0px\r\n border-style: solid;\r\n border-color: #999999;\r\n background: transparent; \r\n font-family: Verdana, Arial, Helvetica, sans-serif, MS Pゴシック;\r\n font-style: normal;\r\n font-weight: normal;\r\n }\r\ntable.bannerparthead td.product /* Values for top right cell in running head */\r\n { /* Allows for a second text block in the running head */\r\n text-align: right;\r\n padding: 2px 5px 0px 5px;\r\n }\r\ntable.bannertitle td /* General Values for cells in the bottom row of running head */\r\n {\r\n margin: 0px 0px 0px 0px;\r\n padding: 0px 0px 0px 3px;\r\n vertical-align: middle;\r\n border-width: 0px 0px 1px 0px;\r\n border-style: solid;\r\n border-color: #999999;\r\n background: transparent;\r\n font-weight: bold;\r\n }\r\ntd.button1 /* Values for button cells */\r\n {\r\n width: 14px;\r\n cursor: hand;\r\n }\r\n\r\n\r\n/* =================================================\r\n STYLES REQUIRED BY THE SCRIPT */\r\n\r\n/* --------------------------------------------------\r\nRUNNING HEAD BAR POPUP STYLES: See Also, Requirements, MultiLang Filtering\r\n-------------------------------------------------- */\r\n\r\ndiv.sapop, div.langMenu /* See Also & Requirements popups */\r\n {\r\n position: absolute;\r\n left: 0px;\r\n z-index: 1;\r\n width: 50%;\r\n padding: 0px 8px 5px 26px;\r\n visibility: hidden;\r\n border: 1px solid #999999; /* Same as all other border colors */\r\n background: #ffffcc;\r\n }\r\ndiv.langMenu /* MultiLang Filter popup */\r\n {\r\n padding: 10px 10px 10px 10px;\r\n }\r\ndiv.langMenu ul\r\n {\r\n list-style-type: none;\r\n padding-left: 5px;\r\n margin-left: 0px;\r\n }\r\n.lang, .ilang /* controls the multilang tag styles */\r\n {\r\n color: #333333;\r\n font-family: MS Pゴシック, Verdana, Arial, Helvetica, sans-serif;\r\n font-size: 75%;\r\n font-weight: normal;\r\n font-style: normal;\r\n }\r\nh1 .lang, h1 .ilang \r\n {\r\n font-size: 65%;\r\n }\r\ndiv.filtered\r\n {\r\n margin-top: .6em;\r\n margin-bottom: .6em;\r\n margin-left: -7px;\r\n padding: 0px 0px 0px 6px;\r\n border-left: 1px solid #999999;\r\n background: #ffffff;\r\n }\r\ndiv.filtered h1, div.filtered h2, div.filtered h3, div.filtered h4\r\n {\r\n margin-left: -22px;\r\n }\r\ndiv.filtered span.lang\r\n {\r\n position: relative;\r\n left: 0px;\r\n }\r\n\r\n/* --------------------------------------------------\r\n PARAMETER POPUP STYLES\r\n-------------------------------------------------- */\r\n\r\ndiv.reftip /* Defines the RefTip popup in Syntax */\r\n {\r\n position: absolute;\r\n z-index: 1;\r\n visibility: hidden;\r\n border: 1px solid #999999;\r\n background: #ffffcc;\r\n/* padding: 0px 0px 0px 0px; */ \r\n }\r\ndiv.reftip dl /* Sets margin around the text within the popup */\r\n {\r\n margin: 3px 8px 8px 8px;\r\n }\r\na.synParam /* parameter popup links */\r\n {\r\n color: #0000ff; /* Must match the a:link style color */\r\n text-decoration: underline;\r\n }\r\na.synParam:visited /* ensures parameter popup links are always the unvisited color */\r\n {\r\n color: #0000ff; /* Must match the a:link style color */\r\n text-decoration: underline;\r\n }\r\na.synParam:hover /* parameter popup links */\r\n {\r\n color: #3366ff; /* Must match the a:hover style color */\r\n text-decoration: underline;\r\n font-style: italic;\r\n }\r\n\r\n/* COMMENT OUT GLOSSARY SECTION\r\n/* GLOSSARY POPUP STYLES - Not used by Visual Studio.net */\r\n\r\n/*div#popUpWindow\r\n { Controlled by the script in the variable L_PopUpBoxStyle_Style\r\n }*/\r\na.glosslink:link\r\n {\r\n color: #000000;\r\n }\r\na.glosslink:visited\r\n {\r\n color: #000000; \r\n }\r\na.glosslink:hover\r\n {\r\n color: #000000;\r\n font-style: italic;\r\n }\r\ndiv#popUpWindow h5 /* Controls the style of the Term in Glossary Popups */\r\n {\r\n margin: 5px 5px 5px 5px;\r\n color: #000000;\r\n }\r\ndiv#popUpWindow p /* Controls the style of the Text in Glossary Popups */\r\n {\r\n margin: 5px 5px 5px 5px;\r\n color: #000000;\r\n }\r\np.GLOSSARY_TEXT\r\n {\r\n }\r\ndiv#popUpWindow a /* Controls the style of the Links in Glossary Popups */\r\n {\r\n }\r\n\r\n*//* END COMMENT OUT OF GLOSSARY SECTION */\r\n\r\n/* END STYLES REQUIRED BY THE SCRIPT \r\n================================================== */\r\n</style>\r\n<!--CSS_END--></HEAD>\r\n<body topmargin=0 id=\"bodyID\" class = \"dtBODY\">\r\n\r\n<!--NONSCROLLING BANNER START-->\r\n<div id=\"nsbanner\">\r\n<div id=\"bannerrow1\">\r\n<TABLE CLASS=\"bannerparthead\" CELLSPACING=0>\r\n<TR ID=\"hdr\">\r\n<TD CLASS=\"runninghead\" nowrap>JScript</TD>\r\n<TD CLASS=\"product\" nowrap>&nbsp;</TD>\r\n</TR>\r\n</TABLE>\r\n</div>\r\n<div id=\"TitleRow\">\r\n<H1 class=\"dtH1\"><A NAME=\"js56jsconreserved\"></A>JScript の予約語</H1>\r\n</div></div>\r\n<!--NONSCROLLING BANNER END-->\r\n<DIV id=\"nstext\" valign=\"bottom\">\r\n<P>JScript には、識別子としては使用できない多くの予約語があります。予約語は言語構文の一部であるため、JScript 言語で特別な意味があります。予約語を使用すると、スクリプトをロードしたときにコンパイル エラーが発生します。</P>\r\n\r\n<P>JScript では、将来的に使用される予定の予約語の一覧も用意されています。これらの予約語は、現時点では JScript 言語の一部ではありませんが、将来使用される語として予約されています。</P>\r\n\r\n<P class=\"label\"><B>予約語</B></P>\r\n<div class=\"tablediv\"><table cellspacing=\"0\" class=\"dtTABLE\">\r\n\r\n<TR VALIGN=\"top\">\r\n<TD width=20%>break</TD>\r\n<TD width=20%>delete</TD>\r\n<TD width=20%>function</TD>\r\n<TD width=20%>return</TD>\r\n<TD width=20%>typeof</TD>\r\n</TR>\r\n\r\n<TR VALIGN=\"top\">\r\n<TD width=20%>case</TD>\r\n<TD width=20%>do</TD>\r\n<TD width=20%>if</TD>\r\n<TD width=20%>switch</TD>\r\n<TD width=20%>var</TD>\r\n</TR>\r\n\r\n<TR VALIGN=\"top\">\r\n<TD width=20%>catch</TD>\r\n<TD width=20%>else</TD>\r\n<TD width=20%>in</TD>\r\n<TD width=20%>this</TD>\r\n<TD width=20%>void</TD>\r\n</TR>\r\n\r\n<TR VALIGN=\"top\">\r\n<TD width=20%>continue</TD>\r\n<TD width=20%>false</TD>\r\n<TD width=20%>instanceof</TD>\r\n<TD width=20%>throw</TD>\r\n<TD width=20%>while</TD>\r\n</TR>\r\n\r\n<TR VALIGN=\"top\">\r\n<TD width=20%>debugger</TD>\r\n<TD width=20%>finally</TD>\r\n<TD width=20%>new</TD>\r\n<TD width=20%>true</TD>\r\n<TD width=20%>with</TD>\r\n</TR>\r\n\r\n<TR VALIGN=\"top\">\r\n<TD width=20%>default</TD>\r\n<TD width=20%>for</TD>\r\n<TD width=20%>null</TD>\r\n<TD width=20%>try</TD>\r\n<TD width=20%>&nbsp;</TD>\r\n</TR>\r\n</table></div>\r\n\r\n<H4 class=\"dtH4\">将来的に使用される予約語</H4>\r\n<div class=\"tablediv\"><table cellspacing=\"0\" class=\"dtTABLE\">\r\n\r\n<TR VALIGN=\"top\">\r\n<TD width=20%>abstract</TD>\r\n<TD width=20%>double</TD>\r\n<TD width=20%>goto</TD>\r\n<TD width=20%>native</TD>\r\n<TD width=20%>static</TD>\r\n</TR>\r\n\r\n<TR VALIGN=\"top\">\r\n<TD width=20%>boolean</TD>\r\n<TD width=20%>enum</TD>\r\n<TD width=20%>implements</TD>\r\n<TD width=20%>package</TD>\r\n<TD width=20%>super</TD>\r\n</TR>\r\n\r\n<TR VALIGN=\"top\">\r\n<TD width=20%>byte</TD>\r\n<TD width=20%>export</TD>\r\n<TD width=20%>import</TD>\r\n<TD width=20%>private</TD>\r\n<TD width=20%>synchronized</TD>\r\n</TR>\r\n\r\n<TR VALIGN=\"top\">\r\n<TD width=20%>char</TD>\r\n<TD width=20%>extends</TD>\r\n<TD width=20%>int</TD>\r\n<TD width=20%>protected</TD>\r\n<TD width=20%>throws</TD>\r\n</TR>\r\n\r\n<TR VALIGN=\"top\">\r\n<TD width=20%>class</TD>\r\n<TD width=20%>final</TD>\r\n<TD width=20%>interface</TD>\r\n<TD width=20%>public</TD>\r\n<TD width=20%>transient</TD>\r\n</TR>\r\n\r\n<TR VALIGN=\"top\">\r\n<TD width=20%>const</TD>\r\n<TD width=20%>float</TD>\r\n<TD width=20%>long</TD>\r\n<TD width=20%>short</TD>\r\n<TD width=20%>volatile</TD>\r\n</TR>\r\n</table></div>\r\n\r\n<P>識別子を選択する場合には、JScript の組み込みオブジェクトや関数名として既に使用されている語を使わないように十分に注意してください。たとえば、String または parseInt などは選択できません。</P>\r\n<!--Footer Start-->\r\n<DIV CLASS=\"footer\">\r\n<br>\r\n<HR><!--Copyright-->\r\n<p>&copy; 2001 Microsoft Corporation. All rights reserved.</p></div> <!--Closes the footer div-->\r\n</div> <!--closes the topic content div-->\r\n<!--FOOTER_END-->\r\n</BODY>\r\n</HTML>\r\n"
},
"HTML5":{
"FileAPI.hta" : "<html>\r\n<head>\r\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\r\n</head>\r\n<title>D&D</title>\r\n<body>\r\n<script type=\"text/jscript\">\r\n if(!window.File){\r\n document.body.innerText = 'FileAPIが使用不能'\r\n }else{\r\n doNothing = function(e){\r\n // e.stopPropagation()\r\n e.preventDefault()\r\n }\r\n document.addEventListener(\"dragover\", doNothing)\r\n document.addEventListener(\"drop\", function(e){\r\n doNothing(e)\r\n \r\n var files = e.dataTransfer.files\r\n if(!files){return}\r\n \r\n try{document.title = files[0].type}catch(e){return document.body.innerText='typeを取得できませんでした'}\r\n // if(!files[0].type.match('text.*')){return} // hta…application/hta\r\n \r\n var R=new FileReader()\r\n R.onload=function(ev){ document.body.innerText=R.result }\r\n R.readAsText(files[0], 'shift-jis')\r\n })\r\n }\r\n // https://msdn.microsoft.com/ja-jp/library/hh673539(v=vs.85).aspx\r\n</script>\r\n</body>\r\n</html>",
"htaタグの併用.hta" : "<!DOCTYPE html>\r\n<html>\r\n<head>\r\n <meta http-equiv=\"refresh\" content=\"0;URL=中身.hta\">\r\n <HTA:APPLICATION\r\n NAVIGABLE=\"yes\"\r\n />\r\n</head>\r\n</html>",
"WebWorker.hta" : "<html>\r\n<head>\r\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\r\n</head>\r\n<title>web worker</title>\r\n<body>\r\nUNCパス上では動く。<br>\r\nローカルでは動かない(new Workerのところでsecurity errorになる)<br>\r\n<a href=\"http://outofmem.tumblr.com/post/95984469624/html5javascriptweb-workers%E3%81%A8%E6%88%A6%E3%81%86\">同一生成元ポリシーに違反してしまう?</a><br>\r\n<br>\r\ntry~catchでBrobのがエラーになる場合はtempファイル作成して読ますようにしたらローカルでも動いた。\r\n<script type=\"text/jscript\">\r\nfunction getFunctionBody(fun){\r\n return fun.toString().trim().match(/^function[\\s\\w]*\\([\\w\\s,]*\\)\\s*{([\\w\\W]*?)}$/)[1]\r\n}\r\nfunction fun2Worker(fun){\r\n var str=getFunctionBody(fun), blob=new Blob([str], {type:'text/javascript'}), url=URL.createObjectURL(blob), worker\r\n try{worker = new Worker(url)}\r\n catch(e){\r\n // Workerに渡すアドレスは同一生成元ポリシーを守らなければいけない。\r\n // 変数urlの中身は「brob:XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX」のランダムな文字列\r\n // 呼び出し元ファイルのアドレスがローカルのものなら、ローカルPathしか渡せない。\r\n var fs=new ActiveXObject('Scripting.FileSystemObject'), path=fs.getSpecialFolder(2)+'/'+fs.getTempName()+'.js', ws=fs.CreateTextFile(path, true, true)\r\n ws.Write(str)\r\n ws.Close()\r\n worker = new Worker(path)\r\n }\r\n return worker\r\n}\r\nfunction abc(t){return t+'1'}\r\nworker = fun2Worker(function(){\r\n // ワーカー側スコープ\r\n onmessage = function(e){ postMessage(abc(e.data)) }\r\n function abc(t){return t+'0'}\r\n})\r\nworker.onmessage = function(e){\r\n confirm(abc(e.data))\r\n}\r\nworker.postMessage('aaa')\r\n</script>\r\n</body>\r\n</html>"
},
"setProp":{
"sample.hta" : "<html>\r\n<title>setProp</title>\r\n<body></body>\r\n<script>\r\n resizeTo(500,500)\r\n onload = function(){\r\n var ce=function(name){return document.createElement(name)}\r\n var newDIV=function(){ var div=ce('div'); document.body.insertBefore(div); return div }\r\n \r\n // プロパティを1つずつ変更する方法\r\n var div0=newDIV()\r\n div0.innerText = 'div0'\r\n div0.style.borderStyle = 'solid'\r\n div0.style.borderWidth = '1px'\r\n div0.style.borderColor = '#000'\r\n div0.onmouseover=function(){this.style.backgroundColor = '#fcc'}\r\n div0.onmouseout =function(){this.style.backgroundColor = ''}\r\n \r\n // withで少し文字数を減らす方法\r\n with(newDIV()){\r\n innerText = 'div1'\r\n with(style){\r\n borderStyle = 'solid'\r\n borderWidth = '1px'\r\n borderColor = '#000'\r\n }\r\n onmouseover=function(){this.style.backgroundColor = '#fcc'}\r\n onmouseout =function(){this.style.backgroundColor = ''}\r\n }\r\n \r\n // setProp関数を使う方法\r\n setProp(newDIV(), {\r\n innerText : 'div2',\r\n style : {\r\n borderStyle : 'solid',\r\n borderWidth : '1px',\r\n borderColor : '#000'\r\n },\r\n onmouseover:function(){this.style.backgroundColor = '#fcc'},\r\n onmouseout :function(){this.style.backgroundColor = ''}\r\n }, true)\r\n \r\n // setProp関数を使って設定用objectを使いまわす方法\r\n var obj={\r\n style:{\r\n borderStyle : 'solid',\r\n borderWidth : '1px',\r\n borderColor : '#000'\r\n },\r\n onmouseover:function(){this.style.backgroundColor = '#fcc'},\r\n onmouseout :function(){this.style.backgroundColor = ''}\r\n }\r\n setProp(newDIV(), setProp(obj, {innerText:'div3'}), true)\r\n setProp(newDIV(), setProp(obj, {innerText:'div4'}), true)\r\n \r\n // 配列を含むオブジェクトをsetPropでコピー\r\n var obj={arr:[1,2,3]}, obj0={}\r\n setProp(obj0, obj, true)\r\n newDIV().innerText = obj0.arr.length\r\n }\r\n \r\n forIn = function(obj,fun){var name,res; for(name in obj){if(res=fun(name, obj[name])){return res}}}\r\n setProp=function(objTarget, objProp, swSub, swVal){\r\n // swSubがtrueの場合、プロパティのプロパティを辿る流れでsetPropを再帰的に実行する。\r\n // falseの場合はforInでobjPropから列挙されたプロパティをobjTargetにコピーして終了。\r\n \r\n // swValueがtrueの場合、objPropが持つプロパティのうち中身が0やundefinedなどではないプロパティのみobjTargetにコピーする。\r\n // falseなら中身の種類を考慮しない。\r\n \r\n // 循環参照を含むオブジェクトをobjPropで渡された場合、かつ、swSubがtrueの場合は\r\n // 無現ループになってしまう。循環参照を検出する方法は皆無ではないがプログラムが複雑になってしまうし\r\n // objPropの規模に対して指数関数的に動作速度が低速化していくと予想されるので実装しない。\r\n forIn(objProp, function(name, v){\r\n if(swSub && forIn(objProp[name], function(n,v){return setProp(objTarget[name] || (objTarget[name]={}), objProp[name], true, swVal)}) ){ return }\r\n if(swVal && !objProp[name]){ return }\r\n objTarget[name] = objProp[name]\r\n })\r\n return objTarget\r\n }\r\n \r\n // 上記の方が短くてシンプルだが、forInの呼出しの度に新しいfunctionを作成していてメモリ消費量が大きそう。\r\n // 下記は同じfunctionを使いまわすので階層が深くなったり枝分かれしまくっててもfunctionの数は初期から変化しない。\r\n setProp=function(objTarget, objProp, swSub, swValue){\r\n var funChildsCheck=function(){return true}\r\n var arrT=[], arrP=[], 階層=-1\r\n var fun=function(n,v){\r\n if(swSub && forIn(v,funChildsCheck)){\r\n fun0(arrT[階層][n] || (arrT[階層][n]={}), v)\r\n return\r\n }\r\n if(swValue && !v){return}\r\n arrT[階層][n] = v\r\n }\r\n var fun0=function(objT, objP){\r\n arrT.push(objT)\r\n arrP.push(objP)\r\n 階層++\r\n forIn(objP, fun)\r\n 階層--\r\n arrT.pop()\r\n arrP.pop()\r\n }\r\n fun0(objTarget, objProp)\r\n return objTarget\r\n }\r\n \r\n // 上記までの方法だと、objPropの中身が配列でもobjTargetには{}を元にしたオブジェクトを作成してしまう。\r\n // コンストラクタが配列と等しければ配列を元にするように変更。\r\n // その他のコンストラクタでも何かの問題が起きるかもしれないが、あらゆるケースに対応するものは作成できないので\r\n // 必要なケースで必要なだけ対応する必要がある。例えば以下の場合、単純にコンストラクタを特定してnewで作成するだけではNG。\r\n // コンストラクタに合わせた対応が必要。\r\n // function myClass(初期値){ this.value = 初期値 }\r\n // confirm((new (new myClass(0)).constructor()).value)\r\n setProp=function(objTarget, objProp, swSub, swValue){\r\n var funChildsCheck=function(){return true}\r\n var arrT=[], arrP=[], 階層=-1, arrC=[].constructor\r\n var fun=function(n,v){\r\n if(swSub && forIn(v,funChildsCheck)){\r\n fun0(arrT[階層][n] || (arrT[階層][n]=v.constructor==arrC?[]:{}), v)\r\n return\r\n }\r\n if(swValue && !v){return}\r\n arrT[階層][n] = v\r\n }\r\n var fun0=function(objT, objP){\r\n arrT.push(objT)\r\n arrP.push(objP)\r\n 階層++\r\n forIn(objP, fun)\r\n 階層--\r\n arrT.pop()\r\n arrP.pop()\r\n }\r\n fun0(objTarget, objProp)\r\n return objTarget\r\n }\r\n \r\n // 今のところの最終形\r\n forIn = function(obj,fun){var name,res; for(name in obj){if(res=fun(name, obj[name])){return res}}}\r\n setProp=function(){\r\n getClone=function(){\r\n var gt=function(obj){return typeof(obj)}\r\n var gc=function(obj){return obj.constructor}\r\n var objT={}\r\n objT[gt('')] = objT[gt(0)] = objT[gt(true)] = objT[gt(objT.und)] = true\r\n var objC={}\r\n objC[gc({})] = function(obj,swSub){return setProp({}, obj, swSub)}\r\n objC[gc([])] = function(obj,swSub){return setProp([], obj, swSub)}\r\n objC[gc(/1/)] = function(obj){var re; eval('re = '+obj); return re}\r\n objC[gc(new Date())] = function(obj){return new Date(obj+'')}\r\n objC[gc(gc)] = function(obj,swSub){var f; eval('f = '+obj); return setProp(f, obj, swSub)}\r\n return function(obj, swSub){ return (objT[gt(obj)] || obj===null) ? obj : objC[gc(obj)](obj, swSub) }\r\n }()\r\n var funChildsCheck=function(){return true}\r\n var arrT, arrP, 階層, swSub_, swValue_\r\n var fun=function(n,v){\r\n if(swSub_ && forIn(v,funChildsCheck)){\r\n fun0(arrT[階層][n] || (arrT[階層][n]=getClone(v)), v)\r\n return\r\n }\r\n if(swValue_ && !v){return}\r\n arrT[階層][n] = v\r\n }\r\n var fun0=function(objT, objP){\r\n arrT.push(objT)\r\n arrP.push(objP)\r\n 階層++\r\n forIn(objP, fun)\r\n 階層--\r\n arrT.pop()\r\n arrP.pop()\r\n }\r\n return function(objTarget, objProp, swSub, swValue){\r\n arrT=[], arrP=[], 階層=-1, swSub_=swSub, swValue_=swValue\r\n fun0(objTarget, objProp)\r\n return objTarget\r\n }\r\n }()\r\n \r\n</script>\r\n</html>\r\n"
},
"結果":{
"return b, c.js" : "f=function(a){return b(), c}\r\nb=function(a){return 123}\r\nc=999\r\n\r\n// 999\r\nWScript.Echo(f(111))\r\n",
"ホイスティング.js" : "/*\r\nローカル変数の宣言(ver 変数)は関数内1行目に移動される(ホイスティング)\r\n移動されるのは宣言のみで「ver a = 2」と記述していた場合はその行が「a = 2」になる。\r\n*/\r\n\r\na = 1\r\n\r\nf = function(){\r\n // 「0[undefined]」\r\n WScript.Echo('0['+a+']')\r\n \r\n var a = 2\r\n}\r\n\r\nf()\r\n\r\n// 「1[1]」\r\nWScript.Echo('1['+a+']')\r\n\r\nf0 = function(a){\r\n // 「2[3]」\r\n WScript.Echo('2['+a+']')\r\n \r\n var a = 4\r\n \r\n // 「3[4]」\r\n WScript.Echo('3['+a+']')\r\n \r\n // 「4[5]」\r\n WScript.Echo('4['+b+']')\r\n}\r\n\r\nb = 5\r\n\r\nf0(3)\r\n",
"num=arr.push.js" : "arr=[0]\r\n\r\n// 1\r\nWScript.Echo(arr.push())\r\n",
"delete arr[1].js" : "arr = [0,1,2,3]\r\ndelete arr[1]\r\nWScript.Echo(arr)",
"arr.concat.js" : "arr = [0,1,2,3]\r\narr = arr.slice(0,1).concat(arr.slice(2,arr.length))\r\nWScript.Echo(arr)",
"obj比較.js" : "a = {}\r\nb = {}\r\nc = a\r\n\r\n// false, true, false\r\nWScript.Echo([a==b, a==c, b==c])\r\n",
"isNaN(不正なdat).js" : "// -1\r\nWScript.Echo(isNaN(new Date('2016/1/1 100:10')))",
"for(n in o) typeof(n).js" : "// string\r\nfor(n in {1:2}){WScript.Echo(typeof(n))}\r\n\r\n// string\r\nfor(n in [1]){WScript.Echo(typeof(n))}\r\n"
},
"excel":{
"drop.wsf" : "<job>\r\n<script>\r\n excel=function(){\r\n var app=function(objIns){return objIns.Application}\r\n var wsf=function(objIns){return app(objIns).WorksheetFunction}\r\n var 定数={\r\n xlAutomatic:-4105,\r\n xlBetween:1,\r\n xlCalculationAutomatic:-4105,\r\n xlCalculationManual:-4135,\r\n xlCellValue:1,\r\n xlCenter:-4108,\r\n xlEqual:3,\r\n xlGreater:5,\r\n xlGreaterEqual:7,\r\n xlIMEModeNoControl:0,\r\n xlLastCell:11,\r\n xlLess:6,\r\n xlLessEqual:8,\r\n xlNone:-4142,\r\n xlNotBetween:2,\r\n xlNotEqual:4,\r\n xlPasteValues:-4163,\r\n xlPasteFormats:-4122,\r\n xlPasteAll:-4104,\r\n xlSolid:1,\r\n xlValidAlertStop:1,\r\n xlValidateList:3\r\n }\r\n var num2hex=function(num, 桁数){ var str=num.toString(16), L='length', 桁=桁数||str[L], str0='00000'+str, L0=str0[L]; return str0.slice(L0-桁,L0) }\r\n var RGB=function(R,G,B){return parseInt(num2hex(B,2)+num2hex(G,2)+num2hex(R,2), 16)}\r\n return {\r\n newInstance:function(){return new ActiveXObject('Excel.Application')},\r\n getInstance:function(){\r\n var obj\r\n try{obj=GetObject('','Excel.Application')}catch(e){obj=this.newInstance()}\r\n return obj\r\n },\r\n 定数:定数,\r\n wsf:wsf,\r\n RGB:RGB,\r\n 読み取り専用で開く:function(objIns, path, updateLinks){return objIns.Workbooks.Open(path, updateLinks, true)},\r\n getLastCell:function(sh){return sh.Cells.SpecialCells(定数.xlLastCell)},\r\n pasteSpecial:function(){\r\n var obj={値のみ:'xlPasteValues', 書式のみ:'xlPasteFormats'}\r\n return function(rng, 貼りつけるもの, sw空白無視){\r\n var paste=定数[obj[貼りつけるもの] || 'xlPasteAll'], operation=定数.xlNone\r\n rng.PasteSpecial(paste, 定数.xlNone, operation, sw空白無視 || false) // 第4引数をtrueにすると行列の入れ替えができる…筈なんだけど4番目の引数を渡すと何故かエラーになる。。\r\n }\r\n }(),\r\n set警告表示:function(objIns, sw){app(objIns).DisplayAlerts = sw},\r\n set画面更新:function(objIns, sw){app(objIns).ScreenUpdating = sw},\r\n set演算:function(objIns, sw){app(objIns).Calculation = sw ? 定数.xlCalculationAutomatic : 定数.xlCalculationManual},\r\n set文字色:function(rng, R, G, B){rng.Font.Color = RGB(R, G, B)},\r\n set背景色:function(rng, sw塗りつぶしなし, R, G, B){\r\n with(rng.Interior){\r\n TintAndShade = 0\r\n PatternTintAndShade = 0\r\n if(sw塗りつぶしなし){\r\n Pattern = 定数.xlNone\r\n return\r\n }\r\n Pattern = 定数.xlSolid\r\n PatternColorIndex = 定数.xlAutomatic\r\n Color = RGB(R, G, B)\r\n }\r\n },\r\n 条件付き書式:function(){\r\n var F=function(rng){return rng.FormatConditions}, obj演算子={AとBの間:'xlBetween', Aと等しい:'xlEqual', Aより大きい:'xlGreater', A以上:'xlGreaterEqual', Aより小さい:'xlLess', A以下:'xlLessEqual', AとBの間以外:'xlNotBetween', Aと等しくない:'xlNotEqual'}\r\n return {\r\n 削除:function(rng){ F(rng).Delete() },\r\n 追加:function(rng, 演算子, A, B){\r\n var f=F(rng), newCon=f.Add(定数.xlCellValue, 定数[obj演算子[演算子]], A, B)\r\n newCon.SetFirstPriority()\r\n newCon.StopIfTrue = false\r\n return newCon\r\n }\r\n }\r\n }(),\r\n 入力規則_リスト:function(rng, str){\r\n with(rng.Validation){\r\n Delete()\r\n Add(定数.xlValidateList, 定数.xlValidAlertStop, 定数.xlBetween, str)\r\n IgnoreBlank = true\r\n InCellDropdown = true\r\n InputTitle = \"\"\r\n ErrorTitle = \"\"\r\n InputMessage = \"\"\r\n ErrorMessage = \"\"\r\n IMEMode = 定数.xlIMEModeNoControl\r\n ShowInput = true\r\n ShowError = true\r\n }\r\n },\r\n setセル書式:function(){\r\n var obj={標準:'G/標準', 数値:'0_ ', 数値小数第4位:'0.0000_ ', 文字列:'@', 年月日:'yyyy\"年\"m\"月\"d\"日\";@'}\r\n return function(rng, 種類, str){ rng. NumberFormatLocal=str || obj[種類 || '標準']}\r\n }(),\r\n セル結合:function(rng){\r\n rng.MergeCells = false\r\n rng.Merge()\r\n },\r\n セル内中央寄せ:function(rng){\r\n rng.HorizontalAlignment = 定数.xlCenter\r\n rng.VerticalAlignment = 定数.xlCenter\r\n }\r\n }\r\n }()\r\n \r\n main = function(){\r\n var arg=WScript.Arguments\r\n if(!arg.length){return WScript.Echo('引数なし')}\r\n \r\n var objExcel=excel.getInstance(), bk=excel.読み取り専用で開く(objExcel, arg(0)), sh=bk.Sheets(1)\r\n sh.Range('A1').value = 'abc'\r\n sh.Range('B1').value = 'def'\r\n excel.set文字色(sh.Range('A1'), 0xff, 0, 0)\r\n var newCon = excel.条件付き書式.追加(sh.Range('C10'), 'Aと等しくない', 'XX')\r\n excel.set文字色(newCon, 0xff, 0, 0)\r\n excel.set背景色(newCon, false, 0xff, 0xff, 0)\r\n sh.Range('A1:B1').Copy()\r\n excel.pasteSpecial(sh.Range('C10'), '値のみ')\r\n excel.入力規則_リスト(sh.Range('C11'), 'a,b,c')\r\n excel.セル結合(sh.Range('C11:D12'))\r\n excel.セル内中央寄せ(sh.Range('C11:D12'))\r\n WScript.Echo(excel.wsf(objExcel).sum(sh.Cells))\r\n }\r\n main()\r\n</script>\r\n</job>\r\n"
},
"バイナリファイル":{
"sample.wsf" : "<job>\r\n<script>\r\n arg = WScript.Arguments\r\n LEN = 'length'\r\n if(!arg[LEN]){ WScript.Quit() }\r\n \r\n AXO=function(name){return new ActiveXObject(name)}\r\n for0L = function(arr,fun){for(var i=0,L=arr[LEN],res;i<L;i++){if(res=fun(i,arr[i])){return res}}}\r\n \r\n bin_write = function(path,v){\r\n var str = WScript.CreateObject('ADODB.Stream');\r\n str.type = 2 //adTypeText\r\n str.charset = 'iso-8859-1'\r\n str.open()\r\n \r\n v = v.split('')\r\n for(var i=0,L=v[LEN],int_; i<L; i+=3){\r\n try{\r\n eval('int_ = 0x' + v[i] + v[i+1])\r\n }catch(e){\r\n return WScript.Echo('i:'+i+'\\nv[i]:'+v[i]+'\\nv[i+1]:'+v[i+1]+'\\n')\r\n }\r\n str.writeText(String.fromCharCode(int_))\r\n }\r\n str.saveToFile(path, 2)\r\n str.close()\r\n str = null\r\n }\r\n bin_read = function(path){\r\n var me=arguments.callee\r\n if(!me.func){\r\n // 変換がおかしいところは~0xffの範囲外\r\n if(0){\r\n var REPLSRC = [\r\n 0x20ac, 0x81 , 0x201a, 0x192 , 0x201e, 0x2026, 0x2020, 0x2021,\r\n 0x2c6 , 0x2030, 0x160 , 0x2039, 0x152 , 0x8d , 0x17d , 0x8f ,\r\n 0x90 , 0x2018, 0x2019, 0x201c, 0x201d, 0x2022, 0x2013, 0x2014,\r\n 0x2dc , 0x2122, 0x161 , 0x203a, 0x153 , 0x9d , 0x17e , 0x178\r\n ]\r\n var REPLDST = [\r\n 0x80 , 0x81 , 0x82 , 0x83 , 0x84 , 0x85 , 0x86 , 0x87 ,\r\n 0x88 , 0x89 , 0x8a , 0x8b , 0x8c , 0x8d , 0x8e , 0x8f ,\r\n 0x90 , 0x91 , 0x92 , 0x93 , 0x94 , 0x95 , 0x96 , 0x97 ,\r\n 0x98 , 0x99 , 0x9a , 0x9b , 0x9c , 0x9d , 0x9e , 0x9f\r\n ]\r\n var obj={}\r\n for(var i=0,L=REPLSRC[LEN];i<L;i++){ obj[REPLSRC[i]] = REPLDST[i] }\r\n }else{\r\n var obj={}\r\n for0L([\r\n 0x20ac, 0x81 , 0x201a, 0x192 , 0x201e, 0x2026, 0x2020, 0x2021,\r\n 0x2c6 , 0x2030, 0x160 , 0x2039, 0x152 , 0x8d , 0x17d , 0x8f ,\r\n 0x90 , 0x2018, 0x2019, 0x201c, 0x201d, 0x2022, 0x2013, 0x2014,\r\n 0x2dc , 0x2122, 0x161 , 0x203a, 0x153 , 0x9d , 0x17e , 0x178\r\n ],function(i,src){ obj[src] = 0x80 + i })\r\n }\r\n \r\n me.func=function(path){\r\n var txt='', out='', c=0, idx=0\r\n with(WScript.CreateObject('ADODB.Stream')){\r\n type = 2 //adTypeText\r\n charset = 'iso-8859-1'\r\n open()\r\n loadFromFile(path)\r\n txt = readText()\r\n close()\r\n }\r\n \r\n for(var i=0,L=txt[LEN]; i<L;i++){\r\n c = txt.charCodeAt(i)\r\n c = obj[c] || c\r\n out += (c < 0x10) ? '0' + c.toString(16) : c.toString(16)\r\n out += ' ';\r\n if (i % 16 == 15 && i >= 0xf) out += '\\n'\r\n }\r\n \r\n return out\r\n }\r\n }\r\n return me.func(path)\r\n }\r\n WScript.Echo(arg(0))\r\n fs = AXO('Scripting.FileSystemObject')\r\n bin0 = bin_read(arg(0)).split('\\n')\r\n bin1 = bin_read(arg(1)).split('\\n')\r\n// bin_write( path出力+'_書き換え後.'+fs.GetExtensionName(path) , bin.replace(/\\n/g,'') )\r\n \r\n for0L(bin0, function(i,line){ bin0[i] = line.split(' ') })\r\n for0L(bin1, function(i,line){ bin1[i] = line.split(' ') })\r\n \r\n var arr相違点=[], arr0=[], arr1=[]\r\n for0L(bin0, function(i,line){\r\n for0L(line, function(j,str){\r\n if(str==bin1[i][j]){\r\n if(arr0[LEN]){ arr相違点.push('i['+i+']j['+j+'] '+arr0.join(' ')+' - '+arr1.join(' ')) }\r\n arr0 = []\r\n arr1 = []\r\n return\r\n }\r\n arr0.push(str)\r\n arr1.push(bin1[i][j])\r\n })\r\n })\r\n \r\n// WScript.Echo('['+arr相違点.join('\\n')+']')\r\n with(fs.CreateTextFile(arg(0)+'_バイナリ相違点.txt')){Write('['+arr相違点.join('\\r\\n')+']');Close()}\r\n \r\n// with(fs.CreateTextFile(arg(0)+'_バイナリ文字列.txt')){Write(bin0.join('\\r\\n'));Close()}\r\n// with(fs.CreateTextFile(arg(1)+'_バイナリ文字列.txt')){Write(bin1.join('\\r\\n'));Close()}\r\n</script>\r\n</job>"
},
"atan2":{
"atan2メソッド.hta" : "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 3.2 Final//EN\">\r\n<HTML DIR=\"LTR\"><HEAD>\r\n<META HTTP-EQUIV=\"Content-Type\" Content=\"text/html; charset=shift_jis\">\r\n<TITLE>JScript の予約語</TITLE>\r\n<!--CSS_START-->\r\n<script>\r\nresizeTo(600,1200)\r\n</script>\r\n<style type=\"text/css\">\r\n/* VERSION 9106 */\r\n/* THIS A PRE-RELEASE VERSION OF THE CSS. */\r\n/* Cascading Style Sheet for use with Developer Tools User Education Docs in the Visual Studio.NET timeframe */\r\n\r\n\r\n/* --------------------------------------------------\r\n MAIN TOPIC STYLES\r\n-------------------------------------------------- */\r\n\r\nbody /* This body tag requires the use of one of the sets of banner and/or text div ids */\r\n {\r\n margin: 0px 0px 0px 0px;\r\n padding: 0px 0px 0px 0px;\r\n background: #ffffff; \r\n color: #000000;\r\n font-family: MS Pゴシック, Verdana, Arial, Helvetica, sans-serif;\r\n font-size: 75%;\r\n width: 100%;\r\n }\r\ndiv#scrollyes /* Allows topic to scroll. Cannot be used with running head banner */\r\n { /* Must immediately follow <body>. */\r\n padding: 2px 15px 2px 22px;\r\n width: 100%;\r\n }\r\ndiv#nsbanner /* Creates Nonscrolling banner region */\r\n {\r\n position: relative;\r\n left: 0px;\r\n padding: 0px 0px 0px 0px;\r\n border-bottom: 1px solid #999999;\r\n }\r\ndiv#nstext /* Creates the scrolling text area for Nonscrolling region topic */\r\n {\r\n padding: 5px 10px 0px 22px; \r\n }\r\ndiv#scrbanner /* Creates the running head bar in a full-scroll topic */\r\n { /* Allows topic to scroll. */\r\n margin: 0px 0px 0px 0px;\r\n padding: 0px 0px 0px 0px;\r\n border-bottom: 1px solid #999999;\r\n }\r\ndiv#scrtext /* Creates the text area in a full-scroll topic */\r\n { /* Allows topic to scroll. */\r\n width: 100%; /* Forces tables to have correct right margin */\r\n padding: 0px 10px 0px 22px; \r\n }\r\ndiv#bannerrow1 /* provides full-width color to top row in running head (requires script) */\r\n {\r\n background-color: #99ccff;\r\n }\r\ndiv#titlerow /* provides non-scroll topic title area (requires script) */\r\n {\r\n width: 100%; /* Forces tables to have correct right margin */\r\n padding: 0px 10px 0px 22px; \r\n background-color: #99ccff; \r\n }\r\n\r\n/* --------------------------------------------------\r\n HEADING STYLES\r\n-------------------------------------------------- */\r\n\r\nh1, h2, h3, h4\r\n {\r\n font-family: MS Pゴシック, Verdana, Arial, Helvetica, sans-serif;\r\n margin-bottom: 1em; \r\n margin-top: 1em;\r\n font-weight: bold;\r\n }\r\nh1\r\n {\r\n font-size: 120%;\r\n margin-top: 1em;\r\n }\r\nh2\r\n {\r\n font-size: 120%;\r\n }\r\nh3\r\n {\r\n font-size: 110%;\r\n }\r\nh4\r\n {\r\n font-size: 100%;\r\n }\r\n.dtH1, .dtH2, .dtH3, .dtH4\r\n {\r\n margin-left: -18px;\r\n }\r\ndiv#titlerow h1\r\n {\r\n margin-bottom: .2em\r\n }\r\n\r\n/* --------------------------------------------------\r\n TEXT STYLES\r\n-------------------------------------------------- */\r\n\r\np\r\n {\r\n margin: .5em 0em .5em 0em;\r\n line-height: 125%;\r\n }\r\nblockquote.dtBlock\r\n {\r\n margin: .5em 1.5em .5em 1.5em;\r\n }\r\ndiv#dtHoverText\r\n {\r\n color: #000066;\r\n }\r\n.normal\r\n {\r\n margin: .5em 0em .5em 0em;\r\n }\r\n.fineprint\r\n {\r\n font-size: 90%; /* i.e., 90% of 70% */\r\n }\r\n.indent\r\n {\r\n margin: .5em 5em .5em 5em;\r\n }\r\n.topicstatus /* Topic Status Boilerplate class */\r\n {\r\n display: block;\r\n color: red;\r\n }\r\n\r\n/* --------------------------------------------------\r\n LABEL STYLES\r\n-------------------------------------------------- */\r\n\r\np.label\r\n {\r\n margin-top: 1em;\r\n }\r\np.labelproc\r\n {\r\n margin-top: 1em;\r\n color: #000066;\r\n }\r\n\r\n/* --------------------------------------------------\r\n GRAPHIC STYLES\r\n-------------------------------------------------- */\r\n\r\nimg\r\n {\r\n border: none; \r\n }\r\n\r\n/* --------------------------------------------------\r\n LIST STYLES\r\n-------------------------------------------------- */\r\n\r\nol, ul\r\n {\r\n margin: 1em 0em 0em 2em;\r\n line-height: 125%;\r\n \r\n }\r\nli\r\n {\r\n margin-bottom: .5em;\r\n }\r\nul p, ol p, dl p\r\n {\r\n margin-left: 0em;\r\n }\r\nul p.label, ol p.label\r\n {\r\n margin-top: .5em;\r\n }\r\n\r\n/* --------------------------------------------------\r\n DEFINITION LIST STYLES\r\n-------------------------------------------------- */\r\n\r\ndl\r\n {\r\n margin-top: 0em; \r\n padding-left: 1px; /* Prevents italic-letter descenders from being cut off */\r\n }\r\ndd\r\n {\r\n margin-bottom: 0em; \r\n margin-left: 1.5em; \r\n }\r\ndt\r\n {\r\n margin-top: .5em; \r\n }\r\n\r\n/* --------------------------------------------------\r\n CODE, SYNTAX, and REFTIP STYLES\r\n-------------------------------------------------- */\r\n\r\npre\r\n {\r\n margin-top: .5em;\r\n margin-bottom: .5em; \r\n }\r\npre, code, .code\r\n {\r\n font: 100% MS ゴシック, Courier New, Courier; /* This is 100% of 70% */\r\n color: #000066;\r\n }\r\npre b, code b\r\n {\r\n letter-spacing: .1em; /* opens kerning on bold in Syntax/Code */\r\n }\r\npre.syntax\r\n {\r\n background: #cccccc;\r\n padding: 4px 8px;\r\n cursor: text;\r\n margin-top: 1em;\r\n margin-bottom: 1em; \r\n color: #000000;\r\n border-width: 1px;\r\n border-style: solid;\r\n border-color: #999999;\r\n }\r\n\r\n/* --------------------------------------------------\r\n LINK STYLES\r\n-------------------------------------------------- */\r\n\r\na:link\r\n {\r\n color: #0000ff;\r\n }\r\na:visited\r\n {\r\n color: #0000ff;\r\n }\r\na:hover\r\n {\r\n color: #3366ff;\r\n }\r\n\r\n/* ---------------------------\r\nMSHelp\\:link - Help HxLinks\r\n--------------------------- */\r\nMSHelp\\:link\r\n {\r\n text-decoration: underline; \r\n color: #0000ff; \r\n hoverColor: #3366ff;\r\n } \r\nA.HxLinkTable /* MSHelp\\:link - Table disambiguation elements */\r\n {\r\n }\r\n/* ---------------------------\r\nMSHelp\\:ktable - Help links\r\n--------------------------- */\r\nMSHelp\\:ktable\r\n {\r\n behavior:url(hxktable.htc);\r\n disambiguator: span;\r\n separator: &nbsp|&#32;\r\n prefix: |&#32;\r\n postfix: &nbsp;\r\n }\r\ndiv.HxLinkTable\r\n {\r\n width: auto; /* Works around IE5.x bug: Forces tables to have correct right margins and top spacing */\r\n margin-top: -.4em;\r\n visibility: visible;\r\n }\r\nol div.HxLinkTable, ul div.HxLinkTable\r\n {\r\n margin-top: 0em; /* Forces tables to have correct right margins and top spacing */\r\n }\r\ntable.HxLinkTable /* Keep in sync with general table settings below */\r\n {\r\n width: auto;\r\n margin-top: .6em;\r\n margin-bottom: .3em;\r\n border-width: 1px 1px 0px 0px;\r\n border-style: solid;\r\n border-color: #999999;\r\n background-color: #999999; \r\n font-size: 75%; /* Text in Table is same size as text outside table */\r\n behavior:url(hxlinktable.htc); /* Attach the behavior to link elements. */\r\n }\r\ntable.HxLinkTable th, table.HxLinkTable td /* Keep in sync with general table settings below */\r\n { \r\n border-style: solid; /* Creates the cell border and color */\r\n border-width: 0px 0px 1px 1px;\r\n border-style: solid;\r\n border-color: #999999;\r\n padding: 4px 6px;\r\n text-align: left;\r\n }\r\ntable.HxLinkTable th /* Keep in sync with general table settings below */\r\n { \r\n background: #cccccc; /* Creates the shaded table header row */\r\n vertical-align: bottom;\r\n }\r\ntable.HxLinkTable td /* Keep in sync with general table settings below */\r\n {\r\n background: #ffffff;\r\n vertical-align: top;\r\n }\r\n\r\n/* --------------------------------------------------\r\n TABLE STYLES\r\n-------------------------------------------------- */\r\n\r\ndiv.tablediv\r\n {\r\n width: 100%; /* Works around IE5.x bug: Forces tables to have correct right margins and top spacing */\r\n margin-top: -.4em;\r\n }\r\nol div.tablediv, ul div.tablediv, ol div.HxLinkTable, ul div.HxLinkTable\r\n {\r\n margin-top: 0em; /* Forces tables to have correct right margins and top spacing */\r\n }\r\ntable.dtTABLE\r\n {\r\n width: 100%; /* Forces tables to have correct right margin */\r\n margin-top: .6em;\r\n margin-bottom: .3em;\r\n border-width: 1px 1px 0px 0px;\r\n border-style: solid;\r\n border-color: #999999;\r\n background-color: #999999; \r\n font-size: 100%; /* Text in Table is same size as text outside table */\r\n }\r\ntable.dtTABLE th, table.dtTABLE td\r\n { \r\n border-style: solid; /* Creates the cell border and color */\r\n border-width: 0px 0px 1px 1px;\r\n border-style: solid;\r\n border-color: #999999;\r\n padding: 4px 6px;\r\n text-align: left;\r\n }\r\ntable.dtTABLE th \r\n { \r\n background: #cccccc; /* Creates the shaded table header row */\r\n vertical-align: bottom;\r\n }\r\ntable.dtTABLE td \r\n {\r\n background: #ffffff;\r\n vertical-align: top;\r\n }\r\ntable.SampMgr\r\n {\r\n margin: 0px 0px 0px -22px;\r\n }\r\ntable.SampMgr td\r\n {\r\n padding-left: 22px;\r\n }\r\n\r\n/* --------------------------------------------------\r\nISSUE REPORTING AND MISC LINKS TOPIC FOOTER\r\n-------------------------------------------------- */\r\n\r\ndiv.footer\r\n {\r\n font-style: italic;\r\n }\r\ndiv.footer hr\r\n {\r\n color: #999999;\r\n height: 1px;\r\n }\r\n\r\n/* --------------------------------------------------\r\n STYLES FOR RUNNING HEADS\r\n-------------------------------------------------- */\r\n\r\ntable.bannerparthead, table.bannertitle /* General values for the Running Head tables */\r\n {\r\n position: relative;\r\n left: 0px;\r\n top: 0px;\r\n padding: 0px 0px 0px 0px;\r\n margin: 0px 0px 0px 0px;\r\n width: 100%;\r\n height: 21px; \r\n border-collapse: collapse;\r\n border-style: solid;\r\n border-width: 0px;\r\n background-color: #99ccff; \r\n font-size: 100%;\r\n }\r\ntable.bannerparthead td /* General Values for cells in the top row of running head */\r\n {\r\n margin: 0px 0px 0px 0px;\r\n padding: 2px 0px 0px 4px;\r\n vertical-align: middle;\r\n /*border-width: 0px 0px 1px 0px; */\r\n border-width: 0px\r\n border-style: solid;\r\n border-color: #999999;\r\n background: transparent; \r\n font-family: Verdana, Arial, Helvetica, sans-serif, MS Pゴシック;\r\n font-style: normal;\r\n font-weight: normal;\r\n }\r\ntable.bannerparthead td.product /* Values for top right cell in running head */\r\n { /* Allows for a second text block in the running head */\r\n text-align: right;\r\n padding: 2px 5px 0px 5px;\r\n }\r\ntable.bannertitle td /* General Values for cells in the bottom row of running head */\r\n {\r\n margin: 0px 0px 0px 0px;\r\n padding: 0px 0px 0px 3px;\r\n vertical-align: middle;\r\n border-width: 0px 0px 1px 0px;\r\n border-style: solid;\r\n border-color: #999999;\r\n background: transparent;\r\n font-weight: bold;\r\n }\r\ntd.button1 /* Values for button cells */\r\n {\r\n width: 14px;\r\n cursor: hand;\r\n }\r\n\r\n\r\n/* =================================================\r\n STYLES REQUIRED BY THE SCRIPT */\r\n\r\n/* --------------------------------------------------\r\nRUNNING HEAD BAR POPUP STYLES: See Also, Requirements, MultiLang Filtering\r\n-------------------------------------------------- */\r\n\r\ndiv.sapop, div.langMenu /* See Also & Requirements popups */\r\n {\r\n position: absolute;\r\n left: 0px;\r\n z-index: 1;\r\n width: 50%;\r\n padding: 0px 8px 5px 26px;\r\n visibility: hidden;\r\n border: 1px solid #999999; /* Same as all other border colors */\r\n background: #ffffcc;\r\n }\r\ndiv.langMenu /* MultiLang Filter popup */\r\n {\r\n padding: 10px 10px 10px 10px;\r\n }\r\ndiv.langMenu ul\r\n {\r\n list-style-type: none;\r\n padding-left: 5px;\r\n margin-left: 0px;\r\n }\r\n.lang, .ilang /* controls the multilang tag styles */\r\n {\r\n color: #333333;\r\n font-family: MS Pゴシック, Verdana, Arial, Helvetica, sans-serif;\r\n font-size: 75%;\r\n font-weight: normal;\r\n font-style: normal;\r\n }\r\nh1 .lang, h1 .ilang \r\n {\r\n font-size: 65%;\r\n }\r\ndiv.filtered\r\n {\r\n margin-top: .6em;\r\n margin-bottom: .6em;\r\n margin-left: -7px;\r\n padding: 0px 0px 0px 6px;\r\n border-left: 1px solid #999999;\r\n background: #ffffff;\r\n }\r\ndiv.filtered h1, div.filtered h2, div.filtered h3, div.filtered h4\r\n {\r\n margin-left: -22px;\r\n }\r\ndiv.filtered span.lang\r\n {\r\n position: relative;\r\n left: 0px;\r\n }\r\n\r\n/* --------------------------------------------------\r\n PARAMETER POPUP STYLES\r\n-------------------------------------------------- */\r\n\r\ndiv.reftip /* Defines the RefTip popup in Syntax */\r\n {\r\n position: absolute;\r\n z-index: 1;\r\n visibility: hidden;\r\n border: 1px solid #999999;\r\n background: #ffffcc;\r\n/* padding: 0px 0px 0px 0px; */ \r\n }\r\ndiv.reftip dl /* Sets margin around the text within the popup */\r\n {\r\n margin: 3px 8px 8px 8px;\r\n }\r\na.synParam /* parameter popup links */\r\n {\r\n color: #0000ff; /* Must match the a:link style color */\r\n text-decoration: underline;\r\n }\r\na.synParam:visited /* ensures parameter popup links are always the unvisited color */\r\n {\r\n color: #0000ff; /* Must match the a:link style color */\r\n text-decoration: underline;\r\n }\r\na.synParam:hover /* parameter popup links */\r\n {\r\n color: #3366ff; /* Must match the a:hover style color */\r\n text-decoration: underline;\r\n font-style: italic;\r\n }\r\n\r\n/* COMMENT OUT GLOSSARY SECTION\r\n/* GLOSSARY POPUP STYLES - Not used by Visual Studio.net */\r\n\r\n/*div#popUpWindow\r\n { Controlled by the script in the variable L_PopUpBoxStyle_Style\r\n }*/\r\na.glosslink:link\r\n {\r\n color: #000000;\r\n }\r\na.glosslink:visited\r\n {\r\n color: #000000; \r\n }\r\na.glosslink:hover\r\n {\r\n color: #000000;\r\n font-style: italic;\r\n }\r\ndiv#popUpWindow h5 /* Controls the style of the Term in Glossary Popups */\r\n {\r\n margin: 5px 5px 5px 5px;\r\n color: #000000;\r\n }\r\ndiv#popUpWindow p /* Controls the style of the Text in Glossary Popups */\r\n {\r\n margin: 5px 5px 5px 5px;\r\n color: #000000;\r\n }\r\np.GLOSSARY_TEXT\r\n {\r\n }\r\ndiv#popUpWindow a /* Controls the style of the Links in Glossary Popups */\r\n {\r\n }\r\n\r\n*//* END COMMENT OUT OF GLOSSARY SECTION */\r\n\r\n/* END STYLES REQUIRED BY THE SCRIPT \r\n================================================== */\r\n</style>\r\n<!--CSS_END--></HEAD>\r\n<body topmargin=0 id=\"bodyID\" class = \"dtBODY\">\r\n\r\n<!--NONSCROLLING BANNER START-->\r\n<div id=\"nsbanner\">\r\n<div id=\"bannerrow1\">\r\n<TABLE CLASS=\"bannerparthead\" CELLSPACING=0>\r\n<TR ID=\"hdr\">\r\n<TD CLASS=\"runninghead\" nowrap>JScript</TD>\r\n<TD CLASS=\"product\" nowrap>&nbsp;</TD>\r\n</TR>\r\n</TABLE>\r\n</div>\r\n<div id=\"TitleRow\">\r\n<H1 class=\"dtH1\"><A NAME=\"js56jsmthatan2\"></A>atan2 メソッド</H1>\r\n</div></div>\r\n<!--NONSCROLLING BANNER END-->\r\n<DIV id=\"nstext\" valign=\"bottom\">\r\n<P>X 軸から座標 (<I>x</I>,<I>y</I>) までのラジアン単位の角度を返します。</P>\r\n\r\n<PRE class=\"syntax\"><B>Math</B>.<B>atan2(</B><I>y</I>, <I>x</I><B>)</B></PRE>\r\n\r\n<H4 class=\"dtH4\">引数</H4>\r\n\r\n<DL>\r\n<DT><I>x</I></DT>\r\n\r\n<DD>必ず指定します。デカルト座標系での x 座標を表す数式を指定します。</dd>\r\n\r\n<DT><I>y</I></DT>\r\n\r\n<DD>必ず指定します。デカルト座標系での y 座標を表す数式を指定します。</dd>\r\n</DL>\r\n\r\n<H4 class=\"dtH4\">解説</H4>\r\n\r\n<P>戻り値は、座標 (x,y) から求められた角度を表す -π ~ π の値です。</P>\r\n\r\n<H4 class=\"dtH4\">必要条件</H4>\r\n\r\n<P><A HREF=\"js56jsoriversioninformation.htm\">バージョン 1</A> </P>\r\n\r\n<H4 class=\"dtH4\">参 照</H4>\r\n\r\n<P><A HREF=\"js56jsmthatan.htm\">atan メソッド</A> | <A HREF=\"js56jsmthtan.htm\">tan メソッド</A></P>\r\n\r\n<P>対象: <A HREF=\"js56jsobjmath.htm\">Math オブジェクト</A></P>\r\n<!--Footer Start-->\r\n<DIV CLASS=\"footer\">\r\n<br>\r\n<HR><!--Copyright-->\r\n<p>&copy; 2001 Microsoft Corporation. All rights reserved.</p></div> <!--Closes the footer div-->\r\n</div> <!--closes the topic content div-->\r\n<!--FOOTER_END-->\r\n</BODY>\r\n</HTML>\r\n",
"sample.js" : "傾き補正=function(arr1D){\r\n // 1次元配列の傾きを補正する\r\n var X=arr1D[LEN]-1, rad=Math.atan2(整数化([arr1D[X],arr1D[0]],function(arr){return arr[0]-arr[1]}), X), min=Math.min.apply(null,arr1D), newArr=[]\r\n for0L(arr1D,function(i,num){ newArr[i] = 整数化({min:min, num:num}, function(obj){return obj.num - obj.min}) - i*Math.tan(rad) })\r\n \r\n // 最小値が0になるようにする\r\n var min=Math.min.apply(null,newArr)\r\n for0L(newArr,function(i,num){newArr[i] = 整数化({num:num,min:min},function(obj){return obj.num-obj.min})})\r\n return newArr\r\n}\r\nLEN='length'\r\nfor0L = function(arr,fun){for(var i=0,L=arr[LEN],res;i<L;i++){if(res=fun(i,arr[i])){return res}}}\r\nforIn = function(obj,fun){var name,res; for(name in obj){if(res=fun(name, obj[name])){return res}}}\r\n整数化=function(){\r\n var regDot=/\\.(\\d+)/, regE=/\\.(\\d+)e-(\\d+)/, arr, arrL, obj0\r\n var getObj=function(num){\r\n var str=num+'', 桁数=0\r\n while(1){\r\n if(str.match(regE )){ 桁数=RegExp.$2-(-3) ; str=str.replace(regE ,'$1'); break }\r\n if(str.match(regDot)){ 桁数=RegExp.$1.length; str=str.replace(regDot,'$1'); break }\r\n break\r\n }\r\n return {元:num, str:str, 桁数:arr[arrL++]=桁数}\r\n }\r\n return function(obj, func){\r\n arr = []\r\n arrL = 0\r\n obj0 = {}\r\n forIn(obj,function(name, v){ obj0[name] = getObj(v) })\r\n var max=Math.max.apply(null, arr), obj1={}\r\n forIn(obj0,function(name, v){\r\n obj1[name] = (v.str + Array(max-v.桁数+1).join(0)) - 0\r\n \r\n // 万が一整数化に失敗した場合はどのような値で失敗したのか通知する。\r\n if(0<(''+obj1[name]).indexOf('.')){ alert('整数化失敗\\n'+obj1[name]+'\\nstr:'+v.str) }\r\n })\r\n return func(obj1) / (1+Array(max+1).join(0))\r\n }\r\n}()\r\n\r\nWScript.Echo(傾き補正([1,1,2,3,5,8,13,8]))\r\n",
"ラジアン2デグリー.js" : "rad = Math.atan2(1,1)\r\ndeg = rad / Math.PI * 180\r\nrad0 = deg / 180 * Math.PI\r\nWScript.Echo([rad,deg,rad0].join('\\n'))\r\n"
},
"vbs":{
"vbs.js" : "vbs=function(){\r\n var sc=new ActiveXObject('ScriptControl')\r\n sc.Language = 'VBScript'\r\n sc.AddCode((function(){/*\r\n F GetTypeName(obj) : GetTypeName = TypeName(obj): EF\r\n F vbMsgBox(str, buttons, title) : vbMsgBox = msgbox(str, buttons, title): EF\r\n F vbInputBox(str, title, default) : vbInputBox = inputbox(str, title, default): EF\r\n F getAdminMembers(pcName)\r\n Dim objGroup, objUser, str\r\n set objGroup = GetObject(\"WinNT://\" & pcName & \"/Administrators\")\r\n str = \"\"\r\n For Each objUser in objGroup.Members\r\n str = str & objUser.Name & vbLf\r\n Next\r\n getAdminMembers = str\r\n EF\r\n Class TerminaterClass\r\n Public funTer\r\n Private Sub Class_Terminate: funTer: End Sub\r\n Public Sub setF(f): set funTer=f: End Sub\r\n End Class\r\n F getTerminater\r\n Set getTerminater = New TerminaterClass\r\n EF\r\n Sub a(f)\r\n dim b\r\n set b = New TerminaterClass\r\n b.C(f)\r\n msgbox 1111\r\n End Sub\r\n */}+'').split('/*')[1].split('*/')[0].replace(/(\\s)EF(\\s)/g,'$1End F$2').replace(/(\\s)F(\\s)/g,'$1Function$2'))\r\n return {\r\n sc:sc,\r\n msgbox:function(prompt, buttons, title){\r\n // [buttons]\r\n // 0:OK、 1:OK・キャンセル、 2:中止・再試行・無視、 3:はい・いいえ・キャンセル、 4:はい・いいえ、 5:再試行・キャンセル\r\n // 0x10:警告メッセージアイコン, 0x20:問い合わせメッセージアイコン、0x30:注意メッセージアイコン、 0x40:情報メッセージアイコン\r\n // 0:第1ボタンを標準ボタン、 0x100:第2ボタンを、 0x200:第3ボタン、 0x300:第4\r\n sc.Run('vbMsgBox', prompt, buttons, title)\r\n },\r\n inputbox:function(prompt, title, def){return sc.Run('vbInputBox', prompt, title, def)},\r\n getAdminNames:function(PC名){var arr=sc.Run('getAdminMembers', PC名).split('\\n'); arr.pop(); return arr},\r\n setTerminate:function(fun){\r\n var obj=sc.Run('getTerminater')\r\n obj.setF(fun)\r\n return obj\r\n }\r\n }\r\n}()\r\n\r\nvar excel=new ActiveXObject('Excel.Application'), bk=excel.Workbooks.Add(), fun=function(){WScript.Echo(789);excel.Quit()}\r\nexcel.Visible = true\r\nvar obj=vbs.setTerminate(fun)\r\nobj.funTer()\r\n\r\nvbs.msgbox(vbs.getAdminNames((new ActiveXObject('WScript.Network')).computerName))\r\n\r\nvbs.msgbox(vbs.inputbox(111, 'hoge'))"
},
"試験":{
"sample.hta" : "<html>\r\n<title>試験</title>\r\n<body>\r\n <table id=tbl border=1><tr><td></td><td></td></tr></table>\r\n <input id=inp0>\r\n <input id=inp1>\r\n <input id=inp2>\r\n <input id=inp3>\r\n <div id=div></div>\r\n</body>\r\n<script>\r\n resizeTo(400,300)\r\n onload=function(){\r\n var 試験回数=10000, バラツキ確認回数=100, arrS=[], arrE=[], arr解放後=[], obj試験用={}, obj累積={}\r\n 試験(バラツキ確認回数,function(){\r\n arrS.push(getメモリ使用量())\r\n for(var i=0; i<試験回数 ;i++){obj累積[arrS.length*試験回数+i] = obj試験用[i] = tbl}\r\n arrE.push(getメモリ使用量())\r\n obj試験用 = {}\r\n arr解放後.push(getメモリ使用量())\r\n },\r\n function(){ },\r\n function(){ },\r\n function(){\r\n var arr差ES=[], arr差E解=[], sumES=0, sumE解=0\r\n for(var i=0,L=arrS.length; i<L ;i++){\r\n sumES += arr差ES [i] = arrE[i] - arrS[i]\r\n sumE解 += arr差E解[i] = arrE[i] - arr解放後[i]\r\n }\r\n var obj={\r\n 試験回数:試験回数,\r\n バラツキ確認回数:バラツキ確認回数,\r\n 'arrE[n]-arrS[n].max':Math.max.apply(null,arr差ES),\r\n 'arrE[n]-arrS[n].min':Math.min.apply(null,arr差ES),\r\n 'arrE[n]-arrS[n].average':(sumES/L),\r\n 'arrE[n]-arr解[n].max':Math.max.apply(null,arr差E解),\r\n 'arrE[n]-arr解[n].min':Math.min.apply(null,arr差E解),\r\n 'arrE[n]-arr解[n].average':(sumE解/L)\r\n }\r\n var tbo=tbl.firstChild, tr=tbo.firstChild.removeNode(true), tds, newTR\r\n for(name in obj){\r\n tbo.insertBefore(newTR=tr.cloneNode(true))\r\n tds = newTR.childNodes\r\n tds[0].innerText = name\r\n tds[1].innerText = obj[name]\r\n }\r\n inp0.value = arrS\r\n inp1.value = arrE\r\n inp2.value = arr解放後\r\n inp3.value = ''\r\n setInterval(function(){\r\n inp3.value += getメモリ使用量()+','\r\n },10)\r\n setTimeout(function(){ obj累積=null },5000)\r\n })\r\n }\r\n \r\n// document.body.onclick=function(){ document.title = getメモリ使用量() }\r\n \r\n 試験=function(バラツキ確認回数, fun試験, fun試験前, fun試験後, fun全行程終了後){\r\n var 実施回数=0\r\n setTimeout(function(){\r\n setTimeout(function(){ fun試験前() },0)\r\n setTimeout(function(){ fun試験 () },0)\r\n setTimeout(function(){ fun試験後() },0)\r\n \r\n 実施回数++\r\n if(実施回数<バラツキ確認回数){setTimeout(arguments.callee, 0)}else{ fun全行程終了後() }\r\n },0)\r\n }\r\n \r\n getメモリ使用量=function(){\r\n var res = new Enumerator(GetObject(\"winmgmts:root\\\\CIMV2\").ExecQuery(\"SELECT * FROM Win32_Process where ProcessID=\"+getPID()))\r\n return res.atEnd() ? (void 0) : res.item().PageFileUsage\r\n }\r\n getPID=function(){\r\n var f=function(){\r\n // 子プロセスをcscriptにすると黒い画面が一瞬表示されてしまう。\r\n // 「//B」オプションを付けないとwscriptの設定画面が表示されてしまう。\r\n var childPID = (new ActiveXObject('WScript.Shell')).Exec('wscript //B').ProcessID\r\n \r\n // 子の親(自身)のPIDを特定する\r\n var res = new Enumerator(GetObject(\"winmgmts:root\\\\CIMV2\").ExecQuery(\"SELECT * FROM Win32_Process where ProcessID=\"+childPID))\r\n return res.atEnd() ? (void 0) : res.item().ParentProcessID\r\n }\r\n // 1度目で取得に成功すればその値を返し、ダメなら2回目の処理を実行する。\r\n return f() || f()\r\n }\r\n \r\n gt=function(){return (new Date()).getTime()}\r\n loop試験 = function(回数, fun){\r\n for(var s=gt(),i=0;i<回数;i++){ fun() }\r\n return gt() - s\r\n }\r\n</script>\r\n</html>\r\n",
"sample.js" : "gt=function(){return (new Date()).getTime()}\r\nloop試験 = function(回数, fun){\r\n for(var s=gt(),i=0;i<回数;i++){ fun() }\r\n return gt() - s\r\n}\r\n\r\nforIn = function(obj,fun){var name,res; for(name in obj){if(res=fun(name, obj[name])){return res}}}\r\n自身を上書き=function(this_, fun初期化後, arg){\r\n var 呼出し元=arguments.callee.caller\r\n forIn(this_, function(name,v){ return v==呼出し元 ? (this_[name]=fun初期化後) : 0 })\r\n return arg ? fun初期化後.apply(this_, arg) : 0\r\n}\r\n\r\nobj = {\r\n a:function(){\r\n var ローカル関数=function(a){return a-1}\r\n 自身を上書き(this, function(a){return ローカル関数(a-1)}, arguments)\r\n },\r\n b:function(){\r\n var m=arguments.callee\r\n if(!m.fun){\r\n var ローカル関数=function(a){return a-1}\r\n m.fun=function(a){return ローカル関数(a-1)}\r\n }\r\n return m.fun.apply(this, arguments)\r\n },\r\n c:function(){\r\n var ローカル関数=function(a){return a-1}\r\n return function(a){return ローカル関数(a-1)}\r\n }()\r\n}\r\n\r\n試験回数 = 1000000\r\na = loop試験(試験回数, function(){obj.a()})\r\nb = loop試験(試験回数, function(){obj.b()})\r\nc = loop試験(試験回数, function(){obj.c()})\r\n\r\nf2s=function(f){return (f+'').replace(/\\t+/g,'\\t').replace(/\\t+}$/,'}')}\r\nWScript.Echo(['obj.a:'+f2s(obj.a+''),'obj.b:'+f2s(obj.b),'obj.c:'+f2s(obj.c),'','','試験回数:'+試験回数,'a:'+a,'b:'+b,'c:'+c,'1回あたり、bはaより'+(b-a)/試験回数*1000+'マイクロ秒かかる','b/a = '+b/a].join('\\n'))\r\n"
},
"time単位":{
},
"time詳細":{
"sample.js" : "桁=function(num,桁数){\r\n var str0=num+'', str1=Array(桁数+1).join(0)+num\r\n return (桁数 < str0.length) ? str0 : str1.slice(str1.length-桁数,str1.length)\r\n}\r\ntime詳細=function(ms){\r\n var arr=[], 単位=1000, 単位_, f=function(閾値,str){var 余り=ms % (単位_=閾値); ms -= 余り; arr.unshift(桁(Math.round(余り/単位), 2)+str); 単位=単位_ }\r\n if(ms){ f(単位*60 ,'秒' ) }\r\n if(ms){ f(単位*60 ,'分' ) }\r\n if(ms){ f(単位*24 ,'時間') }\r\n if(ms){ f(単位*31 ,'日' ) } \r\n if(ms){ f(単位*12,'ヵ月') }\r\n if(ms){ arr.unshift(ms / 単位_ + '年') }\r\n return arr.join('')\r\n}\r\nWScript.Echo(time詳細(1000 * 60 * 60 * 24 * 31 * 14 + 1000 * 60 * 30))\r\n"
},
"dir":{
"sample.hta" : "<html>\r\n<head>\r\n <title>フォルダ内ファイルリスト取得</title>\r\n <style type=\"text/css\">\r\n .max{width:100%;height:100%}\r\n .w-max{width:100%}\r\n .bc{border-collapse:collapse}\r\n .nowrap{white-space:nowrap}\r\n </style>\r\n</head>\r\n<body>\r\n <table class=max>\r\n <tr><td><iframe name=ifrName id=ifr class=max style=\"border:solid 1px #000;\"></iframe></td></tr>\r\n <tr height=1><td><button id=btn>cls</button></td></tr>\r\n <tr height=1>\r\n <td>\r\n <table class=\"bc w-max\" border=1>\r\n <tr>\r\n <td width=1><span class=nowrap>ファイル名</span></td>\r\n <td><input id=inp0 class=w-max></td>\r\n <td width=1><select id=sel0></select></td>\r\n </tr>\r\n <tr>\r\n <td width=1><span class=nowrap>拡張子</span></td>\r\n <td><input id=inp1 class=w-max></td>\r\n <td width=1><select id=sel1></select></td>\r\n </tr>\r\n <tr>\r\n <td width=1><span class=nowrap>種類</span></td>\r\n <td colSpan=2><select id=sel種類 class=w-max></select></td>\r\n </tr>\r\n <tr>\r\n <td width=1><span class=nowrap>表示</span></td>\r\n <td colSpan=2><select id=sel表示 class=w-max></select></td>\r\n </tr>\r\n </table>\r\n </td>\r\n </tr>\r\n <tr height=1><td><textarea id=ta wrap=off class=w-max style=\"height:70px\"></textarea></td></tr>\r\n </table>\r\n</body>\r\n<script>\r\n resizeTo(400,350)\r\n onload = function(){\r\n btn.onclick()\r\n \r\n var f=function(sel){\r\n var ops=sel[OP], i=0\r\n ops[i++] = new Option('を含む')\r\n ops[i++] = new Option('で始まる')\r\n ops[i++] = new Option('で終わる')\r\n ops[i++] = new Option('と一致する')\r\n }\r\n f(sel0)\r\n f(sel1)\r\n \r\n var ops=sel種類[OP], i=0\r\n ops[i++] = new Option('ファイル')\r\n ops[i++] = new Option('フォルダ')\r\n \r\n var ops=sel表示[OP], i=0\r\n ops[i++] = new Option('名前のみ')\r\n ops[i++] = new Option('フルパス')\r\n }\r\n pathIFR = ''\r\n btn.onclick = function(){\r\n var ifr_=document.getElementById('ifr'), sw初期化, swロック\r\n ifr_.onreadystatechange=function(){\r\n if(swロック || this.readyState!='complete'){return}\r\n if(sw初期化){\r\n var doc=ifr_.contentWindow.document\r\n swロック = true\r\n doc.open()\r\n doc.write('ここにフォルダをドラッグ&ドロップしてください')\r\n doc.close()\r\n return sw初期化 = swロック = false\r\n }\r\n pathIFR = decodeURI((ifr.location+'').replace(/^file:/,'').replace(/^\\/+(\\w:)/,'$1'))\r\n td更新()\r\n ifr初期化()\r\n }\r\n var ifr初期化=function(){\r\n sw初期化 = true\r\n ifr.location = 'about:blank'\r\n }\r\n ifr初期化()\r\n pathIFR = ''\r\n \r\n inp0.value=inp1.value=''\r\n ta.value = ''\r\n }\r\n sel0.onchange=sel1.onchange=sel種類.onchange=sel表示.onchange=inp0.onkeyup=inp1.onkeyup=td更新=function(){\r\n ta.value = ''\r\n if(!pathIFR){return alert('フォルダPathが取得できませんでした')}\r\n pathIFR = pathIFR.replace(/\\//g,'\\\\').replace(/\\\\$/,'')+'\\\\'\r\n var f=function(sel, inp){\r\n var str=inp.value\r\n switch(sel[sI]){\r\n case 0:return str ? ('*'+str+'*') : '*'\r\n case 1:return str + '*'\r\n case 2:return '*' + str\r\n case 3:return str\r\n }\r\n }, name=f(sel0, inp0), ext=f(sel1, inp1), arr=getDir(pathIFR+name+'.'+ext, sel種類[sI]==0)\r\n if(sel表示[sI]==1){ for(var i=0,L=arr.length;i<L;i++){ arr[i] = pathIFR+arr[i] } }\r\n ta.value = arr.join('\\n')\r\n }\r\n \r\n sI='selectedIndex', OP='options'\r\n getDir = function(path, swFile){\r\n path = path.indexOf(' ') ? ('\"'+path+'\"') : path\r\n var obj=(new ActiveXObject('WScript.Shell')).exec('cmd /C dir /A'+(swFile?'-':'')+'D /B '+path), arr=obj.StdOut.ReadAll().split('\\r\\n')\r\n arr.pop()\r\n return arr\r\n }\r\n</script>\r\n</html>",
"sample.js" : "// htaの場合はcmd.exeが一瞬チラつく\r\ngetDir = function(path, swFile){\r\n path = path.indexOf(' ') ? ('\"'+path+'\"') : path\r\n var obj=(new ActiveXObject('WScript.Shell')).exec('cmd /C dir /A'+(swFile?'-':'')+'D /B '+path), arr=obj.StdOut.ReadAll().split('\\r\\n')\r\n arr.pop()\r\n return arr\r\n}\r\nWScript.Echo(getDir('c:/').join('\\n'))"
},
"toJSON":{
"sample.js" : "toJSON=function(){\r\n var gt=function(o){return typeof(o)}, gc=function(o){return o.constructor}, objT={}, objC={}, fStr, rNg=/\\n/g, nt='\\n\\t', main\r\n objT[gt('')] = fStr = function(s){return s.replace(/\\\\/g,'\\\\').replace(/\\r/g,'\\\\r').replace(/\\n/g,'\\\\n').replace(/\"/g,'\\\\\"')}\r\n objT[gt(0)] = objT[gt(true)] = objT[gt(gt.und)] = objC[gc(/1/)] = function(v){return v}\r\n objC[gc(new Date())] = function(o){return 'new Date(\"'+o+'\")'}\r\n objC[gc(gc)] = function(o){return インデント調整(o)}\r\n objC[gc({})] = function(o){\r\n var a=[], i=0\r\n forIn(o,function(n,v){ a[i++] = fStr(n)+':'+(main(v)+'').replace(rNg,nt) })\r\n return '{'+nt+a.join(','+nt)+'\\n}'\r\n }\r\n objC[gc([])] = function(o){\r\n var a0=[], s, a1=[], i=0\r\n for0L(o,function(i,v){a0[i]=main(v)}), s='['+nt+a0.join(','+nt)+'\\n]'\r\n forIn(o,function(n,v){ !a0[n] && (a1[i++] = 'a[\"'+fStr(n)+'\"]='+main(v)) })\r\n return a1[LEN] ? (インデント調整(function(){\r\n var a=sss\r\n aaa111\r\n return a\r\n })+'()').replace(/sss/,s.replace(rNg,nt)).replace(/aaa111/,a1.join(nt)) : s\r\n }\r\n return main=function(o){ var t=gt(o), r=o===null ? 'null' : objT[t] ? objT[t](o) : objC[gc(o)](o); return r }\r\n}()\r\nインデント調整=function(f){ var s=f+'', 最終行=s.match(/([\\t ]*)\\}$/)[1]; return s.replace(new RegExp('\\\\n'+最終行,'g'),'\\n') }\r\nfor0L = function(arr,fun){for(var i=0,L=arr[LEN],res;i<L;i++){if(res=fun(i,arr[i])){return res}}}\r\nforIn = function(obj,fun){var name,res; for(name in obj){if(res=fun(name, obj[name])){return res}}}\r\nLEN='length'\r\n\r\nstr=toJSON({\r\n 1:{\r\n a:2,\r\n b:function(){\r\n confirm(1)\r\n },\r\n c:function(){\r\n var a=[1,2,3]\r\n a.d = 10\r\n a.e = 11\r\n return a\r\n }()\r\n },\r\n f:new Date(),\r\n g:null,\r\n h:false,\r\n i:/123/gi,\r\n j:toJSON.und\r\n})\r\n\r\neval('obj = '+str)\r\n\r\nWScript.Echo(str+'\\n\\n'+toJSON(obj))"
}
}
view raw method.obj hosted with ❤ by GitHub


0 件のコメント:

コメントを投稿