4

画面からテキストを取得できる Win OS API 呼び出しなどがあります。

スナップショットを取得して OCR を実行するのではなく、API を介して

アイデアは、ユーザーがポイントしてクリックしたマウスの下にあるテキストを取得することです。

これは、Babylon ( http://www.babylon.com ) や 1-Click Answers ( http://www.answers.com/main/download_answers_win.jsp ) などのツールやその他多くのツールが機能する方法です。

誰かがこの機能を得るために正しい方向に私を向けることができますか?

4

4 に答える 4

3

テキストを直接取得する方法はありません。アプリケーションは無数の異なる方法でテキストをレンダリングでき (Windows API はその 1 つです)、レンダリング後は単なるピクセルの集まりです。

ただし、試すことができる方法は、マウスの真下にあるウィンドウを見つけて、そこからテキストを取得しようとすることです。これは、ほとんどの標準的な Windows コントロール (ラベル、テキスト ボックスなど) では正常に機能しますが、インターネット ブラウザーでは機能しません。

あなたができる最善のことは、上記の方法でできるだけ多くの異なる (共通の) コントロールをサポートするようにアプリケーションを作成することだと思います。

于 2009-02-05T08:09:23.350 に答える
1

GetWindowText API を使用して、すべてのウィンドウのテキストを取得できます。マウスの位置は、GetCursorPos API で見つけることができます。

Delphi では、この関数を使用できます (下の Peter に敬意を表します)。

Function ChildWindowUnderCursor: HWND;
Var
  hw, lasthw: HWND;
  pt, clientpt: TPoint;
Begin
  Result := 0;
  GetCursorPos( pt );
  // find top-level window under cursor
  hw := WindowFromPoint( pt );
  If hw = 0 Then Exit;

  // look for child windows in the window recursively
  // until we find no new windows
  Repeat
    lasthw := hw;
    clientpt := Pt;
    Windows.ScreenToClient( lasthw, clientpt );
    // Use ChildwindowfromPoint if app needs to run on NT 3.51!
    hw := ChildwindowFromPointEx( lasthw, clientpt, CWP_SKIPINVISIBLE );
  Until hw = lasthw;
  Result := hw;
End;

よろしく、
リーベン

于 2009-02-05T08:10:08.530 に答える
-1

クリップボードと呼ばれるものだと思います。私は、これらのプログラムがクリックとダブルクリックとキーボードのイベントを挿入し、そこにアイテムをコピーして検査することに賭けます。または、Windows のテキスト コントロールがぎくしゃくして、そのようにコンテンツを取得しています。セキュリティ上の問題が原因で、これらのツールは vista での実行にも問題があると思われます。

于 2009-02-05T08:07:01.360 に答える