(1)はじめに
ある特定の場所で大勢の人に何かを広報したい場合、ポスターを貼るという選択肢もあるが、余ったPCとモニターを使用して、何かインフォメーションができないか思い、考えてみた。
(2)仕様
公開場所
屋内の待合所
ハードウエア
22インチのモニターを置き、PCでパワーポイントのスライドを連続で流してゆく。実際はデスクトップタイプのパソコン(モニター一体型)を使用。OSは、Windows7。
動作概要・必要な機能・仕様等
1.朝パソコンのスイッチを入れると起動終了後、自動的にスライドの上映が始まる
2.スライドは、パワーポイントにて上映
3.複数のパワーポイントのファイルを連続して再生
4.それを、指定時間内繰り返す
5.指定時刻(業務終了時刻)ころ、再生を中止する
6.指定時間に、パソコンをシャットダウンする
7.曜日ごとに動作時間を変える(具体的には、土曜日は半ドンなので11:30頃終わりにする)
8.各種設定変更が簡単にできる
9.パワーポイントだけでなく、ビデオもコンテンツのひとつとして、スライドの合い間に混ぜて再生する。
動作概要・必要な機能等の補足
1に関して
スタートアップにファイル登録しておけば、とりあえずOKかな?
2に関して
複数の話題を一つのパワーポイントにしておけば、いろいろ使い勝手はいいが、メインテナンスが面倒になる。つまり一々ファイル全体の書き換えをしなくてはならないからだ。しかし、話題ごとに別ファイルにして、連続再生とすれば、別のファイルを差し替えたり、付け加えるという事で管理が楽になる。いっそのことファイル群全体をフォルダーごと入れ替えてしまえば、操作が分からない人でも簡単に取り扱えるのではないかと思う。PCの性能や個別に作ったファイルを持ち寄って再生することを考えれば、office97-2003バージョン(拡張子.ppt)で統一して作るのがいいのでは。また、よく考えたら、パワーポイントにこだわらなくても、再生するPCにアプリがインストールされていれば、Openofficeのファイルでもいいような気がする。
3・4・5について
無料で簡単にできる手段といったら、バッチファイル ※1 であろう。昔からあるし、ノウハウもいろいろと蓄積されているので、情報が簡単に入手でき、組み上げるのも楽だ。それにwindowsにタダでついてくるので、うってつけだろう。フリーソフトを使う手もあるが、ここは無難に手堅くバッチファイルで、と思っていた時期もありました。(結構難しい)
6・7について
ネットでいろいろ調べた結果、windowsに付属の、タスクスケジューラーを使用すればいいことがわかった。曜日ごとに動作時間が変えられるのも便利だ。と思っていたが、なぜか作動しなかった。したがって、今回はバッチファイルの記述からshutdown.exeを起動する事で解決した。
8について
バッチファイルなら、メモ帳で簡単に変更可能だ。具体的には、ファイルを右クリックして、「編集」を選べばよい。
9について
意外と難しい。再生に使用するソフトウェアの仕様により、思ったような動作結果が得られない。
(3)パワーポイントでスライドを作る時の留意点
1.画面のサイズ
ファイル→ページ設定で、スライドのサイズ指定を「画面のサイズにあわせる」とし、その下の欄の幅と高さに、上映に使用するPCの画面の大きさをセンチメートルで入力しておく。後から変えると、貼り付けた画像とか、文字の位置などが変化し修正に手間取る。PCの画面の大きさがわからなければ、試行錯誤でいろいろ大きさを変えて実際のサイズを割り出しておく。今回のモニターは36cm×21cmのサイズである。
2.スライドの画面切り替えの設定
画面の切り替えのタイミングの二つともチェックを入れ、切り替え時間は表示時間として入力する。入力を終えたら、全てに適用をクリックしておく。
3.スライドショーの設定
図のように設定しておく。特に「Escキー・・・・」のとろこにチェックを入れると、同じスライドをリピートすることになってしまう。また、「ツール」→「オプション」→「表示」の「最後に黒いスライドを表示する」のチェックをはずしておく。
4.完成
完成したパワーポイントのファイルを上映するPCにコピーしておく。
(4)バッチファイルの作成
1.基本になる部分
今回の肝となる部分。まずは、単純に連続再生させるだけを考える。
バッチファイルは、パワーポイントファイルと同じフォルダーに置く。
サブフォルダーにデーターが入っている場合は、A.pptのところに「サブフォルダ名\」を入れておく。
データーの数に合わせて、起動するファイルの記述を、バッチファイルの:loopとgoto :loopの間に付け加えておく。(下の例では3個)
REM ファイルのオフセットをバッチファイルの置いてある位置に移動(定番)※1
cd /d %~dp0
REM 本体
:loop
"C:\Program Files\Microsoft Office\OFFICE11\POWERPNT.exe"/s A.ppt
"C:\Program Files\Microsoft Office\OFFICE11\POWERPNT.exe"/s B.ppt
"C:\Program Files\Microsoft Office\OFFICE11\POWERPNT.exe"/s C.ppt
goto :loop
ここでトラブル発生。何と、パワーポイントが起動しない。原因は、POWERPNT.exeのファイルパスが、officeのバージョンにより違うことだった。上映するPCに合わせて"
C:\Program Files\Microsoft Office\OFFICE11\"の部分を書き換えると無事動いている。停止は、Ctrl+Alt+Delでタスクマネージャーを起動し、バッチファイルのタスクを中止する事で行う。
2.開始時刻と終了時刻の設定
さて、これだけでは、面白くないので、終了時間を設定し、その時間になったらスライドを中止するようバッチファイルを書き換えることにした。Ctrl+Alt+Delでいちいち停止するのは、初心者には操作が難しくなるのでなるべく避けるためだ。
と言う訳で、そのルーチンを付け加えた。※2
REM ファイルのオフセットをバッチファイルの置いてある位置に移動(定番)
cd /d %~dp0
REM 処理可能開始時間の定義(とりあえず9:00に設定)
SET START=0900
REM 処理可能終了時間の定義(とりあえず18:00に設定)
SET END=1800
REM 本体
:loop
REM 現在の時間を取得(数字が1桁の場合は'0'埋め)
SET NOW=%TIME: =0%
SET NOWSTR=%NOW:~0,2%%NOW:~3,2%
SET CONSOLE_NOWSTR=%NOW:~0,2%時%NOW:~3,2%分
REM (現時間 < 処理可能開始時間)ならエラー
IF 1%NOWSTR% LSS 1%START% (GOTO ERR)
REM (処理可能終了時間 < 現時間)ならエラー
IF 1%END% LSS 1%NOWSTR% (GOTO ERR)
"C:\Program Files\Microsoft Office\OFFICE11\POWERPNT.exe"/s A.ppt
"C:\Program Files\Microsoft Office\OFFICE11\POWERPNT.exe"/s B.ppt
"C:\Program Files\Microsoft Office\OFFICE11\POWERPNT.exe"/s C.ppt
goto :loop
REM 終了
:err
exit
今回は、開始時間の検証については特に必要ないが、一応残しておいた。
3.曜日により、終了時刻を変更する
さて、曜日により終了時間を変えると言う問題だが、まず当日が何曜日か決定しなければいけない。方法は、VBSを使用する方法と計算による方法の二つがある。
◎vbsを使用する場合※3-1,3-2
いずれも、曜日とエラー値(=1)を区別するため、曜日は2~始まっている。
新しいファイルを1つ作り、そこから値を得るため、余分な操作が必要。
パターン-1
①メモ帳などのエディッタにてwday.vbsの名前で、以下ような内容のファイルを作成する。
REM errorlevelの値が予想外のエラー時は1、曜日の場合は2(日曜日)~8となる
WScript.Quit(weekday(date)+1)
②バッチファイルの中に以下を記述するとyoubiに値が入る
cscript /b wday.vbs
SET youbi=%errorlevel%
パターン-2
バッチファイル中に、以下の制御文を記述することで、youbiに曜日の値が入る。予想外のエラー時は1、曜日の場合は2(日曜日)~8となる。(※3-3) これを実行すると、同じフォルダーに"tmp.vbs"が生成される。
echo WScript.echo (weekday(date)+1) > tmp.vbs
for /f %%X in ('cscript //nologo tmp.vbs') do SET youbi=%%X
◎バッチファイルの中で計算により日付から曜日を割り出す場合 ※4-1,※4-2
計算により曜日を曜日により終了時間を変更する。その計算方法については、ツェラーの公式を使用する。vbsのものと違い、余分なファイルを作らない。今回は※4-2のリスト(普通に変数を定義)を使用する。
これを使用したのが、以下のリストとなる。
IF文の記述に関しては、こちらを参考にした。※5-1 ※5-2
今回の設定は、「もし、当日が土曜日なら11:30に終了する」を実現する。
REM バッチファイルの置いてある位置に移動(定番)
cd /d %~dp0
REM 処理可能開始時間 9:00
SET START=0900
REM 処理可能終了時間 18:00
SET END=1800
REM 当日の曜日計算
REM 本日の日付 TODAYに入る
set TODAY=%date%
REM 日付の分解 h y m1 m2 d
set /a h=%TODAY:~0,2%
set /a y=%TODAY:~2,2%
set m1=%TODAY:~5,1%
set m2=%TODAY:~6,1%
if "%m2%" equ "/" (
set /a m=m1
set /a d=%TODAY:~7,2%
) else (
set /a m=m1*10+m2
set /a d=%TODAY:~8,2%
)
if %m%==1 ( set /a y-=1&set /a m+=12 )
if %m%==2 ( set /a y-=1&set /a m+=12 )
REM ツェラーの公式 youbiに曜日が入る youbi--->0=sat 1=sun 2=mon 3=tue 4=wed 5=thu 6=fri
set /a youbi=( y + (y/4) + (h/4) - 2*h + (13*(m+1)/5) + d ) %% 7
REM 曜日による時間変更
REM 土曜日(=0)なら11:30に終了するのでENDの定義しなおし
if %youbi%==0 (SET END=1130)
REM 本体
:loop
REM 現在の時間を取得(数字が1桁の場合は'0'埋め)
SET NOW=%TIME: =0%
SET NOWSTR=%NOW:~0,2%%NOW:~3,2%
REM SET CONSOLE_NOWSTR=%NOW:~0,2%時%NOW:~3,2%分
REM (現時間 < 処理可能開始時間)ならエラー
IF 1%NOWSTR% LSS 1%START% (GOTO ERR)
REM (処理可能終了時間 < 現時間)ならエラー
IF 1%END% LSS 1%NOWSTR% (GOTO ERR)
"C:\Program Files\Microsoft Office\OFFICE11\POWERPNT.exe"/s A.ppt
"C:\Program Files\Microsoft Office\OFFICE11\POWERPNT.exe"/s B.ppt
"C:\Program Files\Microsoft Office\OFFICE11\POWERPNT.exe"/s C.ppt
goto :loop
:ERR
exit
4.シャットダウンについて ※6-1 ※6-2
1.タスクスケジューラーを使用した場合
(たぶん)正しく設定したにもかかわらず、動作しなかった。原因は不明。
2.shutdown.exeをコマンドラインから使用する場合
"C:\windows\system32\shutdown.exe"を:ERRとexitの間に入れる。
オプションには、-r -t 60 -fまたは/r /t 60 /fを・・・・shutdown.exe"の後ろに付ける。
タスクスケジューラーでは、何としてもシャットダウンできなかったが、コマンドラインからは簡単にできた。したがって、今回は、コマンドラインからの指定でゆくこととした。
shutdownコマンドのオプション
コマンド
|
解説
|
-i
/i |
GUIインターフェースを表示する。GUIインターフェースでのデフォルト・タイムアウトは30秒 |
-l
/l |
ログオフする |
-s
/s |
シャットダウンする。 |
-a
/a |
シャットダウン実行の中止(Abort) |
-m \\コンピューター名 |
リモートコンピューターにログオフ/電源オフ/再起動を指示する。-l,/lとは併用できない。 |
-t xx
/t xx |
処理開始までのタイムアウトをxx秒で指定する。デフォルトは30秒 |
-c "コメント"
/c "コメント" |
イベントログに書き込まれるコメントを記入する |
-f
/f |
実行中のプロセスを警告なしで閉じる |
-d u
/d u
p:xx:yy |
イベントログに書き込む電源オフ/再起動の理由コードを表示する。ユーザー・コードなら「u」、計画されたコードなら「p」をサブオプションに指示し、重大な理由コードをxxに、重大でない理由コードをyyに記入する。 |
変更したソースリストは、以下の通り。
REM バッチファイルの置いてある位置(フォルダー)に移動(定番)
cd /d %~dp0
REM 処理可能開始時間 9:00
SET START=0900
REM 処理可能終了時間 18:00
SET END=1800
REM 当日の曜日計算
REM 本日の日付 TODAYに入る
set TODAY=%date%
REM 日付の分解 h y m1 m2 d
set /a h=%TODAY:~0,2%
set /a y=%TODAY:~2,2%
set m1=%TODAY:~5,1%
set m2=%TODAY:~6,1%
if "%m2%" equ "/" (
set /a m=m1
set /a d=%TODAY:~7,2%
) else (
set /a m=m1*10+m2
set /a d=%TODAY:~8,2%
)
if %m%==1 ( set /a y-=1&set /a m+=12 )
if %m%==2 ( set /a y-=1&set /a m+=12 )
REM ツェラーの公式 youbiに曜日が入る youbi--->0=sat 1=sun 2=mon 3=tue 4=wed 5=thu 6=fri
set /a youbi=( y + (y/4) + (h/4) - 2*h + (13*(m+1)/5) + d ) %% 7
REM 曜日による時間変更
REM 土曜日(=0)なら11:30に終了するのでENDの定義しなおし
if %youbi%==0 (SET END=1130)
REM 本体
:loop
REM 現在の時間を取得(数字が1桁の場合は'0'埋め)
SET NOW=%TIME: =0%
SET NOWSTR=%NOW:~0,2%%NOW:~3,2%
REM SET CONSOLE_NOWSTR=%NOW:~0,2%時%NOW:~3,2%分
REM (現時間 < 処理可能開始時間)ならエラー
IF 1%NOWSTR% LSS 1%START% (GOTO ERR)
REM (処理可能終了時間 < 現時間)ならエラー
IF 1%END% LSS 1%NOWSTR% (GOTO ERR)
"C:\Program Files\Microsoft Office\OFFICE11\POWERPNT.exe"/s A.ppt
"C:\Program Files\Microsoft Office\OFFICE11\POWERPNT.exe"/s B.ppt
"C:\Program Files\Microsoft Office\OFFICE11\POWERPNT.exe"/s C.ppt
goto :loop
:ERR
"C:\windows\system32\shutdown.exe"/s /t 120 /f
exit
5.このバッチファイルの弱点
1.時間ぴったりには終了できない
このバッチファイルは、一通り上映が終わったところで、終了時刻と終了設定時刻とを参照比較するので、上映するパワーポイントのファイル数がとんでもなく多いと、時間通りに終了することができない。
代案としては、スライド表示の手前で、callコマンドで、サブルーチン化した時刻判定の部分をその都度呼び出し、時刻を確認して時間内ならreturn(exit /b)、そうでないならGOTO :ERRで終了とするのはどうだろうか。というわけで、ソースリストを書きなおしてみた。※13
REM バッチファイルの置いてある位置(フォルダー)に移動(定番)
cd /d %~dp0
REM 処理可能開始時間 9:00
SET START=0900
REM 処理可能終了時間 18:00
SET END=1800
REM
REM 本日の日付 TODAYに入る
set TODAY=%date%
REM 日付の分解 h y m1 m2 d
set /a h=%TODAY:~0,2%
set /a y=%TODAY:~2,2%
set m1=%TODAY:~5,1%
set m2=%TODAY:~6,1%
if "%m2%" equ "/" (
set /a m=m1
set /a d=%TODAY:~7,2%
) else (
set /a m=m1*10+m2
set /a d=%TODAY:~8,2%
)
if %m%==1 ( set /a y-=1&set /a m+=12 )
if %m%==2 ( set /a y-=1&set /a m+=12 )
REM ツェラーの公式 youbiに曜日が入る youbi--->0=sat 1=sun 2=mon 3=tue 4=wed 5=thu 6=fri
set /a youbi=( y + (y/4) + (h/4) - 2*h + (13*(m+1)/5) + d ) %% 7
REM 曜日による時間変更
REM 土曜日(=0)なら11:30に終了するのでENDの定義しなおし
if %youbi%==0 (SET END=1130)
REM 本体
:loop
call :tout
"C:\Program Files\Microsoft Office\OFFICE11\POWERPNT.exe"/s A.ppt
call :tout
"C:\Program Files\Microsoft Office\OFFICE11\POWERPNT.exe"/s B.ppt
call :tout
"C:\Program Files\Microsoft Office\OFFICE11\POWERPNT.exe"/s C.ppt
goto :loop
REM -----------開始/終了時刻判定ルーチン-------
:tout
REM 現在の時間を取得(数字が1桁の場合は'0'埋め)
SET NOW=%TIME: =0%
SET NOWSTR=%NOW:~0,2%%NOW:~3,2%
REM SET CONSOLE_NOWSTR=%NOW:~0,2%時%NOW:~3,2%分
REM (現時間 < 開始時間)ならエラー
IF 1%NOWSTR% LSS 1%START% (GOTO ERR)
REM (終了時間 < 現時間)ならエラー
IF 1%END% LSS 1%NOWSTR% (GOTO ERR)
exit /b
REM ----------バッチファイル終了/電源断--------
:ERR
REM pause
"C:\windows\system32\shutdown.exe"/s /t 120 /f
exit
2.時間外では、ソースリストの修正が困難。
ソースリストの修正が残っている場合は、最後のshutdown.exeの前に、PAUSEを挿入しておく。(リストすぐ上の、赤字の部分 "REM pause"の"REM"をはずしておく。)
"REM"がない場合、終了まで1分あるので、その間にソースリストの最後の「REM PAUSE」のREMをはずし、いったん保存。
シャットダウン後、再び電源を入れると、バッチファイルが一時停止するので、バッチファイルを強制終了し、ソースリストを修正する。少し面倒だが、これでよいと思う。
6.バッチファイル中でビデオ再生をする件(未完成)
バッチファイルの中に、ビデオ再生のコマンドを混ぜておき、パワーポイントのスライドやビデオを次々再生していく。ここでは、A.mp4という動画ファイルを再生するものとする。
1.ウインドウズメディアプレイヤーでビデオを再生する。
メディアプレーヤーのオプションスイッチ
/play | 起動後直ちにファイル再生 | |
/close | 再生終了後メディアプレイヤーを閉じる | WMP10では、サポートされていない |
/fullscreen | フルスクリーンで再生する | |
その1
以下の様なリストとする。※7
"C:\Program Files\Windows Media Player\wmplayer.exe" /play /close /fullscreen "C:\Users\kk\Desktop\A.mp4"
◎wmplayer.exeを起動するコマンドラインを書く。wmplayer.exeはパソコンによっては位置が違うので必ず確認しておく。
◎再生するA.mp4は、絶対パスで指定する。バッチファイルで指定したパスが適用されないためだ。
しかし、ひとつ問題がある。それは、/closeスイッチが無効になっていることだ。つまり、再生が終わるとそのまま、待機状態になっているため、バッチファイルはそこでストップしている。
これに関しては、諸兄方がいろいろご苦労されているが、解決には至っていないようだ。※8・※12
その2
startを使用する。
start "" "C:\Program Files\Windows Media Player\wmplayer.exe" /play /close "C:\Users\kk\Desktop\A.mp4"
timeout 1200
◎再生開始後、すぐにバッチファイルに制御が移るので、timeoutコマンドで一定時間後、次の処理(スライド表示)に移るようする。(timeoutの時間はビデオの長さ=秒)※14
◎wmpをフルスクリーンで実行すると、パワーポイントのスライドが表示できない。
◎startコマンド直後に "" をはさんでおく。※10
2.他のメディアプレーヤーを使用する
KMplayer ※15 をデフォルトのプレーヤーとし、インストールしておく。その上で、以下のようなリストを記述する。※8
start "" "c:・・・・・\A.mpg"
timeout 1200
taskkill /f /im/ kmplayer.exe
◎KMplayerをデフォルトのプレーヤーとしておく
◎timeoutの時間は、ビデオの再生時間(秒)にする
◎taskkillを実行すると、プレーヤーのウインドウが閉じられる
今回は、KMplayerを使用する事にした。リストは以下のようになる。
REM ---------------フォルダー移動--------------
REM バッチファイルの置いてある位置(フォルダー)までパスを移動(定番)
cd /d %~dp0
REM ------------開始・終了時刻設定-----------
REM 処理可能開始時間を9:00に設定
SET START=0900
REM 処理可能終了時間を18:00に設定
SET END=1800
REM ---------------当日の曜日計算--------------
REM 本日の日付 TODAYに入る
set TODAY=%date%
REM 日付の分解 h y m1 m2 d
set /a h=%TODAY:~0,2%
set /a y=%TODAY:~2,2%
set m1=%TODAY:~5,1%
set m2=%TODAY:~6,1%
if "%m2%" equ "/" (
set /a m=m1
set /a d=%TODAY:~7,2%
) else (
set /a m=m1*10+m2
set /a d=%TODAY:~8,2%
)
if %m%==1 ( set /a y-=1&set /a m+=12 )
if %m%==2 ( set /a y-=1&set /a m+=12 )
REM ツェラーの公式 youbiに曜日が入る youbi--->0=sat 1=sun 2=mon 3=tue 4=wed 5=thu 6=fri
set /a youbi=( y + (y/4) + (h/4) - 2*h + (13*(m+1)/5) + d ) %% 7
REM ------------曜日による時間変更-----------
REM 土曜日(=0)なら11:30に終了させるので変数ENDの定義しなおし
if %youbi%==0 (SET END=1130)
REM -----------------本体--------------------
REM callとファイルの起動は一組として記述していく/ビデオはtimeoutの値設定する/上映順に記述
:loop
call :tout
start "" "C:\Users\・・・・・\A.mp3"
timeout 100
taskkill /f /im/ KMplayer.exe
call :tout
"C:\Program Files\Microsoft Office\OFFICE11\POWERPNT.exe"/s A.ppt
call :tout
"C:\Program Files\Microsoft Office\OFFICE11\POWERPNT.exe"/s B.ppt
call :tout
"C:\Program Files\Microsoft Office\OFFICE11\POWERPNT.exe"/s C.ppt
goto :loop
REM -----------開始/終了時刻判定ルーチン-------
:tout
REM 現在の時間を取得(数字が1桁の場合は'0'埋め)
SET NOW=%TIME: =0%
SET NOWSTR=%NOW:~0,2%%NOW:~3,2%
REM SET CONSOLE_NOWSTR=%NOW:~0,2%時%NOW:~3,2%分
REM (現時間 < 開始時間)ならエラー
IF 1%NOWSTR% LSS 1%START% (GOTO ERR)
REM (終了時間 < 現時間)ならエラー
IF 1%END% LSS 1%NOWSTR% (GOTO ERR)
exit /b
REM ----------バッチファイル終了/電源断--------
:ERR
REM pause
"C:\windows\system32\shutdown.exe"/s /t 120 /f
exit
(5)参考にしたサイト