问题描述
我正在开发一个应用程序,可以在另一个软件中读取 Internet explorer_server 控件中的选定文本.我在互联网上做了很多搜索,但无济于事.要更详细地了解问题,请查看以下图片:
I am developing an application that reads selected text in internet explorer_server control in another software. I did lots of search on internet but to no avail. To get the problem in more detail please have a look at the following picture:
这是一个软件的小窗口.我想从这个窗口读取选定的文本(就像我在屏幕截图中突出显示的那样).使用 spy++ 我发现文本在 internet exprlorer_server 中.
This is a small window of a software. I want to read the selected text (like i highlighted in the screen shot) from this window. Using spy++ i found that the text is in internet exprlorer_server.
我尝试使用 SendMessageTimeout 获取选定的文本
I tried to get selected text using SendMessageTimeout
lMsg = RegisterWindowMessage("WM_HTML_GETOBJECT")
Dim result As Long = SendMessageTimeout(htmlWindow, lMsg, 0, 0, SendMessageTimeoutFlags.SMTO_ABORTIFHUNG, 1000, lRes)
但是 SenMessageTimeout 在 lRes 中总是返回零.
But SenMessageTimeout always returns zero in lRes.
我正在尝试使用以下代码来获取所选文本:
I am trying following code to get the selected text:
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 函数:
Following is GetHTMLContent function:
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
任何帮助将不胜感激.
推荐答案
我解决了我的问题.我使用 SendMessage 而不是 SendMessageTimeout.声明的SendMessage如下图:
i solved my problem.i used SendMessage instead of SendMessageTimeout.Declared SendMessage as shown below:
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;
返回所需的结果.
Now htmlDocument = ObjectFromLresult(lResult, typeof(IHTMLDocument).GUID, IntPtr.Zero) as IHTMLDocument2;
returns desired result.
这篇关于如何在其他窗口的 Internet explorer_server 中获取选定的文本?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!