おおむね備忘録

個人的に後で見返したいような内容を書きとどめておきます

既存ツールで通信切断が効かない問題の対策

1月に入り、T-01Aを本格的に運用しています。
そこでぶち当たった問題が、通信につなぎっぱなしで終話をタップしないと切断されないこと。
S21HTの場合は、サスペンドに落とすときに切断する設定にしていたので、電源ボタンで通信切断もされていました。T-01Aではそういう設定がありません。

そこで、W-ZERO3時代からお世話になってる、harddialを使ってみました。ところが通信接続は出来ますが、切断が効きません。WMユーザー御用達ツールのEasyDialでも同様の動きでした。
調べてみると、T-01Aの通信関連は独自なようです。
いろいろ試してみましたが、以下の場所にあった、終話キーのキーイベントをエミュレートで対策してみました。
T-01AでRasEnumConnectionsを使用しても検知されない
ホーミンさんのコメント:
keybd_eventを使う方法は 仮想キー VK_END_ALL_DATA_CALLS=VK_F15=0x7E の押下をエミュレートしています。
VK_END_ALL_DATA_CALLS は winuserm.h で定義されているのでMS標準の電話機能を使用する端末すべてで利用できそうです。(まあメーカーにより機能が実装されていない端末があるかもしれませんが)

対策:KeyInputEmulatorで0x7EをSENDすることにより、終話キーを押されたことをエミュレートする。
具体的には、たとえばサスペンド時にはexecmultiにて以下の様に設定。

[Suspend]
exec=\Program Files\KeyInputEmulator\KeyInputEmulator.exe|
sleep=500
exec=\Program Files\KeyInputEmulator\KeyInputEmulator.exe|Suspend

これで通信切断後にサスペンドすることが出来るようになりました。