ページ

ラベル MCAlert の投稿を表示しています。 すべての投稿を表示
ラベル MCAlert の投稿を表示しています。 すべての投稿を表示

2008-07-18

ついでに登録

GiraffeにWifiInfoを登録したついでに、以前に公開していた MCAlertも登録してきました。
内容は以前に公開していたものと同じです。
ReadMeはこちらでご確認ください。
 
MCAlertを使う事で不在着信と未読メールの青LEDを個別に設定できるようになります。
また、未読メールについては一定時間でLEDを消すことができます。
 
昨夜も気づかないうちにメールを受信して青LEDが点灯したままになっていたのですが、このようなケースで知らず知らずのうちにバッテリを消耗する事がなくなると思います。
(もちろん重要なメールに気付かなくなるという危険性もありますが...)
 
注意点として、サスペンドに入ってしまうとLEDの消灯を行うことができないので LEDの消灯時間はサスペンドタイマよりも短くしてやる必要があります。
 

2008-05-20

不在着信時のみLED点灯(続き)

先週から引っ張っていた MCAlertを公開します。
不在着信または未読メールのLED通知を個別に設定できるようになります。
もっとも両方通知するのであればこのツールは必要がありませんが...
 
未読メールの通知は一定時間経過後にLEDを消灯することもできますが、消灯前にサスペンドするとLEDを消すことができません。
やはりサスペンドは鬼門ですね。
 

2008-05-17

サービスの開始と終了

このところバタバタとしていて ずいぶんと更新をサボっていました。
色々と未解決の問題があったはずなのですが、このまま忘れてしまいそうですね。
 
サボりだすとキリがないので、とりあえず一番記憶に残っている MCAlertから手をつけることにします。
 
MCAlertは新しい試みとしてサービスとして実行するようにしてみました。
WindowsMobileでは同時実行プロセス数が32個に制限されているらしいので、GUIを伴わないようなツールをサービスとして実行できればプロセス数を節約することができますね。
 
先日のテストバージョンではこの辺を参考にXXX_Init()、XXX_Deinit()を実装したDLLを作って、サービスを開始するだけのプログラムからActivateService()で呼び出すところまで作っていました。
このままではサービスを終了することができないので、既にサービスが動作中であればサービスを停止できるように変更してみます。
 
動作中のサービスのハンドルはGetServiceHandle()で取得するみたいです。
ActivateService()ではレジストリに登録したサービスのキー名を指定しますが、GetServiceHandle()に指定するのはサービスのプレフィックス(XXX_Init()等のXXXに相当する部分ですね)とインデックスを指定するようです。
サービスが動作中であればハンドルが取得できるので DeregisterService()でサービス終了、ハンドルが取得できなければサービスが動作中でないという事でActivateService()でサービスを起動するようにしました。
 
// **********************************************************************
// 定数
//
#define APP_NAME        _T("MCAlert")
#define MUTEX_NAME      _T("MCAlertStartupMutex")
#define SERVICE_NAME    _T("MCAlert")
#define SERVICE_PREFIX  _T("MCA0:")


// **********************************************************************
// WinMain
//
INT WINAPI WinMain(HINSTANCE hInstance,
                   HINSTANCE hPrevInstance,
                   LPTSTR    lpCmdLine,
                   INT       nCmdShow)
{
    HANDLE  hMutex              = NULL,
            hService            = NULL;
    TCHAR   szMessage[256]      = _T("");
    BOOL    bRet                = TRUE;

    hMutex = CreateMutex(NULL, TRUE, MUTEX_NAME);
    if (hMutex) {
        if (ERROR_ALREADY_EXISTS == GetLastError()) {
            CloseHandle(hMutex);
            hMutex = NULL;
            return FALSE;
        }
    } else {
        return FALSE;
    }

    hService = GetServiceHandle(SERVICE_PREFIX, NULL, NULL);
    if (INVALID_HANDLE_VALUE != hService) {
        if (DeregisterService(hService)) {
            MessageBox(NULL, _T("サービスを停止しました"), APP_NAME, MB_ICONINFORMATION | MB_OK);
        } else {
            wsprintf(szMessage, _T("サービス停止エラー(%d)"), GetLastError());
            MessageBox(NULL, szMessage, APP_NAME, MB_ICONERROR | MB_OK);
            bRet = FALSE;
        }
    } else {
        if (NULL == ActivateService(SERVICE_NAME, 0)) {
            wsprintf(szMessage, _T("サービス開始エラー(%d)"), GetLastError());
            MessageBox(NULL, szMessage, APP_NAME, MB_ICONERROR | MB_OK);
            bRet = FALSE;
        }
    }

    ReleaseMutex(hMutex);
    CloseHandle(hMutex);
    hMutex = NULL;

    return bRet;
}
 
あとはメール着信時の制御もできるようにして設定画面を作れば MCAlertについては一段落といったところでしょうか。
 

2008-05-11

不在着信時のみLED点灯

GW期間中メールの確認すらサボっていたら受信トレイに結構な件数のメールが溜まってしまいました。
夜、暗い部屋に置いておくと青いLEDが目立つんですよね(笑
 
設定でLEDでの通知をオフにしてもいいのですが、不在着信の通知も消えてしまうので考え物です。
そんな時、以前ソフトスレ辺りで「不在着信時のみLED点灯できたら...」という話があったのを思い出したので 試しに作ってみました。
  • MCAlert.CAB
    W-ZERO3.org Uploaderにアップできなかったのでこちらに置きます
 
CABを実行して再起動したら(正確にはスタートアップのMCAlert.exeが実行されたら)、不在着信時だけLEDが点灯するようになると思います。
 
どうせならメール受信後一定時間だけLEDを点灯させるようにしようと思ったのですが、途中まで作った時点でライトメールの存在を思い出して面倒になって止まってしまいました。
不在着信がうまく動いてくれたら頑張ってみます。