- ベストアンサー
キーを押している間の時間を計算するプログラム
- キーを押している間の時間を計算してくれるプログラムを教えてください。
- 指定した時間の間に何回キーを押し,各回の押下時間と合計押下時間を測定したいです。
- タイマー機能とキーの押下・離上時刻の取得が必要です。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
一応 >以下の機能を備えたプログラム を作ってみました。IE用です。 昨今のマシン(メモリやCPU)では、あまり問題にならないスピードで動くとは思いますが、1ミリ秒の精度があるかというと(値は求まっても)かなり疑問です。(データが増えるにつれて画面の更新の時間も(ミリ秒という精度では)影響するかもしれません) 多分、集計するプログラム(処理)は別にあるものと想定し作っていません。 エンターキーを押すと開始します。(マウスで開始ボタンをクリックしても良い) エンターキーによる開始の場合最初にエンターキーのキーアップが記録されます。 あとは、適当にキーを押します。 -----8<-----8<-----8<-----8<-----8<-----8<----- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <html> <head> <meta HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=SHIFT_JIS"> <title>限定された時間内に押されたキーの時間を集計する</title> <script language="JScript"> <!-- var keyPushState=false; //キーが押されていない var result; //結果を表示するテキストエリア var time; //キーが押された時間 var IntervalID;//実行時間制御 window.onload=init; function init(){ document.body.onkeydown=keyDown; document.body.onkeyup=keyUp; document.getElementById("startButton").focus(); result = document.getElementById("result"); IntervalID=undefined; } function keyDown(){ time = new Date(); if(!keyPushState){//キーが既に押されている状態である keyPushState=true; result.value += String.fromCharCode(window.event.keyCode)+":KeyDown at "+timeFormat(time)+"\n"; } } function keyUp(){ time = new Date(); result.value += String.fromCharCode(window.event.keyCode)+":KeyUp at "+timeFormat(time)+"\n"; keyPushState=false; } function timeFormat(t){// HH:MM:SS.sss return ( ZeroFormat(t.getHours(), 2)+":"+ ZeroFormat(t.getMinutes(),2)+":"+ ZeroFormat(t.getSeconds(),2)+"."+ ZeroFormat(t.getMilliseconds(),3) ); } function ZeroFormat(num, n){// ZeroFormat(1,3) => "001" var ret=""+num; while(ret.length < n){ ret = "0" + ret; } return (ret); } function start(){ if(IntervalID==undefined){ document.body.onkeydown=keyDown; document.body.onkeyup=keyUp; result.value="開始時間"+timeFormat(new Date())+"\n"; IntervalID=setInterval("start()",5*60*1000);//5分 } else { result.value+="終了時間"+timeFormat(new Date())+"\n"; document.body.onkeydown=null; document.body.onkeyup=null; clearInterval(IntervalID); alert("終了しました"); } } //--> </script> </head> <body> <button id="startButton" type="button" onclick="start()">開始</button><br> <textarea id="result" cols="60" rows="30" READONLY></textarea><br> もう一度実行するときは、画面を更新して下さい。 </body> </html>
その他の回答 (1)
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
function init(){}の中の >document.body.onkeydown=keyDown; >document.body.onkeyup=keyUp; の2行を削除しておいて下さい。 削除し忘れです。 開始前にキー入力時間の記録をしてしまいます。 行の先頭に // を入れておいて、場合によっては復活させて、特に入力時間を制限しない場合に使うといいかもしれません。
お礼
BLUEPIXYさま hiromiro0423です。 ありがとうございました。 早速、ためしに使わさせていただきました。 時刻のみならず、押したキーも取得するように していただいたのですね。 とても満足です。 直接お返しは出来ないかもしれませんが、 コミュニティに出来るだけ還元し お役に立てればと思っております。 ありがとうございました。