什麼是MSAA
Microsoft Active Accessibility是基於元件物件模型(COM)的技術,它改進了輔助功能與在Microsoft Windows上執行的應用程式一起工作的方式。它提供了整合到作業系統中的動態連結庫,以及COM介面和API元素,而且提供了用於公開有關UI元素的資訊的可靠方法。
從上面的定義,我們得知:MSAA是一種將有關螢幕上物件的資訊公開給輔助功能(如螢幕閱讀器)的技術。但這並不意味著只有螢幕閱讀器才能使用它。
下面是一個例子程式,它在最基本的級別上說明了Active Accessibility的用法:閱讀文字。 Active Accessibility的功能不僅限於此。你還可以以程式設計方式瀏覽螢幕上的物件,讀取各種屬性,甚至呼叫它們上的命令。
我們先看看下面的程式碼:
當然,最有意思的部分是RecalcText這個函式,它會獲取當前滑鼠位置下的文字:
讓我們來看看上面程式碼的功能。我們從獲取游標位置開始,程式碼會判斷自上次檢查以來它是否發生了變化。如果確實發生了變化,則我們要求AccessibleObjectFromPoint在這些座標處標識物件,併為我們提供IAccessible指標和一個子識別符號。這兩條資訊共同表示游標下的物件。
現在,只需簡單地查詢物件的名稱(get_accName)和值(get_accValue)並對其進行格式化即可。
另外,請注意,我們根據Eric的Complete Guide to BSTR Semantics對BSTR為NULL的情況進行了處理。
總結這項技術,確實能做到普通Win32 API做不到的事情,你真棒!
最後Raymond Chen的《The Old New Thing》是我非常喜歡的部落格之一,裡面有很多關於Windows的小知識,對於廣大Windows平臺開發者來說,確實十分有幫助。本文來自:《How to retrieve text under the cursor (mouse pointer)》