2011-10-12 9 views
3

編集コントロールからマウスポインタがあるウィンドウに、クリップボードやウィンドウハンドルを使わずにテキストを挿入する方法はありますか。編集からマウスポインタがある任意のウィンドウにテキストを挿入

私はカーソルがどこにあるかを見つけるためにデルファイ7

+0

提案がありますか? – Yurios

+0

デビッドのソリューションは、マウスポインタがどこにいてもどこにでも本当に送信したい場合は、素晴らしい(+1)です。私はそれが入力フォーカスを持っているウィンドウに送信する方が便利かもしれないと思っています。入力フォーカスが同じでもかまいませんし、マウスカーソルをタイプしたり読むときにマウスカーソルを押したがっている人なら、まったく違うかもしれません。 –

+0

+1(クリップボードを使用しないようにする)。 –

答えて

6
  1. コールGetCursorPosを使用しています。
  2. WindowFromPointを呼び出して、カーソルの下のウィンドウを見つけます。
  3. EM_REPLACESELメッセージを送信して、そのウィンドウの選択内容を置き換えます。何も選択されていなければ、テキストがキャレットに挿入されます。

注:これが成功するより一般的に失敗するように準備してください。多くのアプリケーションでは、ウィンドウ編集コントロールは使用されません。より堅牢なソリューションをご希望の場合はUI Automationをご覧ください。


いくつかのコードを要求しました。ここでは、それがどのように見えるかです:カーソル下のウィンドウが編集ウィンドウではない場合

var 
    Pos: TPoint; 
    Target: HWND; 
... 
if not GetCursorPos(Pos) then 
    RaiseLastOSError; 
Target := WindowFromPoint(Pos); 
if Target<>0 then 
    SendMessage(Target, EM_REPLACESEL, ord(True), LPARAM(PChar(Edit1.Text))); 

、これは、おそらく、良性となります。

+0

私は構造を理解しています。 – Yurios

+0

もう1つ質問:「X」のようなorcシンボルだけでなく、SendMessage(h、WM_CHAR、Ord( 'x')、0)からtDditのテキストを取得するにはどうすればいいですか? ? ありがとうございます。 – Yurios

+0

'code' h:DWORD; GetCursorPos(pt); h:= WindowFromPoint(pt);私は正しい方法で願っていますか? – Yurios

関連する問題