任意のWindowのテキストを取得する方法を探しています。
Editコントロールの表示テキストなどはWM_GETTEXT等で取得できます。
WM_PAINTで独自にDrawTextやTextOutなどで出力された文字列を取得する方法はないでし
ょうか?
それらのAPIを個別にフックするとか。
とはいえ、他にもDirctXで描画されるかもしれませんし、
画像を内部保持していたり、ピクセル単位で書かれたり。
APIのフックにしても、裏画面を使われるだけで今
本当に表示されてるのか判断できません。
別の方向としては画面キャプチャして解析するとか…
重なってたり入力が絞れないと辛いでしょうが。
結論
どこまでやるかにもよるが、
完全で簡単な方法はない。
APIのフックなんてできるんですか?
・・・調べてみたんですが、ちょっとダークサイドっぽいですね。。。
Text系APIだけフックできればとりあえず十分そうです。
>別の方向としては画面キャプチャして解析するとか…
画像からテキストを簡単に抽出するのは無理だと思っていたんですが、
簡単な方法があるんでしょうか?
> APIのフックなんてできるんですか?
よくわからずに…というのはお勧めしませんが。
そもそもの、目的は何ですか?何がしたいから、文字を取りたいのですか。
自分で書いたソフトではないものの文字が欲しいのですよね?
# そうでなければ、描画時点で覚えておけばいいだけなので。
その場合、対象ソフト次第では、裏画面などもあるので、
どの API 呼び出しが今実際の画面にあるかが判断できないと思うのですが、
そういうことは考慮したうえで、
> Text系APIだけフックできればとりあえず十分そうです。
ということですか。
ソフトの提供元に相談と化したら何とかなったりはしませんか。
背景がわからないと、なんとも。
> 画像からテキストを簡単に抽出するのは無理だと思っていたんですが、
> 簡単な方法があるんでしょうか?
簡単な方法なんてしらないです。解析してください。
> 画像からテキストを簡単に抽出するのは無理だと思っていたんですが、
> 簡単な方法があるんでしょうか?
OCRを使う。
たとえば、
http://ai2you.com/ocr/news/lib/ocrlib5.asp
#検索して見つけただけなので、性能等は分かりません。
dairygoods さん提示のサイトはランタイムのかかる法人向けですね。
KJ さんが個人なら、別なところを探す必要がありそうです。
>Banさん
私の発言で機嫌を悪くされたのなら謝りますが、
突き放すような発言は相手を不愉快にすることもあるので、
止めたほうがいいと思いますよ。
本題ですが、とあるツールでテキストをコピーしようと思ったらできなかったので、
ふと、任意のアプリのテキストを抽出したりできないかなと、
純粋に興味を持って調べていただけです。
バックバッファを使っていても、バッファへの書き込みはText系のAPIを使っていると思
います。
本当に画像で文字が書かれていたら、諦めます。
そこまでするつもりはありません。
>ソフトの提供元に相談
これはもっともですね。ただ、上記の通り興味があったので。
>OCRを使う。
面白そうですが、さすがにそこまでは。
dairygoodsさん、Banさん、ありがとうございました。
# 別に突き放した気も、不快感とかもないのですが…
# そう取れたならこちらこそすみません。
> バックバッファを使っていても、バッファへの書き込みはText系のAPIを
> 使っていると思います。
ちらつき抑制などの単純な一枚だけであればそのバッファがそのまま画面にあると
仮定できそうですが、三枚(裏画面が二枚)以上あるとか、部分バッファで入力部だけ
合成してるとか、そういうのはどうしようもないかと。
> バックバッファを使っていても、バッファへの書き込みはText系のAPIを
> 使っていると思います。
とは限らんでしょう。 あらかじめ用意しておいたbitmapを貼り付けてもいいんだし。
# 突き放した物言いがあったか?
# 「誠に申し訳ございませんが、私の不勉強ゆえ簡単な方法は
# 生憎存じ上げません。なにとぞご寛恕いただきたく」
# なんて答えられたら余計に不愉快だが (^^
> バックバッファを使っていても、バッファへの書き込みはText系のAPIを
> 使っていると思います。
> 本当に画像で文字が書かれていたら、諦めます。
バックバッファに文字を書き込むときには Text 系 API が使われている可能性が高いで
しょうが、そのバックバッファに書き込まれた文字を画面に表示するときには、画像と
して扱われているということはわかりますか?
バックバッファに文字が書き込まれても、それは画面に表示されないかもしれません
し、画面に表示されている状態から、それがいつの Text 系 API 呼び出しでバックバッ
ファに描画されたものかを突き止める労力は結構なものとなるでしょう。不可能とは言
いませんが…。