Trovare il testo ed evidenziare lo stesso con IHtmlElement nel controllo webbrowser

Devo implementare la functonality TTS per leggere la pagina web aperta nel controllo del browser, mentre leggendo il testo devo anche evidenziare il lavoro che il sistema sta leggendo, ma non sono in grado di farlo. Vedo post qui ma non ottengo l’output effettivo come voglio. e anche quando sto provando il codice qui sotto sto ricevendo l’errore “System.Runtime.InteropServices.COMException was unhandled Message = Exception from HRESULT: 0x800A025E” sul trg.select ()

IHTMLDocument2 currentDoc = (IHTMLDocument2)webBrowser1.Document.DomDocument; foreach (IHTMLElement elem in currentDoc.body.all) { string[] splitSentences = elem.innerText.Split(" ".ToCharArray()); for (int i = 0; i < splitSentences.Length; i++) { // highlight(splitSentences[i]); mshtml.IHTMLDocument2 doc = (mshtml.IHTMLDocument2)(webBrowser1.Document.DomDocument); IHTMLBodyElement bodyElement = doc.body as IHTMLBodyElement; IHTMLTxtRange trg = bodyElement.createTextRange(); if (trg.findText(splitSentences[i], 0, 0)) { trg.select(); } //if (trg != null) //{ // String SearchString = splitSentences[i];// "Privacy"; // This is the search string you're looking for. // int wordStartOffset = 0; // This is the starting position in the HTML where the word you're looking for starts at. // int wordEndOffset = SearchString.Length; // trg.move("character", wordStartOffset); // trg.moveEnd("character", wordEndOffset); // trg.select(); //} //mshtml.IHTMLSelectionObject sel = (mshtml.IHTMLSelectionObject)doc.selection; //mshtml.IHTMLTxtRange rng = (mshtml.IHTMLTxtRange)sel.createRange(); //// rng.collapse(false); //if (rng.findText(splitSentences[i], 1000000, 0)) //{ // rng.select(); // sound_object.Speak(splitSentences[i], SpeechLib.SpeechVoiceSpeakFlags.SVSFlagsAsync); //} //sound_object.Speak(splitSentences[i], SpeechLib.SpeechVoiceSpeakFlags.SVSFlagsAsync); } Thread.Sleep(2000); } 

so che questo codice non sta per trovare il testo in un elemento, questo troverà il testo con in tutta la pagina voglio solo capire come funziona, ma non funziona,

Si prega di suggerire qualcosa di utile.

Puoi usare il seguente codice:

  IHTMLTxtRange rng = null; private bool FindString(HtmlElement elem, string str) { bool strFound = false; try { if (rng != null) { rng.collapse(false); strFound = rng.findText(str, 1000000000, 0); if (strFound) { rng.select(); rng.scrollIntoView(true); } } if (rng == null) { IHTMLDocument2 doc = elem.Document.DomDocument as IHTMLDocument2; IHTMLBodyElement body = doc.body as IHTMLBodyElement; rng = body.createTextRange(); rng.moveToElementText(elem.DomElement as IHTMLElement); strFound = rng.findText(str, 1000000000, 0); if (strFound) { rng.select(); rng.scrollIntoView(true); } } } catch { } return strFound; } 

Questo esempio di codice potrebbe aiutare a pensare – Forum MSDN: finestra di dialogo Trova browser Web

  private string GetSelection() { IHTMLDocument2 doc = (IHTMLDocument2)browserInstance.Document; IHTMLSelectionObject sel = doc.selection; IHTMLTxtRange range = (IHTMLTxtRange)sel.createRange(); return range.text; } private bool FindFirst(string text) { IHTMLDocument2 doc = (IHTMLDocument2)browserInstance.Document; IHTMLSelectionObject sel = (IHTMLSelectionObject)doc.selection; sel.empty(); // get an empty selection, so we start from the beginning IHTMLTxtRange rng = (IHTMLTxtRange)sel.createRange(); if (rng.findText(text, 1000000000, 0)) { rng.select(); return true; } return false; } private bool FindNext(string text) { IHTMLDocument2 doc = (IHTMLDocument2)browserInstance.Document; IHTMLSelectionObject sel = (IHTMLSelectionObject)doc.selection; IHTMLTxtRange rng = (IHTMLTxtRange)sel.createRange(); rng.collapse(false); // collapse the current selection so we start from the end of the previous range if (rng.findText(text, 1000000000, 0)) { rng.select(); return true; } return false; }