ページ

2008-02-17

小ネタ集

今日は寒いですね。
滅多に雪の降らない地域に住んでいるのですが、窓の外では雪が舞っています。
 
こう寒いと出かける気にもなれず、昼間からパソコンの前に座っていました。
という訳で 今日遊んでみた小ネタをいくつか...
 
1つ目。
WifiSwitcherの更新間隔を短くしたいというご要望を頂きました。
更新間隔を制限しているのはOID_802_11_BSSID_LIST_SCANを呼んでから6秒程度必要という情報があったからですが、10秒という値に特別な意味はありませんでした。
 
とりあえず更新間隔を制限している部分を外しみてます。
case IDOK:
    // 設定値の保存
    ZeroMemory(szScanInterval, 32 * sizeof(TCHAR));
    GetDlgItemText(hDlg, IDC_EDIT_SCAN_INTERVAL, (LPWSTR)szScanInterval, 32);
    g_lScanInterval = _wtol(szScanInterval);
    //if (0 == g_lScanInterval || 10 > g_lScanInterval) {
    if (0 == g_lScanInterval || 1 > g_lScanInterval) {
        g_lScanInterval = SCAN_INTERVAL;
    } else {
        g_lScanInterval *= 1000;
    }
 
あわせてOID_802_11_BSSID_LIST_SCANを呼んだ後で OID_802_11_BSSID_LISTを呼ぶ前に 6秒待機している部分があるのでここも変更しておきます。
//Sleep(6000);    // 6秒程度待機しないとリストを取れてないみたい
//更新間隔 - 1秒だけ待ってみる
Sleep(g_lScanInterval - 1000);
 
これで任意の更新間隔を指定できますが、実際に試してみると 3秒以下だとほとんど検索できないようです。
少しばかり更新間隔を短くできても検索漏れがあるようだとダメですよね。
 
2つ目。
RfLedRestrictorで通信時にLEDを点滅させて普段はLEDを点灯させたままにしておきたいというご要望を頂きました。
RfLedRestrictorは自身をRegistryNotifyApp()で登録して 通信が始まるとLEDを点灯し 通信が終わったタイミングで消灯させています。
なので、起動時・終了時にLEDを消している部分を消さないように変更すればLEDは消灯しません。
// 接続状態に応じてLEDを制御
dwPppStatus  = GetPppStatus();
dwPhoneStatus = GetPhoneStatus();
//if ((0 != dwPppStatus || 0 != dwPhoneStatus) && 
//    ((!g_bOptPowerSupply || (g_bOptPowerSupply && PowerIsSupplying())))
//) {
//    SetRFIndicator(1);
//} else {
//    SetRFIndicator(0);
//}
SetRFIndicator(1);
 
WaitForSingleObject(hMonitorThread, INFINITE);
  :
//SetRFIndicator(0);
SetRFIndicator(1);
 
でも個人的にはあまりメリットがないような気がするのですが どうなんでしょう。全然 restrictしてないですしね(笑。
 
3つ目。
アドエススレで oriさんからお呼びがかかったような気がしました。
イヤホンマイクのボタンへの機能割り当てについての話題でしたが、Denwa.exeから見るとイヤホンマイクのボタンでも本体の通話キー、終話キーと同様に WM_USER + 562のメッセージが飛んできてwParamにそれぞれ 0x1c3、0x1c2がセットされています。
後は HookKeyHookからソースを拝借すればよさそうです。
if (WM_USER + 562 == msg) {
        // キーロック時にサスペンド実行
        if (0x1c5 == wParam && ...) {
            :
        } 
        // 通話キー
        else if (0x1c3 == wParam) {
            if (ExecUserAction(HOOKKEYHOOK_OFFHOOK_PATH, HOOKKEYHOOK_OFFHOOK_ARG)) return 0;
        }
        // 終話キー
        else if (0x1c2 == wParam) {
            if (ExecUserAction(HOOKKEYHOOK_ONHOOK_PATH, HOOKKEYHOOK_ONHOOK_ARG)) return 0;
        }
 
でも、ダブルクリック・トリプルクリックや通話中のフックの扱い等どう考えてもHookKeyHookを使った方がいいですよね。
 
以上、不健康な休日の作業メモでした。
 

5 件のコメント:

匿名 さんのコメント...

RfLedRestrictorの要望をしたkugetsuです。
今日朝から入れて使ってましたが、希望していた通りの動きです。
対応有り難うございました。
バスの中で使う事が多く、通信していない時にLED消灯で電界強度が確認できないのは少々不便だったもので。

匿名 さんのコメント...

指名してしまったみたいで申し訳ありません.
それにしても仕事が速いですね~.

kazuaki さんのコメント...

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

kugetsuさん>
切断時に少しLEDの消灯が続く部分が微妙な気がしていたのですが、ご希望に添えたようでよかったです。
バッテリが惜しくなったら、普通の(?)RfLedRestrictorもよろしくお願いします(笑

oriさん>
とんでもないです。ご指名ありがとうございました。
でも、普段はソフト関連スレの方しか覗いてなかったのでびっくりしました。

取りかかりは速かったのですが、諦めも速かったです。
とりあえずリモコンでも動くところだけ確認して終わってしまいました。

拾えるイベント毎に任意のアプリを呼べるように改造したらいいような気もしているのですが、まだまだ整理できていません。

匿名 さんのコメント...

Wifiswitcherの更新ありがとうございます。さっきダウンロードして試してみました。
良い感じです。
これで自宅のAPのエリアを調べるのが楽になりそうです。

ありがとうございます。

kazuaki さんのコメント...

しかとさん こんばんは。

1~2秒は無理でしたが、少しでもマシになったようでよかったです。

ただ、標準のクライアントではアクセスポイントを随時発見できるようなので 今とは別の方法があるのかもしれません。
いい方法があればWifiswitcherにも反映させていきたいですね。