入力補助ツールの作成について

タグの編集
投稿者 パル36  (中学生) 投稿日時 2010/10/9 18:29:57
こんにちは、いつもお世話になっています。
早速ですが、入力補助ツールは作成できるのでしょうか。

考えているのは、グーグルやヤフーの検索のように関連する文字を表示させ選択させるものです。
また、入力されるボックスは他のソフト(メモ帳など)です。

ですが、アクティブでないタスクに入力して、イベントが発生するのでしょうか。自分自身のテキストボックスなら可能だと思うのですがどうでしょう?

回答宜しくお願いします。

OS WinVista
VB VisualBasic2008ExpressEdition
投稿者 YAS  (社会人) 投稿日時 2010/10/11 01:16:39
すべての入力に干渉したければグローバルキーフックを実装する必要があると思います。

VB.NETではできないと言われていますが,できたという報告もあります。
参考にしてください。

http://hongliang.seesaa.net/article/7539988.html
http://homepage1.nifty.com/rucio/commu/ThreadDetail_ThreadId_9524.htm
投稿者 るきお  (社会人) 投稿日時 2010/10/11 10:15:29
こんにちは。

>考えているのは、グーグルやヤフーの検索のように関連する文字を表示させ選択させるものです。
>また、入力されるボックスは他のソフト(メモ帳など)です。
ほかのソフトへの干渉はすごくがんばればできるかもしれませんが無理と思ったほうが良いです。

今回の件だと、対象がメモ帳と考えると以下の点をクリアしなければなりません。
1.メモ帳入力中に何が入力されているか把握する。
2.メモ帳内に関連する入力候補を表示させる(ドロップダウンのようなイメージ)
3.関連する入力候補の一覧の表示位置は入力しているところのすぐ下。
4.関連する入力候補の一覧を選択した場合に、選択内容をメモ帳に挿入する。
これらをクリアしてうまく動作するように組み合わせるのは至難の技です。
至難の技の最初の一歩がYASさんがおっしゃっているグローバルキーフックです。これができても1がクリアできるだけです。
このことに時間を使うのはもったいないです。

GoogleやYahooの場合は同じブラウザ内の制御だから実現できています。

今回の要件を実現するにはIMEに入力候補を登録するのが一番早いと思います。

>アクティブでないタスクに入力して、イベントが発生するのでしょうか。
発生しますが、メモ帳などの外部のアプリケーションが起こしたイベントを受け取ることはできません。
「イベント」に限定しなければ、ほかのアプリケーションで起こったできごとを知る手段はあって、繰り返しになりますがグローバルキーフックはその1つです。
投稿者 YAS  (社会人) 投稿日時 2010/10/11 11:35:57
一つの解決策として,スクリーンキーボードの仕組みを応用することを提案します。
自アプリのテキストボックスの中で入力支援をしながら入力し,文字列をSendInputで対象アプリケーションに送信するのです。
変換中の文字列はimm32.dllのGetCompositionStringを使えば取得できます。
投稿者 パル36  (中学生) 投稿日時 2010/10/11 19:49:29
こんばんは、たくさんの回答ありがとうございます。

グローバルキーフックですか。私自身まったく知らなかったので調べていませんでした。
調べてみますと、やはり.NETでの実装は難しそうですね。いまでもあまり学習していないので、遠い未来の話になりそうです。

確かに検索サイトの場合は、PHPなどで作られているので話が別っぽいですね。
スクリーンキーボードはこのような仕組みなんですね。でも、これは標準でないDLLを使用してやるのですか?
もし、そうならば少し難しいかもしれません。(難しそうです。)


今回、ふと思いついたアプリですが、実装はとうてい無理だと判断しました。
なので、今回のアプリ実装はあきらめます。
確かにるきおさんのいうとおり、時間の無駄かもしれません。いまできることをやっていきたいと思います。

YASさん、るきおさん今回もありがとうございました。また、わからなくなるかも知れないのでその時は宜しくお願いします。