Powerpoint VBAを使おう!

Powerpoint VBAやExcelのVBAで遊んでいます。JavaScriptやJScript,HTAに最近はまってます。

自己書き込み型再び HTAネタ

以前失敗した自己書き込み型の掲示板ぽいやつです。

強引に解決?したものをメモで。

前回のものはローカルで使う場合は動くけどネットワーク上で動かすとADODB.Streamが警告を受けて止まってしまうというもの。

FilesystemObjectを使う限り,UTF-8は使えないからとしばらく前にあきらめていました。

でも,ある本で,JavascriptShift_JISで組んでいるところを発見。meta文で指定すれば普通に使えるそうです。

それなら・・と作り直してみました。ちなみにShift_JISだと環境依存文字で結構致命的なことになるので,推奨されないUTF-16でやってみることにしました。

<!doctype html>
<html>
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge" charset="utf-16"> 
<title>Write Me</title>
<style type="text/css">
    *{font-family:"メイリオ",sans-serif;font-size:calc(18px+1vw);}
    #log{font-size: 5vmin;background-color: lightcyan}
    #input{width:80vw;font-size: 5vmin;background-color:cornsilk}
</style>
</head>
<body>
<div id="targetDiv"></div>
<div id="log"></div>
<script>
    var targetDiv=document.getElementById("targetDiv")
    var DataCount,ForReading = 1,ForWriting=2,ForAppending = 8
    var User= new ActiveXObject("WScript.Network").UserName;
    var fso = new ActiveXObject("Scripting.FileSystemObject");
    var fileName=location.pathname.split("\\").pop()
    targetDiv.innerHTML="<form name='form'>"+
        "<input type='text' id='input' name='text' onFocus='func()'>"+
        "<input type='text' name='dummy' style='display:none'>"+
        "<input type='button' href='#' value='送信' onclick='writeMe()' style='font-size:5vmin'></form>"
    const timerID=setTimeout(func2,1000)
    var inputbox=document.getElementById("input")
    inputbox.addEventListener('keydown',onkeydown)
    //end of root
    function func(){clearTimeout(timerID)}
    function func2(){location.reload()}
    function onkeydown(e){
        if (e.keyCode=='13'){writeMe()}
    }
    function writeMe(){
        var res=document.form.text.value
        var ForReading = 1,ForWriting = 8,ForAppending = 2
        var data = fso.OpenTextFile(fileName, ForReading, false,-1)
        var srcdata = data.ReadAll()
        data.Close()
        var srcArr=srcdata.split("\r\n")
        var lineCount=srcArr.length
        
        for (var i=lineCount-1;i!=-1;i--) {
            if (srcArr[i].indexOf("★☆★□■データ書き込みこの下■□★☆★")>0){
                var データ開始行=i
                break
            }
        }
        srcArr.splice(i+1,0,User+","+res)
        var data2 = fso.OpenTextFile(fileName, ForAppending, true,-1)
        data2.Write(srcArr.join("\r\n"))
        data2.Close()
        location.reload()
    }
</script>
<p id='data' hidden flg='★☆★□■データ書き込みこの下■□★☆★'>
</p>
<script>
    var logdiv=document.getElementById("log")
    var logdata=document.getElementById("data").innerHTML
    logdata=logdata.split("\n")
    var htm=""
    for (var i=0;i<logdata.length;i++){
        if (logdata[i].split(",")[1]!=undefined) htm=htm+logdata[i].split(",")[1]+"<br>"
    }
    if(logdata=="") {logdiv.innerHTML=""}else{logdiv.innerHTML=htm}
</script>
</body>
</html>

けっこう短いですが,これで全部。メモ帳などに貼り,拡張子HTAUnicodeで保存します。
f:id:chemiphys:20190604211616p:plain
文字コードを間違ってなければたぶん動きます。データは

<p id='data' hidden flg='★☆★□■データ書き込みこの下■□★☆★'>
</p>

この間にどんどん入っていくはずです。

単独ファイルで動く掲示板というものを実現できた気がします。

サーバー内の散逸するファイルへのリンク集とか作るのに面白いですね。

自動更新を数秒ごとにするので,複数人で開いても普通にチャットっぽくなる。

コードも短くお手軽なので,使い道は考えていませんがお気に入りのコードでした。