日本語版のページにも少しだけ紹介されていたので、知らなかったのは自分だけなのかもしれませんが...。
上記のページによると「状態および通知ブローカーAPI」と言うらしいです。
素直に「状態通知API」くらいにしておいてくれた方が目にとまりやすいと思いませんか?
ともかく昨日までの受信信号強度の取得部分を書き直してみました。
まず、WM_CREATEあたりでレジストリの監視を開始します。
HREGNOTIFY hRegNotify; RegistryNotifyCallback( HKEY_CURRENT_USER , _T("Software\\Sharp\\ShPhoneLib") , _T("RFStrength") , RegNotifyCallbackFunc , 0 , NULL , &hRegNotify );
今回はレジストリの値がそのまま受信信号強度なので問題ないのですが、 レジストリの特定のビットだけを監視したいときはサンプルにあるように NOTIFICATIONCONDITION構造体を使用します。
続いてレジストリの値が変化したときに呼び出されるコールバック関数。
レジストリの値は pDataに入っています。
VOID RegNotifyCallbackFunc( HREGNOTIFY hNotify , DWORD dwUserData , const PBYTE pData , const UINT cbData ) { DWORD dwRfStrength; dwRfStrength = (*(DWORD *)pData); if (dwRfStrength == 0) { // 圏外 } else { // 圏内 } }
最後、アプリケーションを終了するときにハンドルを閉じます。
// 終了時に閉じる
RegistryCloseNotification(hRegNotify);
タイマーイベントと比べて負荷が軽減したのかは不明ですが、コードはすっきりとしました。
やはりドキュメントは一通り目を通しておかないといけませんね。
0 件のコメント:
コメントを投稿