NOW  CONSTRUCTING

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

.

4-B. 自作NetRadioPlayer&Recorderプログラム を WSHTaskSchduler を 使って完全自動化 

.

.

 4-A.において 「自作NetRadio録音ソフト を自動化できないかと考えた結果  Task Schduler から WSH(Windows Script Host) を経由して 録音プログラム を起動する
ようにし 録音の自動化に成功したので この後 録音プログラム、WSHとTaskSchdulerのかかわりについて記述する予定です。」 と記述したが 以下この作業実績を報告する。 
自作NetRadio録音ソフト「NetRadioPlayer&Recorder20-DigionW」を簡単に紹介
図-1
  ・上半分がNetRadioのPlayer、下半分がRecorderである。
  ・Playerは 下半分のTimerで On-Offできる。
  ・録音はPlayerで選局後、StartTime/StopTimeを入力後[1.TimerSet]→[2.Timer Start
   -Stop]を押すと StartTimeになると 編集録音ソフトDigiOnSound5Eを開いて録音状
   態にし、選局したラジオ局を開いて出る音声を録音する。 StopTimeが来るとラジオ
   局を閉じて録音を止める。
  ・録音停止後 選定したSoundFormatで指定ホルダに保存する。
  ・保存完了後のPC-Coditionを現状、休止状態、スリープの3状態から選択できる。
自動化の問題点
  ・毎回選局先、日時を手作業で入力(予約ができない)し、ボタン2個を手押しせねば
   ならない。
問題点への対応
・曜日単位で
  ・選局先の保存
   ・曜日単位で日時設定・保存ができるように改造
  ・ボタン2個 には ShortCut KeyCode を設定、外部から操作できるように改造
改良した録音ソフト「NetRadioPlayer&Recorder30-DigionW」
図-2
  ・Select Next [    ] Weekday にて曜日を設定、時間を入力して[1.TimerSet]を押せば 選局先と次の曜日の日時が設定・保存される。 選択無***では当日のままとなる。 保存後[Close]して WSH経由で TaskScheduler から呼び出す。
.
<参考>次の曜日の月日を設定・保存するための Code

 Sub GetnextWeekDate()   '次の曜日の日時が設定・保存 の処理ルーティン全文

        Dim H3 As String = ComboBox5.SelectedItem  '待ち時間入力

        Dim M4 As String = ComboBox6.SelectedItem  '待ち分入力

        Dim S9 As String = ComboBox7.SelectedItem  '待ち秒入力

        Dim H11 As String = ComboBox8.SelectedItem  '待ち時間入力

        Dim M12 As String = ComboBox9.SelectedItem  '待ち分入力

        Dim S18 As String = ComboBox10.SelectedItem  '待ち秒入力

    Dim myDate As Date = Now()     '指定曜日の暦日処理

        Dim myDate2 As Date = Now()

        Dim myDate3 As Date = Now()

        Dim wName As String

        Dim NN As Integer

        Dim nextDay As Date

        Dim nWeek As String = ComboBox14.SelectedItem

        If ComboBox14.SelectedItem = "***" Then : GoTo BBBB : End If

        If ComboBox14.SelectedItem = "sun" Then : nWeek = "日曜日" : GoTo BBBB : End If

        If ComboBox14.SelectedItem = "mon" Then : nWeek = "月曜日" : GoTo BBBB : End If

        If ComboBox14.SelectedItem = "tue" Then : nWeek = "火曜日" : GoTo BBBB : End If

        If ComboBox14.SelectedItem = "wed" Then : nWeek = "水曜日" : GoTo BBBB : End If

        If ComboBox14.SelectedItem = "thr" Then : nWeek = "木曜日" : GoTo BBBB : End If

        If ComboBox14.SelectedItem = "fri" Then : nWeek = "金曜日" : GoTo BBBB : End If

        If ComboBox14.SelectedItem = "sat" Then : nWeek = "土曜日" : GoTo BBBB : End If

BBBB:  If ComboBox14.SelectedItem = "***" Then   '指定曜日の歴日計算

             nextDay = myDate3.AddDays(0)

             My.Settings.nDay = nextDay

             My.Settings.weekN = ComboBox14.SelectedItem

        Else

             For NN = 1 To 7

                 wName = WeekdayName(Weekday(myDate.AddDays(NN)))

                If wName = nWeek Then   ' WeekdayName(Weekday(myDate2)) Then

                    nextDay = myDate3.AddDays(NN)

                    My.Settings.nDay = nextDay

                    My.Settings.weekN = ComboBox14.SelectedItem

                End If

             Next

        End If

 

    Dim nD1 As String = Format(CDate(My.Settings.nDay))  ’StartTimeの保存処理

        Dim nD11 As DateTime = DateTime.Parse(nD1)

        My.Settings.nDay1 = Format(nD11, "yyyy/MM/dd")

        Dim wD11 As String = WeekdayName((Weekday(nD11)), True)

        If wD11 = "" Then wD11 = "sun"

        If wD11 = "" Then wD11 = "mon"

        If wD11 = "" Then wD11 = "tue"

        If wD11 = "" Then wD11 = "wed"

        If wD11 = "" Then wD11 = "thr"

        If wD11 = "" Then wD11 = "fri"

        If wD11 = "" Then wD11 = "sat"

        TextBox13.Text = wD11

        My.Settings.wD1 = wD11

        Dim naD1 As String = Format(CDate(My.Settings.nDay), "yyyy:MM:dd")

        Dim sT1 As String

        sT1 = naD1 & " " & H3 & ":" & M4 & ":" & S9

        TextBox11.Text = sT1

        My.Settings.onT = TextBox11.Text

        My.Settings.nH1 = ComboBox5.SelectedItem

        My.Settings.nM1 = ComboBox6.SelectedItem

        My.Settings.nS1 = ComboBox7.SelectedItem

        Dim nDD2 As Date                    'StopTimeの保存処理 

        If H3 > H11 Then    'StopTimeが翌日となる場合の処理

            nDD2 = My.Settings.nDay.AddDays(1)

        Else

            nDD2 = My.Settings.nDay

        End If

        Dim nD2 As String = Format(CDate(nDD2))

        Dim nD22 As DateTime = DateTime.Parse(nD2)

        My.Settings.nDay2 = Format(nD22, "yyyy/MM/dd")

        Dim wD22 As String = WeekdayName((Weekday(nD22)), True)

        If wD22 = "" Then wD22 = "sun"

        If wD22 = "" Then wD22 = "mon"

        If wD22 = "" Then wD22 = "tue"

        If wD22 = "" Then wD22 = "wed"

        If wD22 = "" Then wD22 = "thr"

        If wD22 = "" Then wD22 = "fri"

        If wD22 = "" Then wD22 = "sat"

        TextBox14.Text = wD22

        My.Settings.wD2 = wD22

 

        Dim naD2 As String = Format(CDate(nDD2), "yyyy:MM:dd")

        Dim sT2 As String

        sT2 = naD2 & " " & H11 & ":" & M12 & ":" & S18

        TextBox12.Text = sT2

        My.Settings.offT = TextBox12.Text

        My.Settings.nH2 = ComboBox8.SelectedItem

        My.Settings.nM2 = ComboBox9.SelectedItem

        My.Settings.nS2 = ComboBox10.SelectedItem

    End Sub

   注:上記以外に 選局先や時間の保存のため Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load、 Private Sub Form1_FormClosing(ByVal sender  As Object, ByVal e As _System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing や プロパティの設定  での My.Setting の処理が必要となるが省略しています。

<参考>ショートカット・キーの設定 Code

Private Sub Form1_KeyDown(ByVal sender As Object, ByVale As System.Windows.Forms.KeyEventArgs) Handles MyBase.KeyDown

        If e.Shift And e.KeyCode = Keys.S Then

            Button5.PerformClick()

        End If

        If e.Shift And e.KeyCode = Keys.E Then

            Button6.PerformClick()

        End If

    End Sub

 
WSHについて  PowerShell(PS)の場合
  自動化するには 自作録音ソフト(DO30setup.exe)を開き、SchortCut KeyCode を送らねばならない。 TaskScheduler からは直接送れないので 調べたところ WSHのスクリプトが良いと思い スクリプトを作成、コマンドプロンプト(管理者)(A)から試行錯誤で試したところ 自作録音ソフトの起動に成功した。 PowerShell(PS) にてもトライし、自動化出来たので併記した。
.
WHSスクリプト(DigiOn30W.vbs)  Textを .vbs で保存する。>
  Set objShell = WScript.CreateObject("WScript.Shell")
  Set objExec = objShell.Exec("G:\My Documents2\Visual Studio 2013\Publish2013\    NetRadioPlayerRecorder30DigiOnW\DO30Wsetup.exe")
  WScript.Sleep(6000)
  objShell.SendKeys("+S")
  WScript.Sleep(1000)
  objShell.SendKeys("+E")
.
注:Windows内ソフトは objShell.Run が使用されているようだが、自作ソフトの様な外部
  ソフトでは objShell.Exec でないとソフトが起動できないようだ。
  TaskScheduler から起動させるために 本スクリプトを C:\  にコピーしておく。
.
PSスクリプト(NPRDigiOn30W.ps1)  Textを .ps1 で保存する。>
  add-type -AssemblyName System.Windows.Forms
  C:\NPRdigion\NPRDigiOn30W.exe
  start-sleep -Milliseconds 5000
  [System.Windows.Forms.SendKeys]::SendWait("+S")
  start-sleep -Milliseconds 1000
  [System.Windows.Forms.SendKeys]::SendWait("+E")
 
注:ここでは Publishにできるsetup.exe でなく 動作の早いPrejects・bin・Debug内にあるexeファイル の名称を NPRDigiOn30W.exe として C:\NPRdigion の保存して使用しいる。
 
WSHを起動する TaskScheduler への記述   PowerShell(PS)の場合
  NETで調べたが 正解が得られず 試行錯誤で 簡単な記述で成功した。 TaskScheduler設定画面で作成した DigiOn起動.exml の中身を見ると下記であった。 
.
<参考>DigiOn起動.exml の中身
上部省略
  <Actions Context="Author">
    <Exec>
       <Command>cscript.exe</Command>
       <Arguments>C:\DigiOn30W.vbs</Arguments>
    </Exec>
  </Actions>
下部省略
.
<参考>DigiOn起動.exml の中身
 上部省略    
     <Actions Context="Author">
         <Exec>    
                 <Command>C:\Windows\System32\WindowsPowerShell\v1.0\
                                                                              powershell.exe</Command>

                 <Arguments>-Command "C:\NPR30DigiOnW.ps1"</Arguments>
         </Exec>
     </Actions>
上部省略
 
 
<参考>設定画面  
全般 トリガー
操作 操作 PowerShell(PS)の場合
条件  
PowerShell(PS)の場合

  
操作 以外の 全般・トリガー・条件・
  設定等 はWSHと同様である。
設定
トリガーの編集
クリックして拡大
 
まとめ
  .NET VB-2010を利用して 2012頃寄り始めた VBプログラム、現在 VS-VB2015使用中。 最初に手掛けたのが Windowsの起動停止、次がNetRadioPlayer、Timer関係の習得から それらへのTimerの組込みへ。 NetRadioの録音のためのWaveRecorder&Playerへ発展、自作WaveRecorderでは機能が限定されるので 無料録音ソフト(ApowersoftAudioRecorder、MooO、Audacity、有料で所有DigionSound5E)を使ったNetRadioPlayer&Recorderへと取り組んできた。 成果を現在 Vecotor に公開している。
.
   ・NetRadioFMPlayer             国内FM-270局対応  一発選局
   ・NetRadioPlayerWithTimer         国内FM&ラジオ-302局対応 TimerでOn-Off
   ・NetRadioPlayer              小型タブレットに最適 317局 一発選局
   ・NetRadioPlayer&Recorder         Win10-VoiceRecorder専用 302局
   ・    同上                  無料MooO専用 302局
   ・    同上                  無料Audacity専用 302局
       (上記3Recorderは 日時入力、設定・起動が手入力 Timer録音・自動保存)
   ・WaveRecorder&Player        Waveのみ録音・再生可能
   ・PC-Direct or Timer Close          PC停止4動作を即時またはTimerにて停止  
今後公開予定は 4-A. に報告した
   ・PC-Sleep/Wake & Close            バクが無ければ近日中に公開予定   
   ・NetRadioPlayer&Recorder      WaveRecorder&Player専用 317局
.
  本欄で紹介した DigiOnSound5E を使用した 全自動化ソフトは DigiOn が有料で廃版となっていることから公開は行わず、自分用の録音ソフトとして利用していくつもりです。
  DigiOnSound5E は Win-XP で使い始め、廃版になったが Win10 でも問題なく作動している。 Format-wav、wma、mp3 の録音・編集に非常に使いやすいソフトであり、ハイレゾ録音・再生が騒がれているが NetRadioやYouTube の録音・編集には必要十分であり 当分 DigiOnSound5E を使用していきたい。 後継ソフトとして ハイレゾ対応のDigiOnSoundXE があるが金・暇に余裕ができたら 挑戦してみるつもりです。      
.
  当方はNET上の記述を一番の参考にして、VBソフト作り を楽しんできましたが、その作者には大変感謝いたしています。 それらを基に出来上がった自作ソフトを公表した本記述がまた参考になれば幸いと思っています。                  以上

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

NOW  CONSTRUCTING