2009-07-08

clog.dbが作れない

最近何も作ってなかったので、Spb Mobile Shellで着信履歴を表示できないか調べています。
 
Spb Mobile Shellはdummy phone.dllを使うことで電話の発信ができるようになりますが、着信履歴を表示することはできません。 (ちなみに Pointui Home2は dummy phone.dllだけで着信履歴も表示可能でした)
 
Spb Mobile Shellは発着信履歴を clog.dbから直接読んでいるのだろうと考えて、直接着信履歴書き込むプログラムを作ってみました。
clog.dbの構造は一部わからないところもあるのですが、エミュレータ(Professioanl版)では正しく動いてくれました。
 
Classic版には clog.dbが無いので、自分で作ることにします。
#define COLUMN_1            MAKELONG(CEVT_I2        , 1)    // ? 1固定?
#define COLUMN_STARTTTIME   MAKELONG(CEVT_FILETIME  , 2)    // 開始時刻
#define COLUMN_ENDTIME      MAKELONG(CEVT_FILETIME  , 3)    // 終了時刻
#define COLUMN_CALLTYPE     MAKELONG(CEVT_I4        , 4)    // 4=不在着信, 5=発信, 6=着信, 7=拒否
                                                            // 5は?
#define COLUMN_PHONENUMBER  MAKELONG(CEVT_LPWSTR    , 6)    // 番号
#define COLUMN_DISPNAME     MAKELONG(CEVT_LPWSTR    , 7)    // 表示名
                                                            // 8は?
#define COLUMN_7            MAKELONG(CEVT_I4        , 9)    // ? 0固定?
#define COLUMN_PHONETYPE    MAKELONG(CEVT_LPWSTR    , 10)   // 番号区分(文字列)
#define COLUMN_8            MAKELONG(102            , 4096) // ? 本当は CEVT_AUTO_I4, 4096


static CEOID CreateClogDB(PCEGUID pGuid)
{
    CEDBASEINFOEX dbInfo        = {0};
    CEPROPSPEC dbProp[9]        = {0};

    dbInfo.wVersion             = 2;
    //dbInfo.wNumSortOrder        = 2;
    dbInfo.wNumSortOrder        = 0;
    dbInfo.dwFlags              = CEDB_VALIDCREATE;
    wcscpy(dbInfo.szDbaseName, _T("clog.db"));

    dbProp[0].wVersion          = 1;
    dbProp[0].propid            = COLUMN_1;
    dbProp[0].dwFlags           = NULL;

    dbProp[1].wVersion          = 1;
    dbProp[1].propid            = COLUMN_STARTTTIME;
    dbProp[1].dwFlags           = NULL;

    dbProp[2].wVersion          = 1;
    dbProp[2].propid            = COLUMN_ENDTIME;
    dbProp[2].dwFlags           = NULL;

    dbProp[3].wVersion          = 1;
    dbProp[3].propid            = COLUMN_CALLTYPE;
    dbProp[3].dwFlags           = NULL;

    dbProp[4].wVersion          = 1;
    dbProp[4].propid            = COLUMN_PHONENUMBER;
    dbProp[4].dwFlags           = NULL;

    dbProp[5].wVersion          = 1;
    dbProp[5].propid            = COLUMN_DISPNAME;
    dbProp[5].dwFlags           = NULL;

    dbProp[6].wVersion          = 1;
    dbProp[6].propid            = COLUMN_7;
    dbProp[6].dwFlags           = NULL;

    dbProp[7].wVersion          = 1;
    dbProp[7].propid            = COLUMN_PHONETYPE;
    dbProp[7].dwFlags           = NULL;

    dbProp[8].wVersion          = 1;
    dbProp[8].propid            = COLUMN_8;
    dbProp[8].dwFlags           = NULL;

    return CeCreateDatabaseWithProps(pGuid, &dbInfo, 9, dbProp);
}

 
こんな感じでデータベースはできたのですが、いくらデータを書いても肝心の着信履歴に表示されません。
いろいろ試してみると Professional版でもこの方法で clog.dbを作ると着信履歴が保存されないようです。 (最初に電話をかけると正しい clog.dbが作られる?)
 
ちょっとした違いなんだろうと思いますが、違いを見つけることができませんでした。
空のclog.dbを作るようなツールがあるといいんですけどね。
 

0 件のコメント: