2011-10-12 34 views
3

如何在不使用剪貼板和/或窗口句柄的情況下將編輯控件中的文本插入到鼠標指針所在的任何窗口中。從編輯中插入文本到鼠標指針所在的任何窗口

我用Delphi 7

+0

有什麼建議嗎? – Yurios

+0

如果您真的想發送到鼠標指針所在的位置,David的解決方案非常棒(+1)。我懷疑發送到具有輸入焦點的窗口會更有用,它可能是相同的,或者如果您是那些喜歡在鍵入或閱讀時將鼠標光標推開的人之一,可能是完全不同的地方。 –

+0

+1爲了避免(ab)使用剪貼板。 –

回答

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

還有一個問題:我如何從tEdit獲取文本,不僅像「X」SendMessage(h,WM_CHAR,Ord('x'),0)這樣的orc符號; ? 謝謝。 – Yurios

+0

'code' h:DWORD; GetCursorPos(pt); h:= WindowFromPoint(pt);希望我在正確的方式? – Yurios

相關問題