VBについて質問します。


下記の質問の回答1にあるスクリプトを次のように変更してください。
http://q.hatena.ne.jp/1191565432

変更点①
前回終了時に設定してあった、時間を保存できるようにする。

変更点②
時間になったらチャイムのような音が出る。音源は無難な物ならお任せします。ただしXPとVistaの両方で使えるようにしてください。またメッセージボックスは時間になったら表示されるままにしておいてください。

変更点③
「経過を知らせるメッセージが出て、それを消してから次の経過時間を計る」をなくし、何もしなくても指定の時刻になったら音が鳴るようにする。

④「スタート」「ストップボタン」をつける。

以上、よろしくお願いします。

回答の条件
  • 1人2回まで
  • 登録:2007/10/06 11:00:03
  • 終了:2007/10/10 08:06:02

回答(2件)

id:airplant No.1

airplant回答回数220ベストアンサー獲得回数492007/10/06 17:11:39

ポイント100pt

前の人の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
id:taroemon

ご回答ありがとうございます。

おおむね僕の望んだとおりです。

非常に良くできていると思いました。


ただ、以下の点を修正してもらいたいです。

例えば「01/02」と設定すると3分後に音とメッセージが出た後、止まってしまいます。

僕の質問の書き方が悪かったのでしょうが、

ストップボタン(OKボタン)が押されるまで、

1分後、2分後、1分後、2分後・・・・と、

この作業がずっと繰り返し行われるようにしてください。


後、要望として、以下のこともお願いします。

要望①

音を変更したいのですがその手順を教えてください。


要望②

時間が経過するごとに、メッセージボックスが出てきますが、

これだ気づかないでほっておくと、

メッセージボックスがいっぱい出て大変なことになるので、

時間が来ると「Myタイマー」がアクティブになるようにしてください。

他のメッセージボックスは出ないようにしてください。


要望③

アクティブになったものは他の作業のじゃまにならないよう、

他のウィンドウをクリックした時、

メッセージボックスは非アクティブになるようにしてください。


要望④

最初に「続けますか?」というメッセージボックスが出ないようにしてください。


たくさんありますがよろしくお願いします。

なお、これらの修正、要望は回答者1さんでなくても答えていただいて結構です。

以上、よろしくお願いします。

2007/10/07 01:09:47
id:airplant No.2

airplant回答回数220ベストアンサー獲得回数492007/10/07 09:07:27

ポイント100pt

スクリプトを変更しました。


>音を変更したいのですがその手順を教えてください。

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
id:taroemon

ご回答ありがとうございます。

望んでいる物が手に入り、大変満足しました。

また教えてください。

2007/10/10 08:04:09

コメントはまだありません

この質問への反応(ブックマークコメント)

トラックバック

  • トラックバックってな〜に? >VBについて質問します。 >下記の質問の回答1にあるスクリプトを次のように変更してください。 http://q.hatena.ne.jp/1191565432 http://q.hatena.ne.jp/1191636002 考えては
  • 〜の日記 2007-10-11 21:54:01
    ■[UWSC]トラックバックってな〜に? VBについて質問します。 下記の質問の回答1にあるスクリプトを次のように変更してください。 http://q.hatena.ne.jp/1191636002 考えてはみたけれど、VB初心者(
「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません