2010-01-13 47 views
6

我想知道如何從任何窗口中突出顯示文本,例如:(excel,即firefox,...)。 請注意,以下消息不適用於上述應用程序 WM_GETTEXT,WM_COPY,EM_GETSELTEXT。從活動窗口中獲取突出顯示的文本

我也試過控制C(複製)並從剪貼板中獲取選定的文本,但這不是一個好主意。

使用的語言:C#

+1

發送複製命令的確不是很禮貌,如果一個行爲不當的應用程序會篡改我的剪貼板,那麼我會把這些東西放在一個目的中。 – 2010-02-10 11:48:38

回答

1

沒有答案是吧?那麼,我知道你可以使用互操作從Excel,Word等獲得它。研究一下。它可能會給你一些關於如何處理ie和ff的想法。但基本上接收應用程序必須有某種讓你這樣做的魅力,我不認爲有任何通用的方式可以一直工作。

-1

無需從頭開始在C#中編寫它。使用剪貼板有什麼問題?該腳本確保它在完成後恢復剪貼板上的內容。

Autohotkey使這更簡單。

; Hotkey: Ctrl Shift t 

^!t:: 

; Remember what was in the clipboard 
clipboardPrev = %clipboard% 

; Clear the clipboard 
clipboard:= 

Sleep,200 

; Send a Ctrl C to copy the current selection 
SendInput, {Ctrl down}c{Ctrl up} 

Sleep,200 

; Get the current selection from the clipboard 
selectedText=%Clipboard% 

if SelectedText = 
{ 
    ; If the first attempt didn't get any test, try again 
    Sleep,200 

    ; Send a Ctrl C to copy the current selection 
    SendInput, {Ctrl down}c{Ctrl up} 

    ; Get the current selection from the clipboard 
    selectedText=%Clipboard% 

} 

; Restore the clipboard 
clipboard=%clipboardPrev% 

MsgBox, %selectedText% 

return 
+2

我相信你的回答是錯誤的語言;) – caesay 2010-01-25 22:18:29

+0

我明白他在C#中要求它,但這需要很多工作和測試。您可以將其編譯爲可執行文件,然後使用Process類從C#應用程序調用。 – Ash 2010-01-26 02:25:30

+0

嗨,感謝您的回覆 目前在我的應用程序中我使用了剪貼板方法,但是我在使用Google Chrome時遇到問題。 將控件c發送給Google Chrome後,所選文本或剪貼板值爲空。 我見過很多像wordweb這樣的程序,可以在不使用剪貼板的情況下顯示突出顯示的文本,我該怎麼做? 對不起,我的英語不好。 – Gaby 2010-01-26 11:58:47

1

這個問題沒有通用的答案。每個窗口類都有不同的解決方案。

舉例來說,如果加亮後的文本是在編輯窗口,那麼你可以使用EM_GETSEL來獲得選擇的範圍,那麼WM_GETTEXT來獲取文本(再扔未選擇部分的方式)或EM_LINEFROMCHAR轉將範圍轉換爲行索引,然後EM_GETLINE以一次獲取所選文本一行。

但這不適用於任何其他窗口類。

1

我自己沒有嘗試過,但Microsoft UI自動化API應該具備您需要的功能。

如果您正在構建屏幕閱讀器以幫助盲人,您將使用UI自動化API。所以它應該能夠訪問任意應用程序中的選定文本。

一個良好的開端將與「文本模式概述」在http://msdn.microsoft.com/en-us/library/ms745158.aspx

而且保持你的眼睛上的問題517694。我想你會發現這個問題的答案可以解決你的問題。

相關問題