2016-12-28 59 views
0

我想知道一個點的文本,例如一個Outlook電子郵件。如何獲取Outlook Inspector中某個點的文本/範圍?

在Excel和Word中,我能夠獲得ActiveWindow。兩種對象模型都提供了我正在使用的RangeFromPoint方法。

在Outlook中,應用程序對象確實具有ActiveWindow,但它返回Explorer或Inspector對象。

此外,我嘗試了下面的代碼,但它似乎Outlook中禁用的Word應用程序對象不提供RangeFromPoint。

Dim ins As Outlook.Inspector = olMail.GetInspector 
Dim wDoc As Word.Document = ins.WordEditor 
Dim w As Word.Window = wDoc.ActiveWindow 
Dim rng As Word.Range = w.RangeFromPoint(mousePosition.X, mousePosition.Y) 

我假設Outlook的對象模型不會幫助我。

Word Document對象模型中是否有其他方法可以幫助我?

如果Word對象模型沒有幫助,我必須依靠WinAPI嗎? 如果我必須使用WinAPI,我需要採取哪些步驟?

例如;

  • 轉換屏幕點到窗口控股(電子郵件的正文)文本
  • 的窗口點取在這一點上的文字。

什麼是最好的WinAPI獲得文本在一個窗口中的一個點。對於使用EM_GETSEL的SendMessage?

回答

0

我在這裏嘗試了一些東西。

爲什麼我想知道一點的文字。 我正在建立自定義工具提示到辦公室。當鼠標懸停在某個點上時(通過使用winapi函數TrackMouseEvent),我從Windows接收鼠標所在的點。然後我需要在Outlook(Explorer/Inspector)中瞭解鼠標結束了什麼。

首先思考 - 單獨的Outlook和Word對象模型。 正如您在問題中看到的,我的第一個想法是使用您可以在Word中使用的相同Window對象並實現RangeFromPoint方法。但MS決定在Outlook中不支持這一點。所以這是一個死路一條。

第二個選項,在這裏是使用這些

Selection.Information(Word.WdInformation.wdHorizontalPositionRelativeToPage) 
Selection.Information(Word.WdInformation.wdVerticalPositionRelativeToPage) 

和/或

Selection.Information(Word.WdInformation.wdHorizontalPositionRelativeToTextBoundary) 
Selection.Information(Word.WdInformation.wdVerticalPositionRelativeToTextBoundary) 

相對垂直一方或雙方始終返回的頁面-1即使文本鑑於顯然。 相對於文本邊界返回數字,它們隨位置而改變,但我沒有弄清楚在Outlook檢查器中邊界的位置。利潤率沒有幫助我。這可能是一種方法來做到這一點,但我沒有解決。

IUIAutomation或自動化 我與這些不過我嘗試獲取textpattern的沒有經驗失敗的Outlook 2007和Outlook 2010。我將這些版本命名,因爲我在這裏發現了問題,報告說他們在2013年取得了成功。我認爲當時MS有意試圖隱藏電子郵件的正文以阻止ummm減緩電子郵件病毒。

WinApi 電子郵件的文本正文位於類_WwG的窗口中,並且窗口的內容不可見。你會得到「消息」作爲文本。這裏也似乎是MS故意這樣做的。因此,試圖讓文本處於某個位置是行不通的。 WINAPI和Word對象模型 ,我發現的解決方案,它與瀏覽器閱讀窗格,並與所有督察工作的

組合是使用WINAPI和Word的組合。

  • 接收與點鼠標懸停事件在一個窗口(_WwG類用於Outlook)
  • 使用的SendMessage併發送一個消息話題此窗口與WM_LBUTTONDOWN標誌。
  • 從Inspector.WordEditor方法獲取Word文檔。
  • 當前選定的範圍將是鼠標在文本中的位置。
  • 將範圍擴大到單詞或任何您需要的內容,現在您擁有鼠標下的內容。

對於Outlook中的只讀窗口,用戶不會看到插入符,但它仍然存在並且可以找到並使用。

我還沒有在正在草擬的Outlook項目上實現此功能(光標處於使用狀態和可見狀態),但我想我必須將選擇移至鼠標位置,然後將其移回以便能夠實施它。我可以想象這對一些用戶來說不是最好的。

編輯 有一個我無法解決的問題。通過向窗口發送點擊,您可以點擊該點上的內容。如果存在超鏈接,那麼mailItem中的電子郵件地址就是這種情況,那麼它就會遵循超鏈接。我無法正確解決此問題。我在WinProc中發現的唯一的事情是,當鼠標超過超鏈接時,Outlook將顯示一個工具提示,並且存在WM_USER + 2消息。收聽此消息,如果收到此消息,請勿點擊。

相關問題