2008-11-06

BluetoothでActiveSync

以前 設定で試行錯誤しましたが、今回はコードの話。
Bluetooth経由でActiveSyncを開始するツールを作りたくて少し調べていました。
 
Windows Mobile 5以降であれば ActiveSyncStart()を使うと簡単に同期を開始する事ができるようです。
引数も何もなしで呼び出すだけで同期が開始されます。とても楽ですね。
 
でも、Bluetoothで接続して同期する方法がどうしてもわかりませんでした。
 
いろいろ検索しているうちに Windows Mobile Teamのブログのコメント欄を見つけました。
 
Windows Mobile Team Blog Start & Stop ActiveSync
Monday, November 28, 2005 6:14 PM by Alex Kac
Why won't this let us choose Sync over BT?
Monday, November 28, 2005 8:22 PM by windowsmobile
Excellent question :) I'll log that as a suggestion.
 
-Robert
 
「Bluetooth経由のSyncは選べないんですか?」という質問に「いい質問ですね。提案として覚えておきます」と回答していました。
つまり方法は無いという事でしょうか?
 
標準のActiveSyncに「Bluetoothから接続」というメニューがあるからには何らかの方法でできるはずなのですが、思ったよりも手間がかかりそうですね。
 

12 件のコメント:

CDS さんのコメント...

参考までに、tmytさんの所ではBTAutoSync( http://d.hatena.ne.jp/tmyt/searchdiary?word=%2a%5bBTAutoSync%5d )とかこんなの( http://d.hatena.ne.jp/tmyt/20080828#1219949084 )とかが公開されてたりはしてます
# 私はBT使えないので試したことはないのですが...

kazuaki さんのコメント...

CDSさん おはようございます。
情報ありがとうございます。

こんな便利なものがあったのですね。
これを呼び出すだけですべて解決...というか、BTAutoSyncがあればすべて解決な気がしてきました(笑

でも、間違いなく方法はあるという事ですね。ゆっくりと調べてみます。

tmyt さんのコメント...

kazuakiさん こんにちわ
なんだかなんだかcdsさんに紹介されてたので補足しとくと
BluetoothのAPIで母艦が周囲に存在するかを調べ、
存在するときはActiveSyncのウィンドウを探してきてBluetoothから接続のメニューIDを送りつけてるだけなんです。
でもってBluetoothから接続のメニューはシェル拡張と同じ方法で実装されているので右ソフトキーメニューを一度以上表示しないといけないので右ソフトキーを無理やり押したりしてかなり力技です。

SharedSourceのコードを読んだところBluetoothから接続などのコマンドでは母艦に対しての接続を開始するところまでが拡張用DLLの役目でその後確立されたコネクションを使用してActiveSyncが接続処理を行っているみたいです。

kazuaki さんのコメント...

tmytさん こんばんは。
アドバイスありがとうございます。

> BluetoothのAPIで母艦が周囲に存在するかを調べ
なるほど、これは重要ですね。
危なく無条件にActiveSyncを呼び出すようなものを作るところでした(笑

SharedSourceというのは CodePlexの事でしょうか?
(それともCCPにアクセスできるとか?)
探せばいくらでも情報はあるのですが、なかなかそのものズバリなものを見つけられずに苦労しています。

tmyt さんのコメント...

こんにちわです

SharedSourceはWindows Embedded CEに付属してるので、MSのSharedSourceライセンスに基づき参照とかできるものです。
トライアル版がMSからダウンロードできるので、それをインストールするとCEの一部のコードが参照できます

kazuaki さんのコメント...

tmytさん こんばんは。
情報ありがとうございます。

試してからお返事しようと思っていたのですが、なかなか時間がとれずにまだ試せずにいます。
今週末は3連休なので、少しは時間がとれるといいのですが...。

nmaeda さんのコメント...

ふと思いついたのですが、充電台なりACアダプタに繋いだとき、任意のアプリケーションが起動できると便利かもしれませんね。
充電台に載せたときは、フルスクリーンの時計を表示するとか、ActiveSync以外のバックアップソフトを起動するとか、応用ができそうな気がします。

kazuaki さんのコメント...

nmaedaさん こんばんは。
コメントありがとうございます。

フルスクリーンの時計というお話でとaviさんのCradle Clockを思い出しました。
ふと気になってソースを拝見したところ、やはりバッテリが充電中になったかどうかで判定されているようですね。

この方法だと満充電のときに充電台に乗せたときに対応できないかな...と思っていたのですが、よく考えたらほとんど問題ないような気もしてきました。

任意のコマンド実行はいいアイディアですね。
こちらも良く考えたら tmytさんのツールをそのまま使えば何も作る必要がないという事に気が付きました(笑

ori さんのコメント...

ACオン/オフのタイミングで任意のアプリを起動することのできるCheckACLineというアプリを作ったことがあります.

http://w03holic.seesaa.net/article/51189766.html

結構昔なのでどんな実装をしたか覚えていませんが...

kazuaki さんのコメント...

oriさん こんにちは。
アドバイスありがとうございます。

ソース拝見しました。
なるほど、RequestPowerNotifications()ならバッテリ100%のときでも問題なさそうですね。

これでやりたかった事は解決ですが、今日は風邪で仕事を休んでいるのでもう少し勉強してみます。

nmaeda さんのコメント...

ご紹介いただいたCradle Clock以外にも、Spb Time($9.95)も充電時に自動的に時計を表示できるようです。こちらはシェアウェアだけあって、世界時計、アラーム、タイマーなどなかなか多機能です。

CheckACLineも後で試してみます。ご紹介ありがとうございます。>oriさん

Bluetoothドングルを入手したので、アドエスでPCとシンクしてみましたが‥‥ これはかなり便利ですね。普段、アドエスをPCから離れた場所に置いているので、その場でアドエスを操作するだけでシンクできるのは楽チンです。ただ、アドエスですとドングルが邪魔で仕方がありませんが。せめてストラップでも付けられれば良かったのですが。

kazuaki さんのコメント...

nmaedaさん こんばんは。

Spb Timeググってみました。カッコいいですね。

たまには見た目で勝負できるようなツールも作ってみたいものですが、なかなかデザインセンスがついて来てくれません(笑
デザイナーの人たちが羨ましいです。

Bluetoothは一度使うと手放せませんよね。
うちではUSBケーブルの出番が無くなってしまいました。