2008年9月24日 (水)

ついに出たDelphi2009!

 実は、数日前まで知らなかったのですが、プログラム開発ツールのDelphiの最新バージョンが9月18日から発売になったそうです。この新しいDelphi、何が素晴らしいかというと、Win32APIを使いつつ、ユニコードがフルに使える点です。外国語関係のソフトを作っている身として、非常に興味深いものです。

 ソフトはパソコンショップやヨドバシカメラなどお店ではまだ置かないようで、まだネット販売のみのようですが、幸いに無料で14日間のトライアル版が使えるので、早速ダウンロードしてみました。

 ダウンロードはこちら

「CodeGear社が作っていましたがエンバカデロ社がそれを買収し販売」

Delphiは今開発に使っているのが安定しているVer5。実はその後もVer8も購入したのですが、.Netも使え、Delphi7も入っているとのことで買ったのですが、まったく使えないソフトでした。バグはあるし、ライセンスチェックが面倒で使う気にならないものでした。これでDelphiも終わりだと思っていました。

それが、Delphi2009ではVer5時代の速さ、便利さが戻っていました。エンバカデロのサイトではDelphiVer3の時のバージョンアップに匹敵する革新性を持っているとのこと。うなずけます。

また、たとえばMemoコンポーネントをフォームに貼り付けただけの簡単なアプリケーションでも、日本語とタイ語が同一入力エリアに入力できることを確認しました。ということはVCLというプログラムを組み立てる部品が全部Unicodeベースになったことを意味しているはずです。

コードを打ち込むエディターのところへは、私が確認した範囲ではUnicodeで日本語とかろうじて中国語はそのまま表示されましたが、ハングルは「・・・・」のように点になってみえません。ただ、Unicodeの変数にこのハングルの文字列をシングルクォテーションでくくって、たとえばShowMessageを使って表示させると、実行したものはきちんとハングルが表示されました。

ですのでエディタの中でUnicodeの文字列変数に固定文や単語を当てはめたい場合は、定数を扱う方法が必要です。Helpを調べるとそれらも分かりました。

 s1を文字列変数として定義して以下のように書くと定数を当てはめることができます。

   s1 := #$C548#$B155#$D558#$C138#$C694;

たとえば、ハングルの場合、ハングル1文字がユニコードの16進の値の4桁の数字になるので、これに先頭に#$を加えると文字列になります。上の式は「안녕하세요」をプログラムの中で定数として扱う場合のコードです。

 また、このDelphi2009はActiveXもパッケージとして取り込めるので、先日バージョンアップ版を公開した「漢の風」のようにWindowsMediaPlayerのActiveXを組み込みmp3ファイルの音声ファイルを再生させることもできます。

 Unicodeが扱えると、Uniocodeの中で定義されている発音記号フォントを扱えるようになるのもうれしいです。私の作ったPhonetica forWordという発音記号入力ソフトはSILの作った独自コードの発音記号フォントを入力するソフトです。本来であればUnicodeの発音記号フォントを扱えれば、数多くのフォント作者が作ったフォントを同一コード値で扱えるので便利になります。

 今まで、JAVAや.NET Frameworkなどいくつも開発ツールを試してきましたが、どれも速さがもったりしたり、別のランタイムが必要だったり、いまいちでした。

 Delphi2009は今までのソフトの遺産が生かせ、Unicodeも扱える。拡張性も高い。これはかなり、いいツールになる予感がします。何せ、Ver8に比べ月とすっぽんですから。

 このDelphi2009きっと今月中に発注すると思います。Professional版のバージョンアップ版が12月26日までネットのSEShop.comで10%引き、43,470円です。旧バージョンはどのDelphiでもOKだそうですので、安い旧バージョンを購入できれば、かなりお得になるはずです。 私も何とか予算を捻出したいと思っています。

 開発は、まだ書籍類は出ていないので、Helpを検索しながら手探りでノウハウを積むしかありません。ですが私自身が、外国語ソフトの次世代と考える機能を実現できそうなポテンシャルを持っていそうです。今後、現在ある外国語入力ソフトはできるだけ「音声が扱えるソフト」「発音記号が扱えるソフト」にグレードアップしようと思っております。

| | コメント (0)

2008年6月 2日 (月)

新作ソフトの案内準備がやっとできた

 先月末、中国語入力支援ソフト「漢の風」を作り、公開開始したのですが、まだ案内を送付できないでいます。

 その理由の一つが、Vectorでのダウンロードページの準備ができていないことがあります。5月26日に新規ソフトの登録申請をしていて、どうも、6月3日公開の予定のようです。シェアレジの方はそれから3,4日後になりますでしょうか。

 もう一つの理由に、今使っているso-netのメールサービスが一度に送信できるメールの数を今年の2月から100に制限したことがあります。どうも、so-netのアドレスを持っている人が大量にメールを送付したことがあり、メールを処理する業者からso-netのアドレスのメールを拒絶するような設定にした、というトラブルがあったようです。ただ、私のようなシェアウエアのサポートなどをメールでしているものにとって、この制限は正直面倒。

 もうかれこれ9年近くソフトをシェアウエアで販売してきているので、名前とメールアドレスの分かっているユーザーさんの数も2000前後あります。今は、JustsystemのShurikenというメールソフトを使っているのですが、アドレスをグループ分けはできるのですが、そのグループの中で件数を定めて順次メールを送る仕組みがありません。

 それで、数日前からプログラムを書いてアドレス帳をCSV形式でエクスポートした後、ダブりを省き、90件ずつファイル化するプログラムを作り、それをCSV形式で再度Shurikenに読み込ませ、グループ化する作業をしていました。

 10日ほど案内を送る作業待ちをしている間に、ソフトの改良点をふと思いついたりしました。ComboBoxというコンポーネントですが、その親コンポーネントのサイズが変わると、ComboBoxが選択状態になる点が気に入っていませんでした。私はこのソフトをDelphiという開発ツールで作っていますが、この問題をStyleをcsDropDownからcsDropDownListに変更することでクリアできることに気がつきました。今日、その箇所を含め2点デザイン的な改良部分を入れ直しました。そして、Ver1.01として公開開始しました。

 ソフトウエアを一人で作っている場合、どうしてもVer1.0の初版ではいくつかの気にくわない点やバグなど後で見つかります。ですのでデータなども3度はチェックします。

 メールでユーザーさんに案内を出すと、ダウンロードして試して頂ける方が格段に増えます。ですので、案内を出す前に、気にくわない部分を直せたので少しほっとしています。今回は、案内を出せなかった理由もマイナスではなく、Ver1.01を出すためのいいきっかけになったと思いました。

 もし中国語を使っている方、勉強されている方、一度「漢の風」をダウンロードして感想など教えて頂けると幸いです。

| | コメント (0)

2008年1月 7日 (月)

新ソフトのアイコン作り

 今作成中のソフトは中国語入力ソフトで、名称は「漢の風」と名づけました。この名づけの理由ですが、日本の文化の多くは漢字とともに中国からもたらされたものが多いと思います。それはあたかも中国から吹く風が、日本全土に行き渡るように、広がっていったと思います。

 それらの文化の中でおそらく一番日本人に愛されたのが、おそらく漢字ではないかと。ただ、今日本で使われているのは昔中国で吹いていた風。21世紀は、新しい中国からの風が吹きそうです。それが簡体字や繁体字。これらが日本人に好ましいものとして受け入れられるかどうかわかりませんが、とにかく新しい中国からの風になるのではないかと思い、日本人がその新しい風になじめるようなツールになることを目指して「漢の風」とつけたものです。

 実は、3年位前から、いろいろなプログラミングツールでこのソフトを手がけてきました。ソフトの名称が決まったのは昨年春位でしょうか。それからずっとアイコンを検討していたのですが、なかなかいいアイディアが浮かびませんでした。

 私がソフトウエアのアイコンを作る場合、以下のようなことを検討します。

 1)テーマとなる色

 2)外国語の話されている国をイメージさせるシンプルな形

 3)アイコンに文字を入れるか

1)に関しては、今回、中国語でしたのでイメージカラーは赤でした。2のシンプルな形がなかなか決まらず、例えば中国→卓球→ラケット、とかアイコンを漢字にして、ソフトのタイトルからとった「風」という字のアイコン。福という字を逆さにして「プーダオ」、すなわち福がやってくるという意味のアイコンにするなど考えました。

ただ、どうしても漢字をアイコンにすると、漢字自体のイメージが強く、アイコンがソフトウエアのイメージにつながりにくい気がしました。そうして新年を向かえ、イメージから考えようと思い、時々目を閉じて「中国語ソフト」のことを考えました。

そうした末に思い浮かんだのが、二つの大きな赤い球が斜めに並んでいる様子でした。お分かりでしょうか。イメージは北京と上海です。北と南といってもいいですが、やはり中国の発展は北京を中心とした北東部の発展と、上海、香港、広東など南部の臨海部の2つがイメージされます。

この2つの地域と、そこから吹く風をグラデーションで表現してはと思いました。

そして、今日、ドローソフトを使いアイコンの原図を作ってみました。

China3

これを32ピクセルの正方形に縮小し、私の作っているソフトのアイコンぽくするために茶色で2ピクセルの枠を描きました。

はじめは、この2つの球の上に「漢」「風」という漢字をいろいろ配置してみたのですが、少しくどくなり、気に入りませんでした。

結局シンプルなのが、なじみ易いと思いこのビットマップをアイコンファイルに変換しました。

China5

とてもシンプルですが、使ってみるとなかなか気に入っています。今年の春には公開したいと思っておりますが、皆さんに気に入って頂けるかどうか。オリンピックも近いですからがんばろうと思います。

| | コメント (0)

2007年11月30日 (金)

ソフトウエア遍歴

 最初にプログラミングを始めたのは大学の教養のときですので、19歳ですね。今、46歳ですので27年間コンピューターの前でパチパチキーボードを叩いているわけです。

 一番最初に触ったのは大学の大型計算機でした。当時体験的にですが、カードでFORTRANのプログラムを入力したり、PASCAL、C言語などを端末で動作させたりしました。授業ではそういった計算機の授業がいくつもありましたは、最初正直苦手でした。

 理系だったのでまわりの人たちは自分で出始めのパソコンを買って自分でプログラムを組んだりするひとも居たのですが、そこまで入り込めませんでした。自分はもともと、何か具体的に役に立つものでないと、本当の興味がわかないタイプだったので、練習問題のようなものは楽しめませんでした。

 それでも、ソフトウエアがこれから限りないくらいの可能性があるように思ったのと、人間と機械のインターフェースに関することをしたいと思っていましたので、大学3年のとき、当時ファジー集合を扱う研究をしていた情報処理工学講座に入りました。

 そこで、パソコンでC言語をみっちりやりました。そしてファジー制御というものの基礎を学んだのですが、それが将来、会社に勤めてからも役に立ちました。会社は松下電器だったのですが、やはり機械と人の接点ということで新しいエアコンの制御方式の開発などに従事しました。

 そこでは、ニューラルネットや多変量解析など、パソコンやユニックスのワークステーションを使ってプログラミングし、何らかの性能向上や新しい機能の実現を目指すのですが、最後はROMなど小型化可能な実装方法までできるように工夫しました。

 その後、Uターンして札幌に戻ってからはいくつかの言語をトライしてみました。C++やJAVA、Perlなど。ですが、私に一番なじんだのはDelphiでした。.Net Framework用のDelphiもありますが、やはり.Net のソフトウエアはいろいろなネックがあり、普及しにくいと思いました。それで、今ではちょっと古いですが安定感抜群のDelphi Ver5を用いて中国語入力ソフト「漢の風」開発をしています。

 アプリケーション開発の場合のソフトウエアは、方式開発やデータ分析の場合と違って、かなり細部に気をつかわねばなりません。難しい数式はない代わりに、使いやすさも十分に考慮されねばならないからです。会社にいるとき私はヒューマンインターフェース研究所というところにいたので、開発だけでなく、使いやすい機械とはといったことも研究していました。一般的に、使いやすいとは、シンプルなことですが、便利とは必ずしもシンプルというわけではありません。

 そんなわけで、WindowsのAPIをいかに使いこなし、シンプルで便利な機能を作るかに知恵を絞ります。ただ、全工程2,3週間のものであれば、ほぼ内容は全部把握し、ある箇所をいじったとき、どこに影響出るか直感でわかりますが、作り始めてから半年程度かかるものの場合、自分で作った仕組みを思い出さなくてはなりません。

 特に、組み込んだプログラムが、思ったような動きをしない場合、結構悩みます。簡単なケースであれば、プログラムの各所に変数の動きが分かるようなメッセージを表示する関数を挿入し、デバックすると見つかるのですが、while文などある条件である間、何かの処理をし続ける、といった処理が入ると少し難しくなります。

 そんな場合、最強なのは紙と鉛筆によるシミュレーションです。

 Debugondesk_2

キーボードの脇に白い紙を置き、例となる変数に応じて処理(関数)がどう動くか実例でたどります。変数の変化を頭だけで考えるより、発見があります。

今日、なぜこのようなブログにしたかというと、もう2ヶ月くらい前から、思ったような動きをしなかった部分があり、その原因が、この紙のシミュレーションで先ほど分かって嬉しかったからです。マイクロソフトのWindowsはさまざまな部品の塊からできていますが、すべてが、APIバイブルなどに書いてあるとおりの動作をするとは限りません。

多くの人はネット上の掲示板などで、Q&Aを見つけるようですが、見つからない場合もあります。そんな問題の解決方法を見つけたとき、とてもホッとします。思わず、今日は夕方の犬の散歩の時、ワンカップを買ってしまいました。こんな小さな喜びの上に私のソフトはできております。

| | コメント (0)

2007年11月26日 (月)

語学テキストについてくるCDについて

最近はほとんんどの語学テキストに音声の吹き込まれたCDが付いてきます。以前はテープ別売で、そのテープも3000円前後とか高価だったので、とても助かります。

ですが、あのCD皆さんはどうやって利用されているのでしょうか?ときどき疑問に思います。CDラジカセやコンポの前で、目的となるテキストの課のあるトラックを選び、リピートをかけて聴いているのでしょうか?それとも、本を眺めながら1課から30分くらいかけっぱなしで聴いているのでしょうか?はたまた。パソコンのDVD再生装置にかけパソコンのディスプレーを見ながら、WindowsMediaPlayerを操作して聞いているのでしょうか?

一文一文追いながらCDで、自分も発音をして確認するには、1度に多くて3,4文くらいのフレーズで停めないと、身につきそうはないですね。でも、CDの中の1トラックはそれほど細かくない。だから繰り返し聴いて自分で発音練習するには細切れの度合いが少ないように思います。

もともと、誰でもCD再生装置ぐらいはあるだろうし、テープよりは再生やリピートもしやすいのでCDを付けているのだろうと思いますが、このCDが語学学習にベストマッチであるとは思えませんでした。

なぜ、こんな話をしたかといいますと、今、中国語入力ソフト「漢の風」を作っているのですが、そこで、一文一文、対応する音声ファイルを指定できるようにしたいと思っているからなんです。自分の覚えたい文をクリックして「音声」ボタンを押すと、文章単位で再生できる、そのほうが身につくのではないかと。

そうした場合、テキストには一文単位で音声ファイル化されたCDが付いたものはありません。そこで、CD付きテキストを購入した人が自分で1文毎に切り出ししなくてはなりませんが、これがどのくらい大変か問題になります。

今日は、そこで語学テキストのCDの音声をパソコンに取り込み、一文一文切り出すことができるかそのツールなども調べました。以前からWAVEファイルであればCOOL EDITなどさまざまな音声切り出し(波形から音声を切り出すツール)があったのですが、今の時代やはりmp3でないとと思い。mp3形式でのデータ化を目標としました。

ネットで調べると、早速見つかりました。SoundEngineというフリーソフトがありました。このソフトもともとWAVE用の音声切り出しを行うものですが、VBのMP3用のDLLを取り込むことでMP3ファイルも読み込みは可能になります。ただ、切り出したファイルを保存するときWAVE形式でしかできないようです。(何か工夫すればmp3で保存できる手段があるかもしれません)

それで、またWAVEからmp3へのファイル変換ソフトを探すと「午後のこ~だ」を発見しました。実は以前に一度インストールしたことがありましたがそのときはあまり気にしませんでしたが、今回実際の音声データで変換してみると、なかなか良いようです。

つまり、手順を整理するとこんな風になりますでしょうか。

 1.WindowsMediapPlayerで語学CDをmp3で取り込む。

 Windows Media PlayerのバージョンはVer1.0以上でないといけません。Windows Media Playerを起動後、「Altキー」を押すとメニューが出ますので、「ツール」「オプション」で「音楽の取り込み」タグを選ぶと、「形式」の項目のところでmp3を指定できます。

 2.取り込まれたmp3ファイルをWork用のフォルダーに移動します。

 3.SoundEngineを起動し、トラックごとのmp3ファイルを読み込み、再生しながら1文1文を切り出します。切り出した後、選択領域をWAVEで保存し、名前をつけます。

 4.切り出したWAVEファイルを、「午後のこ~だ」で一括再度、mp3にします。

私は、「漢の風」の中でこのWindows Media PlayerのActiveXを用いて再生可能なPADを表示しています。ですので、単語帳に登録された文章に、先ほど切り出したmp3ファイルの名称を対応させておくだけで、どの順番でも覚えたい文章を再生可能になります。

実際、「紹文周の即効中国語会話」というテキスト1冊、この形式で音声切り出しをし、単語帳に登録しましたが、確かにCDを聞くより便利です。ただ、やはり音声切り出しはなかなか大変です。願わくば、次の時代にはCD付きテキストがDVD付きテキストに変わり、その中に一文単位でファイル化される時代がこれば良いなと願っています。

| | コメント (3)

2007年11月21日 (水)

中国語入力ソフト開発その4

 今年はいろいろあったのでソフトウエア開発もあまり前には進みませんでしたが、ようやく最近集中してできるようになってきました。

 現在、中国語入力ソフトを作っております。ソフトウエアの名称は「漢の風(ChinaWind)」という名称にしました。単に簡体字を入力するだけであればWindowsの簡体字IMEを用いればピンイン入力で簡体字は入力できます。

 私は、日本人はもともと漢字を知っているのだから、その日本の漢字と中国の漢字のインターフェースになるようなソフトを作りたいと思いました。それで、日本の漢字から簡体字に変換でき、その簡体字の読み(ピンイン)を容易に参照できるものをまず組み込みたいと思いました。これは今年の4月くらいからテーブルを作り始めたので、かなり時間をかけて変換テーブルを作りました。

 Gamen2

(クリックすると原寸大に拡大表示されます)

 この漢字ー簡体字変換は使用方法は簡単で、画面右上に日本語の文章を入れます。ひらがなやカタカナが含まれていてもかまいません。そして、変換ボタンを押すと画面左には簡体字、日本語漢字の下には各漢字毎の簡体字とピンイン読みを声調符号付きで表示します。

 自分の名前や住所、社名などを中国語でどう発音するかの参考になると思います。また、ある簡体字に対応する日本の漢字の読みは分かるけど、正確なピンインが分からないので入力できないような場合も、ピンインを探すのに用いることができます。

 あの簡体字は、日本のこの漢字が元の字だという対応関係をしっかり身につけることができればこの機能は成功です。

 また、今まで作ってきたKakiThaiやHanglinGTなどの外国語入力ソフトのユーザーさんから頂いた要望で、役に立ちそうなものをできるだけ取り入れようと思いました。頂いた要望の中に、「単語帳のリストの中で重要な単語を他のものと区別するために色付けできないか」というものがありました。

 今までの単語帳のデータ形式は各種ツールなども作りこんでいたので今から変更は難しいのですが、新しいソフトを作るにあたって単語帳のデータファイルのフォーマットも必要に応じて変更することにしました。ですので、色に関する情報もデータファイルに含めるようにしました。

 Gamen1_2

(クリックすると原寸大に拡大します)

色の変更方法は簡単で、単語リストの色を変えたい単語の箇所で、ポップアップメニューを出し、そこで色指定のダイアログがでますので、好きな色をクリック指定するだけです。確かに、重要な単語やフレーズを目立たせることができます。

また、従来単語リストは画面左下の比較的狭い部分でしか表示できませんでしたが、今回は一からソフトウエアを作ったので、デザイン的に下半分を単語リストとして使用できるようにしました。

主要な機能は組み込みましたが、ヘルプや細部の作りこみがまだです。ドキュメント関係はいままでと違う部分の脳を使うので、その切替が結構大変です。ですが、これから中国語を身近なものにしたい、という人たちが増えると思いますので、そういった人たちにとって役立つツールにして公開できるようにがんばりたいと思います。

| | コメント (0)

2007年4月27日 (金)

中国語入力ソフト開発その3

今までいろいろな外国語入力ソフトを作ってきましたが、ユーザーさんからの要望で多かったものに、単語帳をエディターのようなもので一括で作成できないか、ということがありました。

MicrosoftのWindowsの基本的な言語の扱いは、コードページというもので言語を分け、同じ文字コードでもコードページが違えば別の文字として使える点にありました。逆に言えば、複数の言語を同一ファイルで扱うようなことはできませんでした。NTやWindows2000からユニコードが使われ始めましたが、Unicodeでファイルに読み書きできてもメニューやボタンなどのコンポーネントにユニコードを表示することはJAVAや.NET FrameworkなどWin32APIと異なる体系を用いる必要がありました。

そんなわけで、ユニコードを使わずに、日本語訳と外国語をカンマ区切りファイルなどで混在させることが困難でした。

ただ、Win32APIでもたとえばListviewやStringGridなどで、一行、1セルだけを別の外国語にするといったことは、ちょっと手の込んだことをすれば可能になります。同一行または同一セルの中で日本語と外国語を混在することは難しいのですが、このような方法を使ってエクセルライクなエディターを作ることは可能でした。

以前に、Randoriという外国語の作文練習ソフトを作ったときに単語帳エディターとして組み込んでいました。今回、中国語入力ソフトをつくるにあたり、Randoriに入れたものをもっと簡便にして、エクセルの使用法にかなり似せて使えるものを作っています。

Tngeditor

(クリックすると拡大します)

ここで難しかったのが、StringGridのなかで行を編集するのにインラインエディターを使うのですが、簡体字のIMEが使えないのです。簡体字IMEでピンインから漢字を選んでも、その文字を決定したとたんに別の文字に変わってしまいます。

これは普通のテキストを編集するEDITコンポーネントやコンボボックスでも同じです。なぜかは分かりませんが、唯一リッチテキストコンポーネントだけ簡体字IMEを正しく使えます。それで、このエディターで中国語の編集の場合のみ、上部にリッチテキストエディットコンポーネントにデータを送り、そこで編集してもらうようにしました。

エクセルも、言語によってはセルの中では正しく文字にならないけど、上部の1行入力エリアではきちんと表示されることがある(Excel2000など)のに似ているし、それほど複雑でもないのでいいかなと思っています。

確かに、多くの単語を単語帳に登録する場合、エディター形式で入力できると効率的であることが実感できました。

| | コメント (0)

2007年4月23日 (月)

中国語入力ソフト開発その2

ここ数日、開発している中国語入力ソフトの中で、声調記号付きピンインをカタカナ発音表記に変換するプログラミングに取り組んできた。

Pinkana

(クリックすると大きく表示されます)

ピンインを見ればその発音をカタカナで書ける人も多いだろうが、中国語を始めたばかりの人は間違いやすいものもある。たとえば、yuanはそのまま読めば「ユアン」だが、実際は「ユエン」だ。またciは「チ」とか「キ」と読みがちだが、実際は「ツ」だ。

そのほか、多くの軽声も声調記号が付いている場合と違う読みをするし、アール化音もまた違った発音規則をもっている。tianは「ティエン」がだ、tianrはnが発音されず、aを今度はアと読み「ティアル」となるといったように。

ピンインが、実際には発音記号でないことに起因する学習上の問題を回避するために、ピンインからカタカナ表記発音に変換するプログラムを組んだ。

実際は、ピンインの音節表、およびそのアール化音の音節表をデータとして読み込み、入力されたピンイン文字列に頭からマッチングしてゆく方法をとっている。

面倒なのは声調付きピンインは2バイト文字で、そのほかは1バイトであること。軽声と声調つきでは発音(カタカナ)が違うので、声調の要素も判断しなくてはならないこと、その辺をクリアする必要があった。

また、日本の漢字から簡体字に変換する機能に、ピンイン読みを検索できる機能を付けているが(画面右上)、各漢字をクリックすると左上のピンイン入力エリアに声調つきピンインを入力できるようにした。このことで、日本の漢字を入力して、簡体字に変換したら、その後ピンインの入力はクリックだけで可能となった。

左上上部にピンインが入力されていると、カタカナ発音表記に変換できるので、漢字で遊べそうだ。中国や台湾と日本を結ぶ紐くらいにはなるのではないかと思う。

| | コメント (0)

2007年4月16日 (月)

VistaとXpではVersionが違う

今、中国語入力ソフトをWindowsXpマシンで作っています。私の作る外国語入力ソフトのこだわりに、ソフトを起動したらすぐにキーボードをたたけば外国語を入力できる点があります。

普通、エディターやWORDなどで外国語を入力するサイは左Shiftキー+Altで入力したい言語のキーボードレイアウトをActive化する必要があります。複数の言語のキーボード配列をWindowsに登録している場合は、このShiftキー+Altを何度も押すので大変です。

私の作るソフトではAPIのLoadKeyboradLayoutという関数を呼び出して、各言語のIMEをロードします。今回、簡体字用のIMEはMicrosoft Pinyin IME3.0を繁体字は中国語(繁体字)US Keyboardを呼び出します。

LoadKeyboardLayout関数にはキーボードレイアウト識別子とオプション用のFlagsを引数に渡します。

さて、このようにしてキーボード配列を自動で呼び出すプログラムをWindowsVistaにネットワークを介して転送し、起動してみました。そうしたら、簡体字を入力するIMEを呼び出すところで「EN」と英語のキーボードを呼び出します。繁体字もうまく呼び出せません。

それで、Windows VistaのWindowsのメジャーバージョンをプログラムを書いて調べてみたところVer6.0でした。WindowsXpのSP2のOSで同じバージョンを調べるプログラムを動作させるとVer5.1。外観や動作はさほど、違わないOSですが、どうも内部でいろいろ変更しているものと思われます。

早速、Windows Vista側で繁体字と簡体字を入力するためのキーボードをロードするためのLoadKeyboardLayout関数に渡すキーボードレイアウト識別子を調べました。この識別子、4つの数字からなる主言語識別子と、同じように4つの数字からなる副言語識別子からなりまさすが、主言語識別子はOSが違っても同じなようですが、副言語識別子はマニュアルや本には載ってません。

こういうときは勘が大事です。中国語以外のロシア語やタイ語なども調べ、類推しました。

結果、見つけることができました。

そこで、キーボードレイアウトを呼び出す場合、OSのメジャーバージョンが5か6かでXPかVistaかを判定し、違う文字列を関数の引数に渡すことで、1つ山が越えられました。

ソフトを作る場合、いくつも山はありますが、3つ4つ超えられると、これは「いけそうだ!」と思えるので、山越えは大事なステップになります。

| | コメント (0)