|
初心者のため連続投稿、誠にすみません。
過去の質問投稿に「えありさん」が答えていられました。 【当日】指定時刻までスクリプトを停止するコードをコピペして使っていたのですが、せっかく UWSCという自動化ソフトを使いながら、毎日、時刻設定するのが面倒になってきました。
「えありさん」が過去のページで答えていられましたスクリプトは下記の通りです。
>> 再開時刻 = Input(GetTime(), G_TIME_HH2 +":"+ G_TIME_NN2 +":"+ G_TIME_SS2) >> // _Break という関数に 2015/05/2711:14:55 のように開始したい日時を送る >> _Break(G_TIME_YY4 +"/"+ G_TIME_MM2 +"/"+ G_TIME_DD2 + 再開時刻) >> MsgBox("時間ですよ") >> >> Procedure _Break(再開時刻) >> Repeat >> GetTime( ); Now = G_TIME_HH2 +":"+ G_TIME_NN2 +":"+ G_TIME_SS2 //* >> GetTime(0, 再開時刻); Wait = G_TIME_HH2 +":"+ G_TIME_NN2 +":"+ G_TIME_SS2 //* >> Fukidasi(Now + "<#CR>" + Wait); Sleep(1) //* この行含め上記3行は動作に不要 //* >> Until GetTime(0, 再開時刻) < GetTime() >> FEnd
毎日、実行させる時刻は【当日】の同じ時刻なので、スクリプト内に直接、12:00:00 などと 記載して実行させるにはどのようにしたら良いのでしょうか?
ヘルプを見ながら、1行目の 再開時刻 = Input(GetTime(), G_TIME_HH2 +":"+ G_TIME_NN2 +":"+ G_TIME_SS2) を 再開時刻 = GetTime(,12:00:00) とか 再開時刻 = GetTime(), 12:00:00 や 開始時刻 = GetTime(,"12:00:00") など、その他色々
と色々やってみたのですが、いずれもうまく動きません。 【当日の12:00:00】は毎日固定なので、スクリプト内に直接書き込みたいと思います。
どうやったら、うまく動くのかアドバイスを頂ければを思います 誠に申し訳ございませんが、宜しくお願い致します。
|
No.1339 2015/06/08(Mon) 01:55:43
|
☆ Re: 指定時刻まで待機させたいのですが / Liners |
|
|
> スクリプト内に直接、12:00:00 などと記載して実行させるにはどのようにしたら良いのでしょうか? GetTime(); 再開時刻 = "12:00:00"
考察: よく見かけるスクリプトですが、指定時間を過ぎていると待機しません。 繰り返し使うのなら、指定時間を過ぎているなら次の日まで待機してほしい所です。
考え方を少し変えて、指定時間までSleepすると考えるなら極端に単純化出来ます。下記に例を挙げます。
指定時刻 = GetTime(0.5); //指定時刻の秒数を86400(1日)で割る "12:00:00"の場合 現在時刻 = Gettime() 待機秒数 = 指定時刻 - 現在時刻 + (指定時刻 < 現在時刻) * 86400 Fukidasi("指定時刻まで " + 待機秒数 + " 秒") Sleep(待機秒数) MsgBox("時間ですよ")
// 実際には Sleep(GetTime(0.5) - GetTime() + (GetTime(0.5) < GetTime()) * 86400) と一行程度ですね♪
|
No.1340 2015/06/08(Mon) 03:02:27
|
|
☆ Re: 指定時刻まで待機させたいのですが / たか |
|
|
Linersさん、たびたびすみません。
ありがとうございます。 教えて頂いた通り開始時刻を素直に、"21:00:00"とかに直に記述しますと無事に動作します。 (当然、過去の時刻でなくて、将来の時刻です)
確かに、再開時刻を過ぎていると待機されずにすぐに実行されますね。 再開時刻を変数に代入させて、変数を参照させると不思議なことにすぐに実行されてしまいます。
Sleep(GetTime(0.5) - GetTime() + (GetTime(0.5) < GetTime()) * 86400) は、指定時刻を得てから、現在時刻よりも大きかったら待機して実行ですよね。 理論は分かるのですが、12:00なので0.5になると思うのですが、仮にキリの悪い、午前9:00とか でしたらどうなるのでしょうか?
前記の場合、"12:00:00"を再開時刻という変数に代入していますので、更に12:00:00という変数 を作って、時刻を代入することは無理なのでしょうか? 何か、せっかく回答を頂いたにもかかわらず追加の質問になってしまいまして申し訳ございません。
自分でもいろいろと試しているのですが、初心者のためにうまくいかないうえに、うまい説明が できなくて申し訳ございません。
|
No.1341 2015/06/08(Mon) 21:17:29
|
|
☆ Re: 指定時刻まで待機させたいのですが / えあり |
|
|
可用性を含めて関数を呼び出す形にしたのですが もうこれでいいんじゃないかな
WaitHour = 19 //時間 WaitMinute = 46 //分 WaitSecond = 40 //秒
Repeat GetTime() Fukidasi("現在[ " + G_TIME_HH2 +":"+ G_TIME_NN2 +":"+ G_TIME_SS2 +"]"+_ "<#CR>指定[ "+ FORMAT(WaitHour, 2) +":"+ FORMAT(WaitMinute, 2) +":"+ FORMAT(WaitSecond, 2) +"]") Sleep(0.3) Until WaitHour * 3600 + WaitMinute * 60 + WaitSecond = G_TIME_HH * 3600 + G_TIME_NN * 60 + G_TIME_SS
MsgBox("時間ですよ")
|
No.1343 2015/06/09(Tue) 19:50:48
|
|
☆ Re: 指定時刻まで待機させたいのですが / Liners |
|
|
> 仮にキリの悪い、午前9:00とかでしたらどうなるのでしょうか? 9 * 3600 / 86400 = 0.375
> 更に12:00:00という変数を作って、時刻を代入することは無理なのでしょうか? 12:00:00という変数は作れません。
察するに 待機時刻("09:00:00") の様な関数で面倒な計算等、その全てを押し付けて実行したいのでは? もちろん、現在時刻よりも大きかったら待機して実行し、PCに負荷のかからないSleep方式。
なお、指定時間に実行させるには、基準時刻が必要でした。訂正を含め、上記関数を作成してみました。
待機時刻("09:00:00") MsgBox("時間ですよ")
Procedure 待機時刻(指定時刻) 現在時刻 = gettime(); 基準日= G_TIME_YY4 + "/" + G_TIME_MM2 + "/" + G_TIME_DD2 + " "; 基準時刻 = 基準日 + "00:00:00" 日数換算 = (gettime(0, 基準日 + 指定時刻) - gettime(0, 基準時刻)) / 86400 Sleep(GetTime(日数換算, 基準時刻) - 現在時刻 + (GetTime(日数換算, 基準時刻) < 現在時刻) * 86400) FEnd
|
No.1344 2015/06/09(Tue) 21:26:34
|
|
☆ Re: 指定時刻まで待機させたいのですが / たか |
|
|
えありさん、Linersさん
すみません返信が遅くなりまして、 お二方とも素晴らしいですね。
作れない(12:00:00)変数を作って一生懸命動かそうとしてもエラーは当たり前ですね。 SleepがPCに負荷がかからないなど勉強になりました。
これからスクリプトの中に組み込んで試してみたいと思います。 どうも有り難うございました。 今後とも宜しくお願い致します。
|
No.1349 2015/06/11(Thu) 12:08:27
|
|