下記の質問の回答1にあるスクリプトを次のように変更してください。
http://q.hatena.ne.jp/1191565432
変更点①
前回終了時に設定してあった、時間を保存できるようにする。
変更点②
時間になったらチャイムのような音が出る。音源は無難な物ならお任せします。ただしXPとVistaの両方で使えるようにしてください。またメッセージボックスは時間になったら表示されるままにしておいてください。
変更点③
「経過を知らせるメッセージが出て、それを消してから次の経過時間を計る」をなくし、何もしなくても指定の時刻になったら音が鳴るようにする。
④「スタート」「ストップボタン」をつける。
以上、よろしくお願いします。
前の人のWSHを参考に変更しました。
3つのvbsファイルで実現しています。
④は、ボタンは付けられないので、最初にスタートするかを聞いて、その後は停止するときにボタンを押すという、簡易方法で実現しています。
下記は適宜変更してください。
設定ファイル:Mytimer.ini
音ファイル:Notifyにしました。Vistaにもきっとあると思います。
●メイン timer.vbs
Option Explicit Const ForReading = 1, ForWriting = 2, ForAppending = 8 Const iniFile = "Mytimer.ini" Const strMCommand = "WScript.exe ""timerM.vbs"" " Const WshRunning = 0 Dim nn, rc Dim objShell, objExec, objFSO, objInput, objOutput Set objFSO = wscript.CreateObject("Scripting.FileSystemObject") Set objShell = CreateObject("Wscript.Shell") nn = "" On Error Resume Next ' 時間設定を読み取りモードで開いてデフォルトに使う Set objInput = objFSO.OpenTextFile(iniFile, ForReading) nn = objInput.ReadLine objInput.Close On Error GoTo 0 nn = InputBox("""/""区切りで時間を入力", , nn) If IsEmpty(nn) Then wscript.Quit ' 時間設定を上書き Set objOutput = objFSO.CreateTextFile(iniFile) objOutput.WriteLine (nn) objOutput.Close rc = MsgBox("続けますか?", vbYesNo) If rc = vbYes Then Set objExec = objShell.Exec(strMCommand & nn) If MsgBox("タイマー稼働中" & vbCrLf & vbCrLf & "停止は、OKを押してください", vbOKOnly, "Myタイマー") = vbOK Then If objExec.Status = WshRunning Then objExec.Terminate End If End If
●timerM.vbs
Option Explicit Const strSCommand = "timerS.vbs " Dim nn2, t Dim objShell Set objShell = CreateObject("Wscript.Shell") nn2 = Split(WScript.Arguments(0), "/") For t = 0 To UBound(nn2) wscript.sleep (60000 * nn2(t)) objShell.Run strSCommand & nn2(t), 0, False Next
●timerS.vbs
Option Explicit Const strSoundFile = "C:\windows\Media\Notify.wav" Dim objShell Dim strCommand Set objShell = CreateObject("Wscript.Shell") strCommand = "sndrec32 /play /close " & "" & strSoundFile & "" objShell.Run strCommand, 0, False WScript.Sleep 1000 MsgBox WScript.Arguments(0) & "分経過しました" & vbCrLf & Time, vbMsgBoxSetForeground + vbSystemModal
スクリプトを変更しました。
>音を変更したいのですがその手順を教えてください。
Step1.C:\windows\Mediaの中で好きなファイル名を探す(右クリックで再生)
Step2.timerS.vbs中の下記を好きなファイル名に変える。
Const strSoundFile = "C:\windows\Media\Notify.wav"
要望3は、メインのウィンドウのことと思います。
アクティブウィンドウは、他ウィンドウをクリックすれば自動で非アクティブになるので、スクリプト側では何も対応していません。
●メイン timer.vbs
Option Explicit Const ForReading = 1, ForWriting = 2, ForAppending = 8 Const iniFile = "Mytimer.ini" Const strMCommand = "WScript.exe ""timerM.vbs"" " Const WshRunning = 0 Dim nn, rc Dim objShell, objExec, objFSO, objInput, objOutput Set objFSO = wscript.CreateObject("Scripting.FileSystemObject") Set objShell = CreateObject("Wscript.Shell") nn = "" ' 時間設定を読み取りモードで開いてデフォルトに使う ' ファイルがなかったらエラー無視して続ける On Error Resume Next Set objInput = objFSO.OpenTextFile(iniFile, ForReading) nn = objInput.ReadLine objInput.Close On Error GoTo 0 nn = InputBox("""/""区切りで時間を入力", , nn) If IsEmpty(nn) Then wscript.Quit ' 時間設定を上書き Set objOutput = objFSO.CreateTextFile(iniFile) objOutput.WriteLine (nn) objOutput.Close ' タイマーのサブプロセスを動かす Set objExec = objShell.Exec(strMCommand & nn) If MsgBox("タイマー稼働中" & vbCrLf & vbCrLf & "停止は、OKを押してください", vbOKOnly, "Myタイマー") = vbOK Then If objExec.Status = WshRunning Then objExec.Terminate End If
●timerM.vbs
Option Explicit ' アラーム時に鳴らすファイルの名前 Const strSoundFile = "C:\windows\Media\Notify.wav" Dim nn2, t, strCommand Dim objShell Set objShell = CreateObject("Wscript.Shell") strCommand = "sndrec32 /play /close " & "" & strSoundFile & "" nn2 = Split(wscript.Arguments(0), "/") Do While True For t = 0 To UBound(nn2) wscript.sleep (60000 * nn2(t)) objShell.Run strCommand, 0, False objShell.AppActivate "Myタイマー" Next Loop
ご回答ありがとうございます。
望んでいる物が手に入り、大変満足しました。
また教えてください。
ご回答ありがとうございます。
おおむね僕の望んだとおりです。
非常に良くできていると思いました。
ただ、以下の点を修正してもらいたいです。
例えば「01/02」と設定すると3分後に音とメッセージが出た後、止まってしまいます。
僕の質問の書き方が悪かったのでしょうが、
ストップボタン(OKボタン)が押されるまで、
1分後、2分後、1分後、2分後・・・・と、
この作業がずっと繰り返し行われるようにしてください。
後、要望として、以下のこともお願いします。
要望①
音を変更したいのですがその手順を教えてください。
要望②
時間が経過するごとに、メッセージボックスが出てきますが、
これだ気づかないでほっておくと、
メッセージボックスがいっぱい出て大変なことになるので、
時間が来ると「Myタイマー」がアクティブになるようにしてください。
他のメッセージボックスは出ないようにしてください。
要望③
アクティブになったものは他の作業のじゃまにならないよう、
他のウィンドウをクリックした時、
メッセージボックスは非アクティブになるようにしてください。
要望④
最初に「続けますか?」というメッセージボックスが出ないようにしてください。
たくさんありますがよろしくお願いします。
なお、これらの修正、要望は回答者1さんでなくても答えていただいて結構です。
以上、よろしくお願いします。