Hatena::Groupwindowsmobile-dev

WindowsMobileのはなし

2010-08-17

WindowsPhone7でも日本語入力を

| 18:29 | WindowsPhone7でも日本語入力を - WindowsMobileのはなし を含むブックマーク はてなブックマーク - WindowsPhone7でも日本語入力を - WindowsMobileのはなし

WindowsPhone7Betaで日本語の表示がとりあえずながらもサポートされました。

MS中の人はべつにサポートしようとしてサポートしたのではなくなんとなくフォント突っ込んだだけとかそういう気もしますが。

でもって、日本語入力もサポートされているとうれしかったのですが、残念ながらさすがにそれはサポートされていませんでした。ちなみに<TextBox>のInputContextにはHiraganaやKnjiが用意されているのでそのうちサポートする気はあるようです。

ところで、アプリケーションの開発にはやっぱり日本語入力ができたほうがやる気が出るわけでして、同じことを考えているid:iseebi が一晩で日本語入力するテストを公開してくれました。

そろそろ Windows Phone 7アプリも書き始めないとなーとか思ったのですが、Betaになってから表示はできるようになったものの当初の発売予定が存在しない日本語のIMEは現時点ではサポートされていません。

アプリ作るにもひとまず日本語入力ができないと何もできないので、Social IMEを使って日本語入力を実装してみました。入力した内容を、Socal IMEに問い合わせて、入力候補を探してきます。

Windows Phone 7 で日本語入力を実現する - backyard of 伊勢的新常識

このままじゃ再利用もできないので使いやすいようにUserControlに書き換えてきました。まぁ実際使いやすいかと言われると微妙なところですが。

使い方は、Japanese.JpTextBox.dllアセンブリ参照に追加して、XAMLの最初のほう、phone:PhoneApplicationPageにxmlnsを追加します。追加したら後はてきとーなかんじでXAML書くと使えます。

<phone:PhoneApplicationPage
    xmlns:jp="clr-namespace:Japanese;assembly=Japanese.JpTextBox"
    >
    <jp:JpTextBox x:Name="textBox" />
</phone:PhoneApplicationPage>

日本語入力のOn/Offですが、記号パッドのなかの"・"(なかぐろ?)をタップするとIMEがOn/Offされます。IMEが有効だとテキストエリアの枠がPhoneAccentColorになる仕様。

このライブラリバインディング周りがかなりおかしくて、一応日本語入力はできるものの、Bindingでテキストの値を参照するとうまく動かないことが多いです。プロパティCLRプロパティで参照した方が無難です。

依存関係プロパティとかいまいち理解してないやつが作ってるので、Silverlightに詳しい方にいろいろ指摘していただけるとありがたいです。

Download: Japanese.JpTextBox.1008171158

DeviceResolutionAwareのはなし

| 18:12 | DeviceResolutionAwareのはなし - WindowsMobileのはなし を含むブックマーク はてなブックマーク - DeviceResolutionAwareのはなし - WindowsMobileのはなし

C++でのネイティブ開発向けのライブラリとしてDeviceResolutionAware.hというヘッダライブラリSDK内に提供されています。

こいつはなんぞや。ってところからいくと、WindowsMobileには96dpi, 128dpi, 192dpiの3種類があります。Standardも含めると5種類ぐらいかな?

でもってこんだけ解像度がたくさんあったら開発者がたいへんだろが!あほ!ということでこのライブラリがあるわけです。

何をしてくれるかというと、つまるところ、定数値をDPIスケーリングするためのライブラリです。このライブラリ内にDRA::SCALEXDRA::SCALEYといった関数が含まれていて、こいつに定数を渡すと実行中の端末のDPIにあわせた値にスケーリングしてくれるという便利なやつです。

DRA::SCALEXDRA::SCALEYはインライン展開されるけど、毎回計算したら遅いんじゃ・・・とかおもったんですけど意外と遅くなりませんでした。さすがMS

1千万回呼んで誤差が数十秒程度なので実際のところはほとんど無視できる範囲だと思います。

インライン展開されるのでコード量が増えるのがちょっとあれですけど、どんどん使っていったらいいとおもいますよ!

MichelMichel2012/11/03 18:13I wanted to spend a muinte to thank you for this.

ogwsdkogwsdk2012/11/04 06:37W6kEHj <a href="http://waxhmaymusfs.com/">waxhmaymusfs</a>

gliebhdgliebhd2012/11/05 14:43RlBtF5 , [url=http://olexlldtwevk.com/]olexlldtwevk[/url], [link=http://oftqfgzvnijo.com/]oftqfgzvnijo[/link], http://covjofyrkfpd.com/

2010-06-29

T-01B/IS02の地磁気センサをアプリから使う!

| 01:20 | T-01B/IS02の地磁気センサをアプリから使う! - WindowsMobileのはなし を含むブックマーク はてなブックマーク - T-01B/IS02の地磁気センサをアプリから使う! - WindowsMobileのはなし

T-01B/IS02には地磁気センサが搭載されています。すごいですね!

さてこいつはもちろんStream Interface Driverとして実装されていて、CreateFile関数ドライバをオープンしてIOControlするといろいろできたりします。

が、めんどうですよね。これをラッピングしたDLLとしてGeocon.dllというのがシステムにあります。こいつを叩いてやるとアプリケーションから地磁気センサの値を取得することができます。

C++で使うとこんな感じ。

extern "C"
{
    // XYZそれぞれ値を返す関数用の構造体
    struct XyzData
    {
        int x;
        int y;
        int z;
    };
    // 地磁気センサの初期化
    int TSGeomagnetStart();
    // 地磁気センサの後片付け。必ず最後に呼ぶこと!!
    void TSGeomagnetStop();
    // 現在の方角を取得(0~359)
    int TSGeomagnetGetDirection(int*);
    // 傾きを取得? よくわからない
    int TSGeomagnetGetInclination(struct XyzData*);
    // 地磁気の強度を取得? よくわからない
    int TSGeomagnetGetIntensity(int*);
    // 端末のXYZ方向それぞれのなにか値を取得するみたい
    int TSGeomagnetGetXyzdata(struct XyzData*);
}

あとはてきとーに呼ぶとそれらしい値がもらえます。便利ですね。あとキャリブレート系のAPIもあるようですが面倒なので見ていません。

.libがほしい人はどうにかして手に入れてください。ダイナミックリンクすれば別にそんなのもいらないですが。

あと、コード中のコメントにも書いてありますが、必ず終了処理を行ってください。終了処理をせずにアプリケーションを終了した場合、次回呼び出す際に端末が再起動します!

LaquishaLaquisha2011/08/21 07:38Hey, that post leaevs me feeling foolish. Kudos to you!

jrfvqeljrfvqel2011/08/22 23:53G6IasQ <a href="http://ncvahhcccooz.com/">ncvahhcccooz</a>

sowrhitsowrhit2011/08/24 02:09KjlkUF , [url=http://mfadzioatgxf.com/]mfadzioatgxf[/url], [link=http://hbupxxvqdywn.com/]hbupxxvqdywn[/link], http://zvfxshndagfd.com/

iqrsumthiqrsumth2011/08/31 19:48cKLOnT , [url=http://ngssfvboriyd.com/]ngssfvboriyd[/url], [link=http://akodzdnufdwj.com/]akodzdnufdwj[/link], http://axgtkigkclds.com/

HamzaHamza2012/08/20 20:43Cool! That's a clever way of lkoonig at it!

qmwyqkipyqmwyqkipy2012/08/21 17:29w9OBKH <a href="http://nflrmufwjprb.com/">nflrmufwjprb</a>

mbmnqzmbmnqz2012/08/23 00:07UddLdI , [url=http://fipenjdoapfn.com/]fipenjdoapfn[/url], [link=http://vqvpcvuyjygh.com/]vqvpcvuyjygh[/link], http://pudndpxlhexi.com/

ZaneleZanele2015/08/13 02:00Hey, that's the grettesa! So with ll this brain power AWHFY?

2010-05-21

_mkgmtime64がないって言われるんだけど。

| 04:02 | _mkgmtime64がないって言われるんだけど。 - WindowsMobileのはなし を含むブックマーク はてなブックマーク - _mkgmtime64がないって言われるんだけど。 - WindowsMobileのはなし

_mktime64は使えるのに_mkgmtime64は使えない。どういうことだ。実装されてないのか。

と思いきやそうでもないんです。%VS_INSTALL_PATH%\VC\ce\crt\src\mktime64.c を見るとちゃんと実装されています。

_mkgmtime64はヘッダにプロトタイプがないだけでちゃんとプロトタイプを書けば動く。というCEにありがちな実装のようです。

使う場合には次のように書くといいでしょう。

#ifdef __cplusplus
extern "C"
#endif
__time64_t __cdecl _mkgmtime64(struct tm *tb);

CRT関数はすべてC言語のシンボルなのでC++から呼ぶときはC言語の名前修飾にしてやらないとリンクできないのでC++としてコンパイルされるときだけextern "C"するというありがちな書き方です。

これでstruct tm*をUTCとして解釈させられますね!

LisaLisa2011/08/20 17:57Holy conicse data batman. Lol!

ykumojbdfptykumojbdfpt2011/08/22 22:33thcKBx <a href="http://wirlaengmvnj.com/">wirlaengmvnj</a>

xtgpolcodmuxtgpolcodmu2011/08/24 00:53IwYbLh , [url=http://ejjzcqnmitvd.com/]ejjzcqnmitvd[/url], [link=http://fbhlptafoowf.com/]fbhlptafoowf[/link], http://fnfqwxzuyoab.com/

2009-10-27

time関数を使いたい。

| 01:23 | time関数を使いたい。 - WindowsMobileのはなし を含むブックマーク はてなブックマーク - time関数を使いたい。 - WindowsMobileのはなし

time関数。よく使いますよね、時刻を秒でほしいとき。便利です。APIには秒で返してくれるのないし。

さてWMでtime関数を使うとリンクエラーになります。困ったものです。

それのひとつの解としてwcecompat(http://www.essemer.com.au/windowsce)というものがあります。ようするにCEで動かないANSI標準関数を再実装してみたよ!!というライブラリです。

しかしこいつなんとLGPLなんです。うざいですよね。

別にLGPLで困るってことは無いんですが、やっぱいやですよね。ということでWMには何故か_time64とかいうものが用意されています。_mktime64などもあるみたい。これを使うにはaltcecrt.hをインクルードすれば大丈夫みたい。

普通にtime実装してくれてもいいのに。とか。

// 使い方こんな感じ。
#include<windows.h>
#include<altcecrt.h>
int WinMain(/*引数省略*/)
{
    // time関数のかわりに_time64を呼ぶ。
    __time64_t t = _time64(NULL);
    NKDbgPrintfW(L"t = %d\n", t);

    // localtime, gmtime それぞれのかわりに_localtime64_s, _gmtime64_s を呼ぶ
    struct tm tm_;
    _localtime64_s(&tm_, &t);
    _gmtime64_s(&tm, &t);

    // strftimeはなぜか普通にあるので使える
    wchar_t s[128] = {0};
    wcsftime(s, 128, L"%Y/%m/%d %a %H:%M:%S\n", &tm_);
    NKDbgPrintfW(s);

    return 0;
}

EvertonEverton2012/04/30 11:24Ah yes, nielcy put, everyone.

qixkjdqixkjd2012/05/01 09:49ABSjN8 <a href="http://uqnbkqmopdbt.com/">uqnbkqmopdbt</a>

vprlmtjbvprlmtjb2012/05/02 04:04Xek0Pn , [url=http://hqjocsejyupr.com/]hqjocsejyupr[/url], [link=http://gcvggdfwbvfk.com/]gcvggdfwbvfk[/link], http://uohgxojlzlrd.com/

sbppndwhkosbppndwhko2012/05/02 09:49cLohSs <a href="http://psufzdyydols.com/">psufzdyydols</a>

ruhenmvruhenmv2012/05/03 08:08TStdK3 , [url=http://ocbwgicqrxjl.com/]ocbwgicqrxjl[/url], [link=http://bmacodwufuxd.com/]bmacodwufuxd[/link], http://ehezqzqepxci.com/

CpcjCpcj2014/07/11 00:07Suiinpsrrgly well-written and informative for a free online article.

YooYoo2014/07/22 11:29This is a most useful <a href="http://nbyvwpr.com">conriibutton</a> to the debate

JuanJuan2014/07/25 09:01Furrealz? That's maovslruely good to know. http://baodwumhjr.com [url=http://kogmahephbk.com]kogmahephbk[/url] [link=http://ufzqjlmfq.com]ufzqjlmfq[/link]

ShintarouShintarou2014/07/27 00:34<a href="http://qvqpijdsar.com">Thkining</a> like that is really amazing

AffonsoAffonso2014/07/28 14:22Times are chginang for the better if I can get this online! http://mqyclqsbr.com [url=http://cetzxpwf.com]cetzxpwf[/url] [link=http://zgidad.com]zgidad[/link]

2009-09-30

Bluetoothで通信したい

| 02:26 | Bluetoothで通信したい - WindowsMobileのはなし を含むブックマーク はてなブックマーク - Bluetoothで通信したい - WindowsMobileのはなし

最近Androidで近距離通信をおこなってその端末の名前をTwitterにPostするアプリケーションが発表されました。また、iPhoneではOS3.0からBluetoothP2P通信を利用したアプリケーションを開発することができます。

では、WindowsMobileにおいてはどうなのか。というところですが、WindowsMobile 5以降で利用可能なWSASetServiceAPIを利用することでほぼ同じことが可能です。

簡単な手順としては、socketbindWSASetServicelistenaccept 以降クライアントと通信

以上のように、WindowsMobileにおけるBluetoothはWinsockでラッピングされているので通常のソケットと同じようにして扱うことができます。

また、クライアント側ではsocketconnect 以降ホストと通信 と通常のソケットを利用したアプリケーションと同じように作ることができます。


それぞれのAPIの呼び出し方を含めたサンプルを作ってるところです。

ChampChamp2011/08/20 15:50You put the lime in the cocount and drink the article up.

moaeqvrbaznmoaeqvrbazn2011/08/22 22:10Ve5JWL <a href="http://ybjenwgoyllk.com/">ybjenwgoyllk</a>

gzdgywiwygzdgywiwy2011/08/24 00:50noR1N4 , [url=http://leesijqckkjy.com/]leesijqckkjy[/url], [link=http://natjnovculql.com/]natjnovculql[/link], http://tegqhmhtjwgg.com/

aylesxakkbraylesxakkbr2011/08/26 00:57UWBKVn <a href="http://zyezxbpcybqf.com/">zyezxbpcybqf</a>

ywypnbeeywypnbee2011/08/31 18:072RNiU2 , [url=http://asukpbnukehb.com/]asukpbnukehb[/url], [link=http://kkzfniohpzix.com/]kkzfniohpzix[/link], http://xkapoqycxsyb.com/

CadenCaden2012/11/03 16:42There is a critical sorhtage of informative articles like this.

rpgscadodfrpgscadodf2012/11/04 06:26h0I0cZ <a href="http://fnpdyjenumgr.com/">fnpdyjenumgr</a>

fwmjatnfwmjatn2012/11/05 14:33TnbUHq , [url=http://ifpospjbhogw.com/]ifpospjbhogw[/url], [link=http://ujouquncwwky.com/]ujouquncwwky[/link], http://axolfyddxlqk.com/

vzrftleavzrftlea2012/11/08 07:59lcB0Wi , [url=http://wxuyjaasynzh.com/]wxuyjaasynzh[/url], [link=http://orhakyjqtiyt.com/]orhakyjqtiyt[/link], http://abzrjkiuerfa.com/