如何在當前活動窗口上檢索光標下的單詞?我的想法是使用GetCursorPos()
和WindowFromPoint()
來獲得句柄,並做些什麼,但如何?如何檢索當前活動窗口的光標下的單詞?
想象一下,一個字典應用程序,它讀取光標下的文本,並解釋其含義。
編輯
我最終使用從星際譯王的dll,對文本繪製的API鉤子。
如何在當前活動窗口上檢索光標下的單詞?我的想法是使用GetCursorPos()
和WindowFromPoint()
來獲得句柄,並做些什麼,但如何?如何檢索當前活動窗口的光標下的單詞?
想象一下,一個字典應用程序,它讀取光標下的文本,並解釋其含義。
編輯
我最終使用從星際譯王的dll,對文本繪製的API鉤子。
您必須知道所需的API;這並不明顯。你正在尋找MSAA,Microsoft Active Accessibility
總之,你會寫一個MSAA客戶端。通過調用AccessibleObjectFromPoint
,你會得到一個IAccessible
指針。該指針允許訪問指定點上的對象的屬性。
你所要求的不是微不足道的實施。
一旦確定了光標下的哪個窗口(不要忘記,您還需要使用ChildWindowFromPoint()
深入查看嵌套窗口),您可以使用GetClassName()
來確定它是哪種類型的窗口。
對於標準RICHEDIT
窗口,可以翻譯屏幕絕對光標座標到窗口內的客戶相對座標使用MapWindowPoints()
然後用EM_FINDWORDBREAK
,EM_EXSETSEL
和EM_GETSELTEXT
消息來定位,突出顯示,並複製的字光標座標。
對於標準EDIT
窗口,一旦已經翻譯的座標,則可以使用EM_CHARFROMPOS
消息來定位字符最靠近光標偏移座標,然後使用EM_GETTEXT
消息單行窗口或EM_LINEFROMCHAR
和EM_GETLINE
用於多行窗口的消息(使用GetWindowLong(GWL_STYLE)
來測試ES_MULTILINE
樣式),以便檢索窗口的文本,然後您將不得不手動分析字符偏移周圍的文本。
對於其他類型的窗口,特別是自定義控件,如果甚至有可能訪問窗口的文本,則必須做更多的工作。一些窗口響應WM_GETTEXT
消息和/或GetWidnowText()
,而其他窗口則不響應。
的確,這不是微不足道的。這就是您使用MSAA或UIAutomation的原因。 –
「任何窗口」是不可能的。您需要知道窗口類以及它將響應的消息。特別是像PDF閱讀器這樣的東西無法給你提供這些信息。 –
@MarkRansom你是對的,我現在修改了這個問題;對大多數情況有效嗎? – daisy
@MarkRansom:一個體面的PDF查看器實際上很可能會放棄這些信息 – MSalters