W-ZERO3: 自動でダイヤル・切断するアプリの作り方
Windows Mobileで自動ダイヤルする方法を紹介します。いや、最初全然分からなくて、ネットでいろいろ調べていくうちにようやく分かったのですよ。
以下は自分のメモですが、他の人の参考になれば幸いです。
何のAPIを使うか
接続にはConnection ManagerというAPIセットを使います。
ConnMgrEstablishConnection() --> ネットワークに接続
ConnMgrReleaseConnection() --> ネットワークから接続
IEやActiveSyncでネットワークに接続してないと自動的にダイヤルするのは、これらを使っているようです。
サンプルコードは
Pocket PC 2003 SDKやWindows 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()を呼ぶと現在のステータスが分かります。
プログラムはこれを使ってオフラインなら接続するようにすればよいでしょう。