Hatena::Groupwindowsmobile-dev

WindowsMobileのはなし

 | 

2009-07-22

ImmEnableIME

| 00:45 | ImmEnableIME - WindowsMobileのはなし を含むブックマーク はてなブックマーク - ImmEnableIME - WindowsMobileのはなし

日本のTodayアプリの夜明けかと思った。

そんな瞬間だった。

Todayアプリは日本語が使えない。たぶんこれが常識でした。もしかすると違ったのかもしれませんが。

少なくとも、設定画面で日本語が使えないので別アプリを呼び出したり、Todayの入力エリアに日本語が入力できないので別アプリを呼び出して入力エリアにかぶせて表示したり、そんな泥臭いことまみれでした。

いろいろ調べてたところTodayで日本語が入力できないことに関して言及している方がおられました。

ImmDisableIME(..

...プロセス内の1つのスレッドまたはすべてのスレッドIME を無効にします。

この辺か?スレッドIME が無効になっているのですか。

関数自体は CE には対応してないん。

CE も同一の概念で作ってるのかなこの辺は。うーむ。

汝の隣人のブログを愛せよ | LOVELOG

ここの記事ではこの関数はCEに対応していない。と書かれていますが、MSDNによるとそんなことはありませんでした。

Requirements

Windows Mobile Windows Mobile Version 5.0 and later

no title

しかしMSDNにはDisableするAPIしか掲載されておらず、VisualStudioのインテリセンスもDisableしか表示しません。EnableにするAPIは存在しないのかと思っていました。

が、しかし、WindowsCE系列のOSはほぼすべてのAPIがcoredll.dllに入っています。このDLLエクスポートしている関数の一覧をid:ch3cooh393が作ってくれています。この一覧のなかにImmEnableIMEというのがありました。

しかし非公開APIなので使い方はわかりませんが、とりあえずGoogle検索をしたところ関数プロトタイプ

BOOL WINAPI ImmEnableIME(DWORD)

であることまではわかりました。

あとはこのDWORDへ何を渡せばいいか。ですが、まぁ途中の経緯はすっ飛ばして、とりあえず0を渡せばOKです。

このAPIDLL中で呼び出すとTodayのコンテキストで日本語入力をすることが可能になります。

C++から呼び出す場合はこんな感じですね

extern "C" BOOL ImmEnableIME(DWORD);
BOOL DllMain(HANDLE hinstDLL, DWORD dwReason, LPVOID lpvReserved){
	switch(dwReason){
		case DLL_PROCESS_ATTACH:
			ImmEnableIME(0);
			break;
		... 略 ...
	}
}

このAPIは誰かが呼べばOKで呼んだ誰かはアンロードされても大丈夫です。なので誰かわからないけど呼んでくれる人が必要ですが、みんな呼べばいいと思います。

非公開APIなので今後変更される可能性は大いにありますし、もしかすると今後使えなくなるかもしれません。

追記:DLL_PROCESS_ATTACHでEnableすると日本語入力できないタイミングが発生することがあるようです。(詳しくはこのエントリのコメント欄参照)各自日本語入力が必要になったタイミングでEnableして終わったらDisableする実装のほうがお行儀が良いのかも知れません。

とりあえずこんな感じで。

はじめましてはじめまして2009/08/02 02:08どうもはじめましてLIUNQAと申します。
情報ありがとうございます。
ImmEnableIME()試してみました。ただ、ImmEnableIME()を入れる場所
ですが、オプション画面を作成する直前にしてみました。
わたしだけかもしれませんが、DLL_PROCESS_ATTACHのタイミングだと
Today画面からオプション画面を呼出した後に、スタート-設定から
オプション画面を開くと日本語入力できないことがありました。
ご参考までに。

tmyttmyt2009/08/04 02:03こんばんは
DLL_PROCESS_ATTACHのタイミングだとTodayのオプションから呼ばれたときに日本語が通らないのですか。なるほど、それは検証していませんでした。
各自入力が必要になったときに関数をコールしていらなくなったらDiableするような実装の方がいいかもですね。ありがとうございます。

AdeAde2012/04/29 18:52So much info in so few words. Tostloy could learn a lot.

tdtlxshhtdtlxshh2012/04/30 13:07G16uZZ <a href="http://vnucznwpoqqp.com/">vnucznwpoqqp</a>

iogijofeiogijofe2012/04/30 17:31gTx2pq , [url=http://ifarjwkypshk.com/]ifarjwkypshk[/url], [link=http://tiansikzhfcl.com/]tiansikzhfcl[/link], http://wmqnvznprnpv.com/

cqcgoacqcgoa2012/05/02 10:57i4Vrdy <a href="http://nazasujpdyrh.com/">nazasujpdyrh</a>

sunspohkpmsunspohkpm2012/05/02 15:36tr8gFM , [url=http://rzkaxwpywlbt.com/]rzkaxwpywlbt[/url], [link=http://mhpoytihaydf.com/]mhpoytihaydf[/link], http://avbtvxwouvnm.com/

LesTheacyLesTheacy2019/02/19 16:49Face Swelling Propecia Finasteride <a href=http://curerxshop.com>cialis without a doctor's prescription</a> Rxdiler Buy Vardenafil Uk

LesTheacyLesTheacy2019/03/11 21:05Amoxicillin Expiration Dates <a href=http://cthosts.net>cheapest cialis</a> Need Generic Clobetasol Drugs Costo Cialis 10 E 20 Mg Zithromax Otc

LesTheacyLesTheacy2019/08/26 03:10Viagra Overnight Delivery <a href=http://levipill.com>canadian generic levitra</a> Tiempo Libre De Propecia Propecia Para La Mujer Buy Zithromax Single Dose Packets

 |