Windows10+VisualStudio2015でIMEを作成(1)

サンプルコードをコンパイルして利用する

 

 

 

このページの情報は、私のパソコン利用環境で、少なくとも1度は実行などしたものを記載していますが、

このページの情報を利用して損害などが生じても、私(このWEBページの作成者、programtips)は一切責任は負いません。

脅すわけではないですが、IME作成(というより作成したIMEを利用するために)はWindowsのレジストリを変更する必要もあり、

パソコンが動作不安定になったり、動かなくなったりする可能性が通常より高い点にはご注意ください。

エミューレーターや、OSのリカバリが問題ないパソコンが用意できれば、安全と思います。

もっとも、私もほかの用途などでも使っているパソコンを利用していますけれども。

またVisualStudio2015のインストールされた64ビット版Windows10パソコンを前提にしています。

 

1.作成の動機

Windows7をWindows10にアップグレードしたところ、

CORTANAなど、個人情報など情報収集の機能ばかり強化されていて、

気持ちが悪いので、IMEを自分で作ろうと思い立ちました。

(音声入力などが必要な人にはいいのだと思いますが、)

 

2.サンプルコードの入手

マイクロソフトの配布しているサンプルコードをコンパイルし動かします。

マイクロソフトからMicrosoft Windows SDK 7.1を入手・インストールします。

マイクロソフトのSDK7.1のダウンロードページ

https://www.microsoft.com/en-us/download/details.aspx?id=8279

ただし、このインストールがうまくいかない場合がかなり多いようです。

私も、開発に利用しているWindows10のパソコンには、

インストールしようとしてなかなかうまくいかず、

結局別のWindows7のパソコンにインストールしました。

 

 SDK7.1をインストールするためには.net 4が必要であるとのMatLabのページ 

http://jp.mathworks.com/matlabcentral/answers/101097-microsoft-windows-sdk-7-1

 VisualC++2010のランタイムやVisualC++2010 SP1がインストールされているとSDK7.1のインストールがうまくいかないとのkfujieda氏のブログ

http://d.hatena.ne.jp/kfujieda/20140827/1409137229

 

またこのページは、マイクロソフトとは直接の関係のないページだと思いますが、

SDK7のサンプル(とほぼ考えてよいと思われます)ファイルがダウンロードできます。

https://github.com/pauldotknopf/WindowsSDK7-Samples

ファイルの一覧の右上の「Clone or download」(今のところ緑のボタン)からまとめてダウンロードできます。

インストーラーを使わずにファイルを直接ダウンロードできるので、

こちらでダウンロードするほうが確実かもしれません。

 

3.サンプルをビルドしてIME(DLL)を作成する

入手したサンプルのフォルダのうち、\winui\tsfのところに、

IME関連のサンプルが入っています。

(2016年8月16日追記、上記\winui\tsfのところだけでなく、

winui\input\tsf\textserviceのところにもサンプルがある(こちらのほうが数が多い)ので、

こちらも確認したほうが良いと思います。

winui\input\tsf\textserviceのほうは、.slnファイルがあるのでそれを起動すれば、VisualStudioが起動するので、そのまま実行ファイルを生成できると思います。

うまく生成できなかったり、生成できてもIMEとして機能していない場合には、

下記のtsfcaseの場合を参考に、新しくソリューション・プロジェクトを作成して、

そこに、.slnファイルと.vcprojファイルを除く、ファイルをコピー・追加して、生成するとうまくいこともあると思います。

この近辺のフォルダも含めて、独立のIMEではなく、他のIMEに機能を追加するものや、TSFのIME側ではなく、テキストエディタなどのアプリケーション側のサンプルもあるようです。)

MakeFileで作成する形式になっていますが、

VISUAL STUDIO2015で開発することにします。

そのため、VISUAL STUDIOを起動して、

メニューの ファイル → 新規作成 → プロジェクトを選び、

 

Win32コンソールアプリケーションを選びます。

 

プロジェクト名などは、他のプログラムなどとの重複や、長すぎなど支障がなければ、

さしあたってどのようなものでも構わないです。

アプリケーションウィザードが表示されたら、次へを押して2ページ目にし、

アプリケーションの種類をDLLにし、空のプロジェクトにチェックを入れ、

他のチェックを外して、完了ボタンを押します。

 

 

今回は、tsfcaseのサンプルを作成することにしようと思いますので、

\winui\tsf\tsfcaseのフォルダにある全ファイル(もっとも、readme.txtなど不要なものもありますが、とりあえず簡単のために全部コピーします。)をコピーして、

今作成した空のプロジェクトのフォルダ(vcxprojのあるフォルダがいいと思います)にコピーします。

そのコピーしたファイルを、フォルダからVisualStudioのソリューションエクスプローラのソースファイルのところにドラッグ&ドロップします。

 

これで新規作成したプロジェクトにファイルが追加されたと思います。

 

つぎにソリューションエクスプローラのプロジェクトのところ、

上のスクリーンショットでいえば、ソリューションエクスプローラのツリーの上から2段目、

ConsoleApplication20のところを右クリックして、ポップアップメニューを出し

プロパティページを表示します。

このプロパティページで、構成を「Debug」、プラットフォームを「x64」にし、

左側ツリーの「リンカー」の下の「入力」を開いてモジュール定義ファイルのところに「case.def」と入力します。

なお「case.def」は、サンプルからコピーしたファイルのうちの一つです。

 

「case.def」と入力したら、プロパティページのOKを押します。

そして、VisualStudio画面上部の、ソリューション構成と、ソリューションプラットフォームを、

先のプロパティページと同じように、「Debug」「x64」にします。

 

それでビルドすれば.vcxprojファイルのあるフォルダの一つ上のフォルダのx64フォルダのDebugフォルダに、

IMEのDLLができているはずです。

 

4.作成したDLLの実行

作成したDLLを利用するためには、レジストリに登録する必要があります。

そのためにコマンドプロンプトを利用するのですが、

管理者として実行する必要があります。

 

特に開発用である必要はなく通常のものでもいいようですが、

コマンドプロンプトを起動するときに、右クリックから

その他->管理者として実行 などを利用して、管理者として実行してください。

コマンドプロンプトの所在が分からない場合、

Windowsを検索のところに、「コマンドプロンプト」と入力してみたり、

「cmd.exe」を検索すると見つかるかもしれません。

 

cdコマンドなどで、コマンドプロンプトのカレントディレクトリを、先ほど作成したdllのあるフォルダに移動し、

「regsvr32 (作成したdll名)」として登録します。(ただし、このように勝手なフォルダにあるIMEを登録するのは、正式な方法ではないようですが簡便のため今回はここで登録します)

たとえば。「regsvr32 ConsoleApplication20.dll」など。

コマンドプロンプトはDLLを登録解除するときまで開いたままにしておいたほうがいいと思います。

regsvr32に関するページ

http://home.att.ne.jp/banana/akatsuki/doc/other/windows01/

 

なお、コマンドプロンプトのカレントディレクトリをdllのフォルダに移動せずに、regsvr32に、フォルダ付きのファイル名を指定しても、regsvr32はちゃんと動くのではないかと思いますので、

そのようにしてもいいと思います。

うまくレジストリに登録できれば、「~~.dllのDllRegisterServerは成功しました」と表示されると思います。

コマンドプロンプトを管理者権限で実行していないと「0x80004005」のエラーコードがでるようですので、

その場合は、コマンドプロンプトの起動からやり直します。

 

では、うまく登録できたら、Windows付属のメモ帳を起動します。

メモ帳にカーソルが入っている状態で、

ウィンドウズキーを押しながら、スペースキーを押すと、

PC画面右側に、IMEの切り替えのタブが出るので、スペースキーを何度か押して、

作成したIME「英国(米国)Case Text Service」を選択します。

 

そうすると言語バーが変化するので、言語バーの右側の「漢」というところをクリックしてメニューを出すと、

今作成したIMEの機能のメニューがでます。

たとえば。メニューのHello Worldを選ぶと、

メモ帳のカーソルのところに、Hello Worldと入力されます。

 

また、Flip Keystrokesを選ぶと、入力したローマ字の大文字と小文字が入れ替わって入力されます。

ただし、以上二つ以外のメニューは私の環境ではいまのところ機能しません。

(レンジオブジェクトがうまく動いていないようなのですが、今のところ原因不明です。)

 

では作成したIMEの動作が確認できたら、

再び、ウインドウズキーを押しながらスペースキーを何度か押して、

選択中のIMEを再び、作成したIMEから、もとのIME(MicrosoftIMEなど)にもどします。

つぎに、コマンドプロンプトで、「regsvr32 /u (作成したdll名)」と入力してDLLの登録を解除してください。

たとえば、「regsvr32 /u ConsoleApplication20.dll」など。

うまく解除できれば、「~~.dllのDllUnRegisterServerは成功しました」と表示されると思います。

 

このDLLの登録解除はすぐに行ったほうがいいと思います。

どこで登録したか忘れると面倒なことになります。

regsvr32は不成功の場合でも,不成功と表示されずに,

成功と表示されることがあるように思われます

IMEの登録や解除がうまくいかない場合,管理者権限でコマンドプロンプトを再度たちあげなおすとうまくいく場合もあるように思います

 

ではこれで、サンプルコードの作成と実行は完了です。

ただし、まだ説明したほうがよいことがたくさんあるので、それらの点は次回以降説明します。

 

5.まとめ

今回の手順をまとめると以下のようになります。

  1. WIN32コンソールアプリケーションでDLLの空のプロジェクトを作成する
  2. サンプルのファイルを、1で作成したプロジェクトのフォルダにコピーする
  3. コピーしたファイルをプロジェクトに追加する
  4. プロジェクトのプロパティでモジュール定義ファイルを指定する
  5. ビルド構成、プラットフォームを指定する
  6. ビルドする
  7. 管理者としてコマンドプロンプトを起動する
  8. コマンドプロンプトのカレントディレクトリを作成したDLLのフォルダに移動する
  9. regsvr32で作成したDLLを登録する
  10. メモ帳などで作成したIMEを利用する
  11. regsvr32 /u で作成したDLLを登録解除する

 

6.IME作成について参考にしたサイト

ここでは、すんなりできてるように説明していますが、

最初のうちは、IMEの作成は全く、どうなっているのかわかりませんでした。

サンプルとなるようなコード自体、WEBを検索しても殆ど存在しないみたいでしたし、

サンプルがあってもビルドや、登録のし方がわからなかったりもしました。

ここで紹介したのではないマイクロソフトのサンプルがリンク切れで、

それを検索すると、半有料のダウンロードサイトにしかないらしい状況に出くわしたりして、

かなり困難だったのですが、その中でかなり参考にしたサイトとして、以下二つがあります。

 

Webと文字 (WindowsでIMEを作ろうとしていたGeorge.Nagaoka@gmail.com氏のブログのページ)

http://d.hatena.ne.jp/project_the_tower2/20090327/1238173943

 

Ν IME開発者向けリンク集 (CorvusSKKというIMEの開発者であるSASAKI Nobuyuki氏のページ)

https://nathancorvussolis.blogspot.jp/2014/10/link-list-for-ime-developers.html

 

トップページに戻る

ご意見、ご質問などは下記掲示板にお願いします。

 掲示板

 

作成2016/08/07、画像追加・まとめ追加・文章変更など若干の修正2016/08/10, regsvr32について若干の追加2016/08/12, winui\input\tsf\textserviceについて追加2016/08/16

(c)2016  programtips

inserted by FC2 system