プログラマyasuhoの隠れ家

某ソフトウェア企業に勤務するおじさんプログラマyasuhoです

W-ZERO3: 自動でダイヤル・切断するアプリの作り方


Windows Mobileで自動ダイヤルする方法を紹介します。いや、最初全然分からなくて、ネットでいろいろ調べていくうちにようやく分かったのですよ。


以下は自分のメモですが、他の人の参考になれば幸いです。

何のAPIを使うか


接続にはConnection ManagerというAPIセットを使います。


ConnMgrEstablishConnection() --> ネットワークに接続
ConnMgrReleaseConnection() --> ネットワークから接続


IEやActiveSyncでネットワークに接続してないと自動的にダイヤルするのは、これらを使っているようです。

サンプルコードは


Pocket PC 2003 SDKWindows Mobile 5.0 SDK for Pocket PCにはConnection Managerのサンプルコードが入っています。


Pocket PC 2003 SDKなら以下のフォルダ:
C:\Program Files\Windows CE Tools\wce420\POCKET PC 2003\Samples\Mfc\Cmhelper


Windows Mobile 5.0 SDKなら以下のフォルダ:
C:\Program Files\Windows CE Tools\wce500\Windows Mobile 5.0 Pocket PC SDK\Samples\CPP\Mfc\CMHELPER


上記サンプルコードを見れば、自動ダイヤル・切断をすればいいか、大体分かると思います。buildしてW-ZERO3で実行すれば、動きも分かりますしね。

どうやって使うか


以下は簡単な解説です。

ダイヤルアップする


ConnMgrEstablishConnection()を呼ぶとダイヤルアップします。


サンプルを見ると分かるように、接続先はGUIDにする必要があります。GUIDはConnMgrMapURL()を使い、URLからGUIDを得ることができます。URLは適当なインターネットのアドレス(http://www.google.com/など)でいいでしょう。


ConnMgrEstablishConnection()から戻ってきても、まだ接続は完了していません。接続できたかどうかをチェックするには、返却されたhandleでWaitForSingleObject()などを使いイベントを待ち、ConnMgrConnectionStatus()でステータスがCONNMGR_STATUS_CONNECTEDになるまで待つ必要があります。


ConnMgrEstablishConnectionSync()を使うと完了まで待ってくれますが、その間アプリはwindowsメッセージを受け取れないので他の操作ができません。接続処理を別スレッドで行うか、定期的にステータスをチェックする必要があるでしょう。

切断する


ConnMgrReleaseConnection()を呼ぶと切断します。

オンラインかどうかチェックする


ConnMgrEstablishConnection()を使って、現在オンラインかどうかチェックすることができます。


ふつうに呼ぶと接続しに行きますが、CONNMGR_CONNECTIONINFOのbDisabledをTRUEにすると実際の接続はしません。その後ConnMgrConnectionStatus()を呼ぶと現在のステータスが分かります。


プログラムはこれを使ってオフラインなら接続するようにすればよいでしょう。

感想とか


基本的な説明はMSDNにあるのですが、そもそも自動ダイヤルアップ機能がどれに相当するのかよく分かりませんでした。ネットで情報公開していただいた方々に感謝いたします。


さらにMSDNAPIの説明はちょっと情報不足な気がします。たぶんサンプルがないと使い方は分からなかったでしょう。私だけかもしれませんが。^^;


以上Connection Managerの使い方について話してきましたが、まだよく分かってないところもあります。間違いや別の使い方など、教えていただけると嬉しいですね。