2016-09-29 69 views
-1

我正在開發一個應用程序,它在另一個軟件中讀取Internet Explorer_server控件中的選定文本。我在互聯網上做了很多搜索,但無濟於事。爲了更詳細地得到了問題,請看看下面的圖片:如何在Internet Explorer的其他窗口中獲取選定的文本?

這是一個軟件的一個小窗口。我想從這個窗口讀取選中的文本(如我在屏幕截圖中突出顯示的那樣)。使用間諜++我發現文本是在互聯網exprlorer_server。

我試圖使用SendMessageTimeout

 lMsg = RegisterWindowMessage("WM_HTML_GETOBJECT") 
     Dim result As Long = SendMessageTimeout(htmlWindow, lMsg, 0, 0, SendMessageTimeoutFlags.SMTO_ABORTIFHUNG, 1000, lRes) 

獲取所選文本,但SenMessageTimeout總是LRES返回零。

我想下面的代碼獲取所選文本:

Dim hWndParent As IntPtr = GetForegroundWindow() 
     If hWndParent <> IntPtr.Zero AndAlso hWndParent <> Me.Handle Then 
      Dim hWndFocusChild = GethWndWithFocus(hWndParent) 
      Dim strClassName As String = GetClassName(hWndFocusChild) 
      If strClassName.ToLower.Contains("internet explorer_server") Then 
       GetHTMLContent(hWndFocusChild) 
      End If     
     End If 

以下是GetHTMLContent功能:

Public Shared Function GetHTMLContent(htmlWindow As IntPtr) As mshtml.HTMLDocument 
    Dim htmlDocument As New mshtml.HTMLDocument() 
    Dim thedoc As New mshtml.HTMLDocument() 
    Dim htmlDoc As IHTMLDocument = Nothing 
    Dim foundWindow As Integer = htmlWindow.ToInt32() 
    Dim htmlContent As String = "" 
    Dim IID_IHTMLDocument As New UUID() 
    Dim lRes As Long 
    Dim lMsg As Long = 0 
    Dim hr As Integer = 0 
    If foundWindow <> 0 Then 
     lMsg = RegisterWindowMessage("WM_HTML_GETOBJECT") 
     Dim result As Long = SendMessageTimeout(htmlWindow, lMsg, 0, 0, SendMessageTimeoutFlags.SMTO_ABORTIFHUNG, 1000, lRes) 
     If result <> 0 Then 
      If lRes <> 0 Then 
       ' Initialize the interface ID 
       IID_IHTMLDocument.Data1 = &H626FC520 
       IID_IHTMLDocument.Data2 = &HA41E 
       IID_IHTMLDocument.Data3 = &H11CF 

       IID_IHTMLDocument.Data4 = New Byte(7) {} 
       IID_IHTMLDocument.Data4(0) = &HA7 
       IID_IHTMLDocument.Data4(1) = &H31 
       IID_IHTMLDocument.Data4(2) = &H0 
       IID_IHTMLDocument.Data4(3) = &HA0 
       IID_IHTMLDocument.Data4(4) = &HC9 
       IID_IHTMLDocument.Data4(5) = &H8 
       IID_IHTMLDocument.Data4(6) = &H26 
       IID_IHTMLDocument.Data4(7) = &H37 
       Try 
        'htmlDoc = (mshtml.IHTMLDocument)ObjectFromLresult(, IID_IHTMLDocument, 0, htmlDoc); 
        hr = ObjectFromLresult(lRes, IID_IHTMLDocument, 0, thedoc) 
       Catch e As Exception 
        MessageBox.Show("Did not get IHTMLDocument: " + e.Message) 
       End Try 
      End If 
     End If 
    End If 
    Return thedoc 
End Function 

任何幫助將不勝感激。

回答

-1

我解決了我的問題。 我使用SendMessage而不是SendMessageTimeout。 聲明的SendMessage,如下所示:

private static extern IntPtr SendMessage(int hWnd, UInt32 Msg, int wParam, IntPtr lParam); 

並把它稱爲如下所示:

lResult = SendMessage(hWnd.ToInt32(), lMsg, 0, p); 

htmlDocument = ObjectFromLresult(lResult, typeof(IHTMLDocument).GUID, IntPtr.Zero) as IHTMLDocument2;現在所期望的結果返回。

相關問題