« [Zaurus] SKK用辞書サーバskkserv2 20051107パッケージ | Main | [Zaurus] Linux Zaurus向けPerl5.8.7パッケージ(幾霜版) »

2007.03.14

[Windows XP] Windows XPでもサスペンド/ハイバネーションから定期的にレジュームして(起きて)QMAIL3で自動メール送受信

Windows XP搭載のノートパソコンでも、サスペンドやハイバネーションから定期的にレジュームして、メールチェックなどしてくれたらとてもいいだろうな、ということでチャレンジしてみました。

結果、実現できたのでレポートしておきます。

僕のブログの中では、このエントリは大きな流れの中の一つになっています。関係するエントリは以下の通りです。

ZaurusでCronInetとMewによるメールの定期巡回
Windows Mobile QMAIL3でサスペンドから起きて自動定期巡回(メール送受信)
[Windows Mobile] Sigmarion III / jornada720でMortScriptを動かす

カバンの中のサスペンド(ハイバネーション)させたノートパソコンが、定期的に動き出して最新のメールを自動的に受け取ってくれるのです。ノートパソコンを開くと、移動中に受信したメールが出迎えてくれます。素晴らしきモバイル体験。

Windows XPでもsnak氏の超高性能男前メールソフト、QMAIL3を使った解説をしたいと思います。長い年月を経過してなお止まぬ氏の情熱には感服します。

もちろん、QMAIL3に限らず何でも可能でしょう。Meadow上のMewだってgnuclientを使えばいけると思います。

ただ、起動中でもコマンドラインオプションから送受信開始させることができ、ダイヤルアップ、切断を勝手にやってくれるQMAIL3は、このテーマにうってつけなのです。

ハイバネーション(休止状態)の抑制

僕のVAIO U3は、ハイバネーションからでもゾンビのように起き上がってタスクの実行が可能です。すべての機種がそうなら幸せなことですが、僕が知るノートパソコンには限りがあります。

ハイバネーションからのレジュームができない機種では、ハイバネーション移行の抑制をしないといけないかもしれません。

時間経過等でハイバネーションに移行しないよう、電源管理ユーティリティで設定します。
僕はPC/AT互換機はVAIOのノートしか持っていないので、専用ユーティリティ「Power Panel」の説明になりますが、以下のような設定になります。

Winxpqmail30008

アイドル状態で放置されても、ハイバネーション(休止状態)への移行はせず、サスペンドへの移行だけするようにします。

このユーティリティには、バッテリ残量がヤバいときだけハイバネーションへの移行をするという、誠に都合のいい設定項目があります。それだけは設定しておきました。

各社それぞれに独自のユーティリティが添付されているはずなので、それぞれのツールの作りに解釈してください。

もちろん、ハイバネーションへの移行をやめるということは、バッテリの消費が多くなる、ということを意味します。

「タスク」を使う

Windows XPではこのようなことを実現する場合、「スタートメニュー→すべてのプログラム→アクセサリ→システム ツール」とたどって出てくる「タスク」を使います。

Winxpqmail30007

タスクは定形処理を一定時間間隔を置いて繰り返させるのに使う一種のランチャです。タイマー付ランチャ。
UNIX環境には似たような働きをするcron(at?)というdaemonがありますね。

タスクを使いさえすればサスペンド/ハイバネーションからレジュームして(起きて)何かする、ということはできてしまいます。従って、そのことを指摘しつつ説明を終ってもいいのですが、タスクは細かい設定ができていい半面、高機能ゆえにちょっと分かりにくいかもしれません。
また、いくつか引っかかるポイントがあります。そこをかいくぐる説明をします。

QMAIL3でサスペンドから起きて自動巡回する設定例

「QMAIL3で30分に1回サスペンドからレジュームして(起きて)巡回し、巡回が終わったら再度サスペンドする」という内容の設定を例示してみます。

QMAIL3の設定

巡回名は、最初は英字のみのものを付けてください。

設定の要諦は、「巡回」を作ること。「アカウント」の「ダイヤルアップ」タブの「ネットワークに接続していないときにダイヤルアップ接続する」のラジオボタンを選択して、有効なダイヤルアップのエントリ名を選んでおくことです。

Winxpqmail30006

実行用VBScriptの用意

QMAIL3は、コマンドライン引数「-g "巡回名"」で巡回開始が可能です。
また、最新のNightly Buildでは、「-g」のみを引数として付けることで、すべてのアカウントの送受信をすることができるようになっています。
詳しくはQMAIL3の「コマンドライン」を参照してください。

QMAIL3が起動していない場合は、起動しつつ巡回を開始します。
既にQMAIL3が起動していた場合は、起動中のQMAIL3が巡回を開始します。

しかし、タスクに実行させるのは、QMAIL3そのものではまずいのです。
なぜなら、タスクは、実行したアプリケーションが終了するのを待ち続けるからです。
タスクに直接QMAIL3を実行させると、毎度QMAIL3を終了させなくてはならないことになってしまいます。

アプリケーションの終了を待たず、自身はすぐ終了する実行手段を探す必要があります。

一番身近なのは、cmd.exeの内部コマンドであるstartです。
startはShellに実行を委任した後、コマンド/アプリケーションの終了を待たずに自身は終了します。
startを使う場合、タスクへの登録は以下のようになります。

cmd.exe /c start c:\bin\q3u\q3u.exe "-g 'COURSE_NAME'"

これで基本的に問題無いのですが、cmd.exeの黒いウインドウがチラっと表示されるので格好悪い。

オンラインソフトを探せば同じ働きをするコマンドを見つけることができますが、ここはWSHのRun()を使うことにします。
Runは第3引数にfalseを指定すると、実行したアプリケーションの終了を待たなくなります。

実行時にPHSカードが差さっていなかったり、ネットワークに接続されていなかった場合に実行を抑制した方がきれいなので、処理を加えたVBScriptを用意しました。それが以下です。

「qmail3.vbs」をダウンロード

あちこちからもらってきたスクリプトのハリボテです。WMIとか言われてもよく分かりません。
QMAIL3のパスや巡回名は仮のものですので、自分の環境に合わせてテキストエディタで書き換えてください。

これをタスクに登録して、定期的に実行することになります。

スクリプトのタスクへの登録

タスクを起動し、タスクを新規登録します。僕はウィザードがうざいので「ファイル→新規→タスク」から作りました。

Winxpqmail30001

「QMAIL3」などの名前に変えて、プロパティを開きます。

Winxpqmail30002

タスクの新規登録ダイアログには、「タスク」、「スケジュール」、「設定」の三つのタブがあります。

まずは「タスク」から片付けます。

「実行するファイル名」には、前出のVBScriptを指定します。
「ログオンしている場合のみ実行する」、「実行する」のチェックボックスをONにします。

Winxpqmail30003

続いて「スケジュール」のタブ。
「タスクのスケジュール」は「日単位」、「開始時刻」は「9:00」、「タスクのスケジュール(日単位)」の「間隔」は「1」にします。
これで、毎日1日1回9:00からタスクが開始されます。
もちろん、これだけでは1日1回9時から実行されるだけなので不十分です。

Winxpqmail30004

「詳細設定」ボタンを押します。
「開始日」は過去の日付を。「終了日」のチェックボックスはOFFに。
「タスクを繰り返し実行」のチェックボックスをONに。
「間隔」は「30分」にします。
「継続時間」のラジオボタンをONにし、「24」時間を指定します。

Winxpqmail30009

最後に「設定」のタブ。
「タスクの継続時間を指定する」のチェックボックスをONにし、「1分」を指定します。
「アイドル時」のグループ内は全部OFFにします。

「電源の管理」グループ内では、「タスクの実行時にスリープを解除する」のチェックボックスのみONにします。

Winxpqmail30005

OKボタンを押して、登録を完了します。
登録したタスクを右クリックして、「タスクの実行」を選択すると、登録したタスクのテストができます。

これでタスクが正常に動作するか確認してください。

一時的に「間隔」を5分程度の短いものにして、テストのためにサスペンドし、実際にサスペンドから起き出して動作するか確認してみてください。

ハイバネーションからも起き出してタスクの実行ができたらもうけものです。

プラスアルファの情報

ダイヤルアップ、ダイヤルアップの切断機能を持たないアプリケーションの定期巡回を仕込む際、特に恣意的にダイヤルアップを切断する方法を探すことになるかもしれません。

Windows XPではコマンドラインからダイヤルアップのコントロールができるようになっていますので紹介します。

■ダイヤルアップの状況表示

rasdial

■ダイヤルアップ

rasdial DIAL_UP_NAME USER_NAME PASSWORD

■切断

rasdial DIAL_UP_NAME /D

DIAL_UP_NAMEは、実際には設定済みのエントリ名です。
USER_NAMEは、実際にはそのエントリに登録しているユーザ名です。改めて指定する必要があります。
PASSWORDは、実際にはそのユーザに呼応するパスワードです。平文で、改めて書く必要があります。

サスペンド、ハイバネーションへの移行を急ぎたい場合は、MSのsuspend.exeを使います。いまどきはACPIでしょうから、suspend -s 3(サスペンド)、suspend -s 4(ハイバネーション)といった感じで使うことになります。

あとがき

タスクでこんなことができることをもっと早く知っていれば、モバイルライフが充実したものになっていたでしょう。
みなさんも、QMAIL3にとどまらず、いろんなアプリケーション、スクリプトのサスペンド/ハイバネーションから起きての定期実行を試してみてください。

|

« [Zaurus] SKK用辞書サーバskkserv2 20051107パッケージ | Main | [Zaurus] Linux Zaurus向けPerl5.8.7パッケージ(幾霜版) »