Idea to Code

アイデアをコードへ
独学でプログラミング関係にいろいろ手を出すサイト

hawk

HTA

タイマー2017/09/25

HTAでタイマーアプリを作ってみた。

timer.htapop.vbsを同一のフォルダに配置しtimer.htaを起動することで使用可能。

時刻(時分)とメッセージを設定しチェックをつけると、その時刻になったらポップアップが表示される。

ポップアップを並列処理するために外部VBSを使用。


【入力画面】



【ポップアップ】



timer.hta
<!DOCTYPE html>
<html lang="ja">
  <head>
    <meta http-equiv="Content-type" content="text/html; charset=utf-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=9" />
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
    <title>タイマー</title>
    <script type="text/vbscript">
      Window.ResizeTo 310,300
    </script>
    <hta:application
      scroll="no"
      maximizeButton="no"
      border="thin"
    />
    <style>
      div {
        margin-bottom: 5px;
      }
    </style>
  </head>
  <body>
    <div id="date0">
      <input type="checkbox" class="cb"/>
      <select class="date_h">
        <option value="00" selected>00</option>
      </select>
      <select class="date_m">
        <option value="00" selected>00</option>
      </select>
      <input type="text" class="message" />
    </div>
    <div id="date1">
      <input type="checkbox" class="cb"/>
      <select class="date_h">
        <option value="00" selected>00</option>
      </select>
      <select class="date_m">
        <option value="00" selected>00</option>
      </select>
      <input type="text" class="message" />
    </div>
    <div id="date2">
      <input type="checkbox" class="cb"/>
      <select class="date_h">
        <option value="00" selected>00</option>
      </select>
      <select class="date_m">
        <option value="00" selected>00</option>
      </select>
      <input type="text" class="message" />
    </div>
    <div id="date3">
      <input type="checkbox" class="cb"/>
      <select class="date_h">
        <option value="00" selected>00</option>
      </select>
      <select class="date_m">
        <option value="00" selected>00</option>
      </select>
      <input type="text" class="message" />
    </div>
    <div id="date4">
      <input type="checkbox" class="cb"/>
      <select class="date_h">
        <option value="00" selected>00</option>
      </select>
      <select class="date_m">
        <option value="00" selected>00</option>
      </select>
      <input type="text" class="message" />
    </div>
    <div id="date5">
      <input type="checkbox" class="cb"/>
      <select class="date_h">
        <option value="00" selected>00</option>
      </select>
      <select class="date_m">
        <option value="00" selected>00</option>
      </select>
      <input type="text" class="message" />
    </div>
    <div id="date6">
      <input type="checkbox" class="cb"/>
      <select class="date_h">
        <option value="00" selected>00</option>
      </select>
      <select class="date_m">
        <option value="00" selected>00</option>
      </select>
      <input type="text" class="message" />
    </div>
    <div id="date7">
      <input type="checkbox" class="cb"/>
      <select class="date_h">
        <option value="00" selected>00</option>
      </select>
      <select class="date_m">
        <option value="00" selected>00</option>
      </select>
      <input type="text" class="message" />
    </div>
    <div id="date8">
      <input type="checkbox" class="cb"/>
      <select class="date_h">
        <option value="00" selected>00</option>
      </select>
      <select class="date_m">
        <option value="00" selected>00</option>
      </select>
      <input type="text" class="message" />
    </div>
    <script type="text/javascript">
      $(function(){
        var D_MAX = 9;
        var root, tar, op;

        // オプションを追加
        for(var i=0; i<D_MAX; i++){
          // hにオプションを追加
          root = $("#date" + i);
          tar = root.find(".date_h");
          for(var j=1; j<24; j++){
            v = ("0" + j).slice(-2);
            op = $("<option>").val(v).text(v);
            tar.append(op);
          }

          // mにオプションを追加
          tar = root.find(".date_m");
          for(var j=1; j<60; j++){
            v = ("0" + j).slice(-2);
            op = $("<option>").val(v).text(v);
            tar.append(op);
          }
        }

        // 1秒毎にデータをチェックし、必要に応じてメッセージを表示
        setInterval(function(){
          var dd = new Date();
          var now = ("0" + dd.getHours()).slice(-2) + ":" + ("0" + dd.getMinutes()).slice(-2);

          for(var i=0; i<D_MAX; i++){
            root = $("#date" + i);
            if(root.find(".cb").prop("checked")){
              var time = root.find(".date_h").val();
              time = time + ":";
              time = time + root.find(".date_m").val();
              if(time == now){
                var mes = time + "になりました。\n" + root.find(".message").val();
                msgVB(mes);
                root.find(".cb").prop("checked", false);
              }
            }
          }
        }, 1000);
      });
    </script>
    <script type="text/vbscript">
      Function msgVB(text)
        Set objWshShell = CreateObject("WScript.Shell")
        objWshShell.Run "pop.vbs """ + text + """",,False
        Set objWshShell =Nothing
      End Function
  </script>
  </body>
</html>
pop.vbs
MsgBox Wscript.Arguments(0), vbOKOnly + vbSystemModal, "タイマー通知"