人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

VBについて質問します。

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

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

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

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

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

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

●質問者: taroemon
●カテゴリ:コンピュータ
✍キーワード:VB VISTA XP スクリプト スタート
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● airplant
●100ポイント

前の人の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
◎質問者からの返答

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

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

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


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

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

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

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

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

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


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

要望?

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


要望?

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

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

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

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

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


要望?

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

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

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


要望?

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


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

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

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


2 ● airplant
●100ポイント

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


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

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
◎質問者からの返答

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

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

また教えてください。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ