先日の記事で悩んでいた、Windowsで指定した時間に特定のプログラムを一時停止したり実行再開する方法を考えました。
...
まず、人力検索はてなに同じ質問「Windows2000,XPでUNIXの SIGSTOP & SIGCONT に相当するものを教えて下さい。」があって、「開発者向けのサイトにサンプルプログラムがあるとの情報を入手。 サイトにはちゃんと実行ファイル (「Download demo project」のリンク) もあるので、これを使うことにします。
このプログラム(pausep.exe)は、プロセスIDだけを指定すると一時停止、/rを付けると実行再開というシンプルなものです。指定した時間に特定のプログラムを停止・再開するためにはこのプログラムの他に、次のような機能が必要になります。
1.はcygwinを使わずともWindowsの標準コマンドtasklistを使って実現できます。tasklistはプロセスID以外の情報も返してくるので、プロセスIDだけを取り出すのにforコマンドを使います(2カラム目にある文字列だけを渡す指定が/f "tokens=2"
)。
for /f "tokens=2" %%i in ('tasklist /nh /fi "imagename eq x264.exe" /fo table'); do c:\bin\pausep %%i
for /f "tokens=2" %%i in ('tasklist /nh /fi "imagename eq x264.exe" /fo table'); do c:\bin\pausep %%i /r
2.はWindowsのschtasksを使います。例えば、その日の夕方4時からの番組を録画する間、一時停止したい場合は、
schtasks /create /tn (このタイマーに付けたい名前) /tr c:\bin\pause_x264.bat /sc once /st 15:58:00
のように入力すると、ログオンパスワードを尋ねられます。パスワードを入力して、登録されたとメッセージが表示されれば準備完了です。 2分前を指定したのは、キャプチャソフト(Feather)が1分前に起動するのでそれより余裕を持たせたものです。
これだけでは再開しないので、再開もタイマー登録しておきます。4時55分に録画完了するなら、
schtasks /create /tn (このタイマーに付けたい名前) /tr c:\bin\resume_x264.bat /sc once /st 16:56:00
といった感じです。
当日ではなく、例えば翌日の午前5時を指定するときは、/sd 2007/01/01
のように日付も書く必要があります。
後は注意点を幾つか。
これで心置きなく、キャプチャ予約しながら長時間エンコできるようになりました!
Trackback URL (right click and copy shortcut/link location)