2016年09月06日

「キーボードシミュレータ(.NET) ver.1.40β」公開のお知らせ

キーボードシミュレータ(.NET) ver.1.40β」を更新しました。

ダウンロードはトップページからどうぞ。

主な更新点は次の3点となります。

  • 入力モードとして「文字入力モード」を追加。英大小文字や日本語など、任意の入力をシミュレートできるようにした。
  • Windows 9x/Me/2000を動作環境から外した。
  • 一般的なC#のセオリーに乗っ取り、ターゲットCPUを「Any CPU」から「x86」へ変更。

1番目の変更点が、今回の重要な更新点です。

内部的には「Unicode入力モード」と呼んでいますが、SendInput() APIでキーボード入力をシミュレートする際、「KEYEVENTF_UNICODE」を付けることにより、任意の文字の入力をシミュレートさせるモードです。

これを使わない場合、アルファベットの入力をシミュレートしても小文字の文字しか入力できず、大文字を入力したければ、CAPSキーの押下かSHIFTキーの押下をシミュレートしなければなりません。また、日本語を入力する場合は、日本語入力モードに入るところからシミュレートしなければなりません。

「文字入力モード」では、英字の大文字小文字であるとか、日本語(ひらがな、かたかな、漢字など)も直接指定できるモードです。
ただし、本プログラムが制御のために特殊な文字として扱っているもの(「 [ 」「 ( 」「 { 」「 } 」「 ! 」)を入力したい場合は、特殊な入力を行う必要があります。詳しくは、付属のヘルプをご覧下さい。

2番目の変更点は、おそらく、SendInput APIを使う事になったことにより生じるであろう制限によるものです。現在ではWin 9x/NT4での動作検証を実施していないため、実際に動かなくなったかどうかは確認していないのですが、多分動かなくなったと思いますので、動作環境から外しています。Windows 2000は巻き添えを食らうように対象外となっています。実際には動くんじゃないかな・・・と思いますが、対象外とします。

3番目の変更点は、これまで無意味にターゲットCPUを「Any CPU」にしていましたが、全く意味が無い(それどころか動作検証の手間が2倍になるだけ)ことがわかりまして、ターゲットCPUを「x86」に変更しています。

最近意識し始めたのですが、Visual C#では、デフォルトのターゲットCPUは「x86」になっています。これが最近のセオリーなんだとか。実際、Any CPUにすることにより、発生するトラブルは多いと聞きます。

例えば今回から使う事になった SendInput() API ですが、x86 と x64 で構造体サイズが異なってしまう(KEYBDINPUT構造体の「ULONG_PTR dwExtraInfo」は、x86かx64かでサイズが異なる)という事情があります。

ターゲットCPUをAny CPUにした場合、このサイズの差はプログラマがコードを作って吸収しなければなりません。
であれば、はじめからターゲットCPUをx86にしてしまえばよかったのです。
2GB以上のメモリを使いたいという要求もないですし。


posted by ayacy at 00:00 | Comment(0) | TrackBack(0) | フリーソフト