NOW  CONSTRUCTING

TOP PAGE  CEMENT ENGINEERING  EXCEL VBA .NET VB SCHTASKS/WSH

.

4-A. VB による希望時間に スリープ/同復帰(Sleep/Wake) を行うプログラム 

.

.
 
  PC停止4動作(シャットダウン、再起動、休止状態、スリープ)の即停止またはTimerにより遅延停止は VB によるプログラム作成は可能であり、数年前に完成(図-1)していた。 しかしスリープ後にPCを復帰させるプログラムを作成したいと考えてNET上を調べていたが、「難しいとか、出来ないとか」の書き込みを目にして、諦めてフリーソフト「ねむねむスケジュラー」(使い勝手はよい)を使用していた。
  当然スリープ中は VB は作動しないので VB単独 のプログラムでは不可能となるが、スリープ中でも復帰できる TaskScheduler を利用すれば可能になるのではないかと考えて、TaskSchduler について学習を始めたところ TaskSchduler を動かす SCHTASKS.exe について知ることとなる。 SCHTASKS は DOSコマンド で動くため VS に組込み込める。 
  試行錯誤の結果 VB から TaskSchdulerライブラリ に wake を登録、また トリガー(希望時間) を変更することに成功した。 しかし SCHTASKS から スリープ解除するコマンド がないため 最初は、wake を開いて プロパティ:条件「□ タスクを実行するためにスリープを解除する(Z)」  に手作業でチェックを入れなければならなかった。 当初一回だけの手作業のため特に問題はないと思ったが、SCHTASKS に xmlファイル を読み込ませるコマンドがあり、スリープ解除にチェックを入れた xmlファイル があれば、そのファイルを VB から読み込ませればよいと気づく。 
  TaskSchdulerの設定画面 から 作成した Task をエクスポート出来るので 設定画面で wakeタスク を作成して エクスポート してみた。 wake.xmlの名称 にして、VB から 読み込ませたところ、無事 TaskSchdulerライブラリに wake が登録された。 後は スリープする前に VB より wakeのトリガー(希望時間) を変更してやればよい。 スリープになれば スリープ中は TaskSchduler が動き トリガー(希望時間) になると スリープが解除され復帰することが確認できた。 (図-2)はその時使用した試用Timer。
  (図-3)は(図-1)と(図-2)を組み合わせて完成した 「PC-Sleep/Wake & Close 20」  の完成画面です。 SleepTimeとWakeTime をセットして[1.Timer Set]を押すと TaskScheduler の wake のトリガー時間を WakeTime に変更し、次に[2.Start Sleep-Wake] を押すとTimerが動き出し、 SleepTime が来るとSleep する。 Sleep後は TaskScheduler にお任せで、WakeTime になると復帰する。 インストール時に一度 だけSCHTASKSのコマンドに DomainUserNameとSignInPassWordが必要なための入力 と 作成した wake.xml を C:\  にコピーすれば あとは 一度時間を設定して[1.Timer Set]を押すと wake.xmlファイル が読み込まれるので そこで一旦 [Close] して再起動すれば 全ての設定が終わる。 後は時間の設定と2個のボタンの操作だけで 希望時間に Sleep/Wake する。
  本プログラムのアイコンをタスクトレイに登録しておけば 停止4動作 と Sleep/Wake が容易に行えるようになる。 自作NetRadio録音プログラムにて Jazz番組 を毎週録音しているが 録音プログラムのセット後 Sleep/Wake させて省電力化を計っている。
  更に 自作NetRadio録音ソフト を自動化できないかと考えた結果 TaskSchduler から WSH(Windows Script Host) を経由して 録音プログラム を起動するようにし 録音の自動化に成功したので この後 録音プログラム、WSHとTaskSchduler のかかわりについて記述する予定です。 
  注記:NetRadio録音ソフトには 有料or無料 ものが沢山あるが 当方は無料の  RadiKool 数年前よりを使用している。 Radikool は同時3録音可能で予約録音は当然のこと、音質も選択できて優れたソフトと思っている。 自作録音ソフトは 音楽編集録音ソフトの GigiOnSound5E-Win7(Win10でも使えている) を VB から KeyCodeで制御 して録音するプログラムでして、録音後の編集が簡単にできるし、音質は市販録音ソフトより優れているのではないかと思っており 主として自作録音ソフトを使用し、RadiKool はその予備としている。
図-1
図-2
図-3
  SWT画面:通常表示で Sleep/Wakeするためのだけの画面表示  
  SWT+DTC画面: Direct/Timer停止するための画面表示  
  下部の入力部分は通常隠れている。 画面表示は window で選択する。  
<参考-1> wake.xmlファイル  クリックすると拡大
    
<参考-2> VB中の SCHTASKS.exe へのコマンド
         実プログラムに合わせ 変更してください。
 
  ・最初の設定時に[1.TimerSet]を押すと C:\ にコピーした wake.xmlをTaskScheduler
   に 一度だけ読み込ませる。 shell 関数にて schtasks を操作した。

以上 Timer 部分等のVBは省略

   '----- wake.xml の読み込ませ ru:UserName、rp:SignInPassWord

     Dim task01 As String

         task01 = "schtasks /create /ru ****** /rp ######## /tn wake /xml c:\wake.xml"

     Dim procID1 As Integer

        procID1 = Shell("cmd.exe /c " & task01, AppWinStyle.Hide, True)

    '----- wake.xml の読み込ませ

 

    ・ 一度読み込ませれば 後は読込をパスして [1.TimerSet]を押しても WakeTime
   (希望日時)だけの変更させる。  shell 関数にて schtasks を操作した。

  '----- wake の 日時 を変更する  RP:SignInPassWord

     Dim task02 As String

        task02 = "SCHTASKS /Change /RP ######## /TN wake /ST 17:20 /SD 2017/04/05

     Dim procID2 As Integer

        procID2 = Shell("cmd.exe /c " & task02, AppWinStyle.Hide, True)

     '----- wake の 日時 を変更する

以下 Timer 部分等のVBは省略

 
<参考-4>SchTasks.exe を使用してタスクを作成してタスク スケジューラを管理
schtasks.exe使用例pdf
  TaskScheduler を操作する SCHTASKS.exe に関する MSの説明全文を日本語と英語で pdfファイル で添付しておきますので参考にしてください。 ところどころ 赤字 でコメントも記入しています。 (当方の学習のために作成したもの)
 
 

TOP PAGE  CEMENT ENGINEERING  EXCEL VBA .NET VB SCHTASKS/WSH

NOW  CONSTRUCTING