Как вывести из прогрммы окно InternetExplorer
От: Дима Иванов  
Дата: 03.04.03 12:07
Оценка:
Подскажите пожалуйста, как можно вывести
из программы окно Internet Explorer и
передать ему параметры.
Если не сложно, кусок кода.
Заранее спасибо.
Re: Как вывести из прогрммы окно InternetExplorer
От: nzeemin Россия http://nzeemin.livejournal.com/
Дата: 03.04.03 13:31
Оценка:
Здравствуйте, Дима Иванов, Вы писали:

ДИ>Подскажите пожалуйста, как можно вывести

ДИ>из программы окно Internet Explorer и
ДИ>передать ему параметры.

Может быть это поможет.
Взято из MSDN — на VB.NET:
        Dim target As String = "http://" & LinkLabel1.Text & "/"
        Try
            System.Diagnostics.Process.Start(target)
        Catch noBrowser As System.ComponentModel.Win32Exception _
            When noBrowser.ErrorCode = -2147467259
            MessageBox.Show(noBrowser.Message)
        Catch other As System.ComponentModel.Win32Exception
            MessageBox.Show(other.Message)
        End Try


См. также:
Q305703 HOW TO: Programmatically Start the Default Internet Browser by Using Visual C# .NET
Q305705 HOW TO: Programmatically Start the Default Internet Browser by Using Visual Basic .NET
... << RSDN@Home 1.0 beta 6a >>
Re[2]: Как вывести из прогрммы окно InternetExplorer
От: mihailik Украина  
Дата: 04.04.03 06:15
Оценка: 12 (1)
Нет, так только текстовые параметры передадутся.

Есть лучший способ. Для программирования IE из-под .NET лучше использовать JScript.NET, из-за совместимости.

// создаём IE Application, запускается iexplore.exe
var ie=new ActiveXObject("InternetExplorer.Application");

// открываем нужную страницу
ie.Navigate("***");

// нужно подождать, пока загрузится
while( ie.Busy )
{
    System.Threading.Thread.Sleep(100);
    Application.DoEvents();
}

// обращаемся к свойствам, методам
var document=ie.Document;
var window=document.parentWindow;

document.body.style.background="red";
window.alert("I'm here!");
... << RSDN@Home 1.0 beta 6a >>
Re[3]: Как вывести из прогрммы окно InternetExplorer
От: Дима Иванов  
Дата: 04.04.03 06:19
Оценка:
Здравствуйте, mihailik, Вы писали:

M>Нет, так только текстовые параметры передадутся.


M>Есть лучший способ. Для программирования IE из-под .NET лучше использовать JScript.NET, из-за совместимости.


M>
M>// создаём IE Application, запускается iexplore.exe
M>var ie=new ActiveXObject("InternetExplorer.Application");

M>// открываем нужную страницу
M>ie.Navigate("***");

M>// нужно подождать, пока загрузится
M>while( ie.Busy )
M>{
M>    System.Threading.Thread.Sleep(100);
M>    Application.DoEvents();
M>}

M>// обращаемся к свойствам, методам
M>var document=ie.Document;
M>var window=document.parentWindow;

M>document.body.style.background="red";
M>window.alert("I'm here!");

M>


Спасибо.
Re[3]: Как вывести из прогрммы окно InternetExplorer
От: Дима Иванов  
Дата: 04.04.03 06:25
Оценка:
Здравствуйте, mihailik, Вы писали:

M>Нет, так только текстовые параметры передадутся.


M>Есть лучший способ. Для программирования IE из-под .NET лучше использовать JScript.NET, из-за совместимости.


M>
M>// создаём IE Application, запускается iexplore.exe
M>var ie=new ActiveXObject("InternetExplorer.Application");

M>// открываем нужную страницу
M>ie.Navigate("***");

M>// нужно подождать, пока загрузится
M>while( ie.Busy )
M>{
M>    System.Threading.Thread.Sleep(100);
M>    Application.DoEvents();
M>}

M>// обращаемся к свойствам, методам
M>var document=ie.Document;
M>var window=document.parentWindow;

M>document.body.style.background="red";
M>window.alert("I'm here!");

M>


А с использованием C# — как это сделать?
Re[4]: Как вывести из прогрммы окно InternetExplorer
От: mihailik Украина  
Дата: 04.04.03 06:31
Оценка:
M>>Есть лучший способ. Для программирования IE из-под .NET лучше использовать JScript.NET, из-за совместимости.

ДИ>А с использованием C# — как это сделать?


Ну, примерно так же. Придётся сделать импорт TLB-библиотеки shdocvw.dll, в ней хранится описание InternetExplorer.Application. И подключить Microsoft.mshtml.dll, там описываются все типы элементов HTML (document, window, body, style и пр.)

C# в принципе может работать с IE, но глючно (из-за проблем в Microsoft.mshtml.dll). Если "общение" между дотнетом и IE плотное, лучше сделать отдельный модуль на JScript.NET. В JScript.NET есть позднее связывание, и он больше всего подходит для работы с IE.
... << RSDN@Home 1.0 beta 6a >>
Re[5]: Как вывести из прогрммы окно InternetExplorer
От: Дима Иванов  
Дата: 04.04.03 07:46
Оценка:
Здравствуйте, mihailik, Вы писали:

M>>>Есть лучший способ. Для программирования IE из-под .NET лучше использовать JScript.NET, из-за совместимости.


ДИ>>А с использованием C# — как это сделать?


M>Ну, примерно так же. Придётся сделать импорт TLB-библиотеки shdocvw.dll, в ней хранится описание InternetExplorer.Application. И подключить Microsoft.mshtml.dll, там описываются все типы элементов HTML (document, window, body, style и пр.)


M>C# в принципе может работать с IE, но глючно (из-за проблем в Microsoft.mshtml.dll). Если "общение" между дотнетом и IE плотное, лучше сделать отдельный модуль на JScript.NET. В JScript.NET есть позднее связывание, и он больше всего подходит для работы с IE.



Написал код
SHDocVw.WebBrowserClass ie = new SHDocVw.WebBrowserClass();
ie.Navigate("1.xml",ref obj,ref obj,ref obj, ref obj);
Выдает неопознанную ошибку.
An unhandled exception of type 'System.Runtime.InteropServices.COMException' occurred in TestInternet.exe
Что не так!
Re[3]: Как вывести из прогрммы окно InternetExplorer
От: Nikto Россия  
Дата: 04.04.03 09:38
Оценка:
Здравствуйте, mihailik, Вы писали:

M>Нет, так только текстовые параметры передадутся.


M>Есть лучший способ. Для программирования IE из-под .NET лучше использовать JScript.NET, из-за совместимости.


А не подскажешь примерчиком как лучше всего скрестить JScript.NET и C#?
Допустим у меня есть Форма(С#), на форме Стоит WebBrowser компонента как из JScript получить innerHTML некоего элемента и вернуть его в C#? Или может лучше способ есть?
Re[4]: Как вывести из прогрммы окно InternetExplorer
От: mihailik Украина  
Дата: 04.04.03 15:54
Оценка:
N>Допустим у меня есть Форма(С#), на форме Стоит WebBrowser компонента как из JScript получить innerHTML некоего элемента и вернуть его в C#? Или может лучше способ есть?

У WebBrowser есть Document, его можно использовать в JScript.NET. Например, Document.body.innerHTML.

На JScript нужно написать отдельную библиотеку, "сборку" по-местному. Скомпилировать его при помощи jsc.exe. И вызывать функции этой библиотеки из C#.

Для простых случаев можно и без JScript.NET обойтись. Конкретно — нужно посмотреть тип Document, кажется это mshtml.HTMLDocumentClass или что-то в этом роде. Этот тип описан в Microsoft.mshtml.dll, вот там и смотреть: какие методы, какие свойства и т.п.

Но для работы с C# оно плоховато приспособлено, потому и JScript.
... << RSDN@Home 1.0 beta 6a >>
Re[6]: Как вывести из прогрммы окно InternetExplorer
От: mihailik Украина  
Дата: 04.04.03 15:54
Оценка:
ДИ>Написал код
ДИ> SHDocVw.WebBrowserClass ie = new SHDocVw.WebBrowserClass();
ДИ> ie.Navigate("1.xml",ref obj,ref obj,ref obj, ref obj);
ДИ>Выдает неопознанную ошибку.
ДИ>An unhandled exception of type 'System.Runtime.InteropServices.COMException' occurred in TestInternet.exe
ДИ>Что не так!

WebBrowser должен лежать на форме, а форма должна быть видна (Visible). Работает только так
... << RSDN@Home 1.0 beta 6a >>
Re[7]: Как вывести из прогрммы окно InternetExplorer
От: Дима Иванов  
Дата: 05.04.03 08:52
Оценка:
Здравствуйте, mihailik, Вы писали:

ДИ>>Написал код

ДИ>> SHDocVw.WebBrowserClass ie = new SHDocVw.WebBrowserClass();
ДИ>> ie.Navigate("1.xml",ref obj,ref obj,ref obj, ref obj);
ДИ>>Выдает неопознанную ошибку.
ДИ>>An unhandled exception of type 'System.Runtime.InteropServices.COMException' occurred in TestInternet.exe
ДИ>>Что не так!

M>WebBrowser должен лежать на форме, а форма должна быть видна (Visible). Работает только так



Кааие параматры нужно задать функции Navigate();
Re[5]: Как вывести из прогрммы окно InternetExplorer
От: Nikto Россия  
Дата: 07.04.03 03:17
Оценка:
Здравствуйте, mihailik, Вы писали:

M>Для простых случаев можно и без JScript.NET обойтись. Конкретно — нужно посмотреть тип Document, кажется это mshtml.HTMLDocumentClass или что-то в этом роде. Этот тип описан в Microsoft.mshtml.dll, вот там и смотреть: какие методы, какие свойства и т.п.


Дык блин вся эта тема и поднялась из-за того, что ни фига там не работает — даже простые вещи. Например, мне нужно сделать простую вещь: получить у элемента с id, например "elem" innerHTML и у меня не получается. Перепробовал тучу вариантов — не получилось. У документа могу получить/изменить у элемента — нет . Ты случайно не делал чего-нибудь подобного?
Re[4]: Как вывести из прогрммы окно InternetExplorer
От: Nikto Россия  
Дата: 07.04.03 06:32
Оценка:
Здравствуйте, Nikto, Вы писали:

N>А не подскажешь примерчиком как лучше всего скрестить JScript.NET и C#?

N>Допустим у меня есть Форма(С#), на форме Стоит WebBrowser компонента как из JScript получить innerHTML некоего элемента и вернуть его в C#? Или может лучше способ есть?

У меня типа шизофрения, разговариваю сам с собой .
Вот ответ на мой вопрос:
jscript1.js:
package WebBrows
{
    public class MyWB
    {
        function Hi(document) 
        {
               document.parentWindow.alert("Hi");
             document.parentWindow.alert(document.all("DHTMLEdit").innerHTML);
             document.parentWindow.alert(document.all("DHTMLEdit").outerHTML);
        }

    }
}


Компилим файл командной строки дллку:
jsc.exe /t:library jscript1.js

Добавляем reference на дллку.
В cs файле пишем:
using WebBrows;
...
{
MyWB wb=new MyWB();
HTMLDocument doc;
doc=(HTMLDocument)axWebBrowser1.Document;
wb.Hi(doc);
}

И все пучком.
Спасибо за идею mihaliku.
З.Ы.: JScript.Net рулит!
Re[5]: Как вывести из прогрммы окно InternetExplorer
От: Nikto Россия  
Дата: 07.04.03 06:45
Оценка:
Здравствуйте, Nikto, Вы писали:

Забыл. Надо в С# еще reference Microsoft.JScript добавить.
Re[6]: Как вывести из прогрммы окно InternetExplorer
От: mihailik Украина  
Дата: 07.04.03 08:02
Оценка:
N>Дык блин вся эта тема и поднялась из-за того, что ни фига там не работает — даже простые вещи. Например, мне нужно сделать простую вещь: получить у элемента с id, например "elem" innerHTML и у меня не получается. Перепробовал тучу вариантов — не получилось. У документа могу получить/изменить у элемента — нет . Ты случайно не делал чего-нибудь подобного?

Делал, как же не делать. У одного-то элемента, как правило, работает, а уж как начнёшь рыться — хоть под стол прячься.

Часто ползут глюки из-за того, обращаешься ли к методу класса или интерфейса. Если ещё учесть, что каждый хренов <button> реализует как правило штук восемь интерфейсов: IHTMLElement, IHTMLElement2, IHTMLButtonElement и т.д., то картина разрушений становится ещё ужаснее
... << RSDN@Home 1.0 beta 6a >>
Re[8]: Как вывести из прогрммы окно InternetExplorer
От: mihailik Украина  
Дата: 07.04.03 16:54
Оценка:
M>>WebBrowser должен лежать на форме, а форма должна быть видна (Visible). Работает только так

ДИ>Кааие параматры нужно задать функции Navigate();


Ах, да, функция-то Navigate2, а не Navigate. С двойкой стабильнее работает. А параметры — ref object, там же написано. Нужно создать пустой объект new object(), и передавать его в ненужные параметры.

Ну и насчёт Visible не забывай.
... << RSDN@Home 1.0 beta 6a >>
Re[9]: Как вывести из прогрммы окно InternetExplorer
От: Дима Иванов  
Дата: 09.04.03 09:35
Оценка:
Здравствуйте, mihailik, Вы писали:

M>>WebBrowser должен лежать на форме, а форма должна быть видна (Visible). Работает только так


ДИ>Кааие параматры нужно задать функции Navigate();


M>Ах, да, функция-то Navigate2, а не Navigate. С двойкой стабильнее работает. А параметры — ref object, там же написано. Нужно создать пустой объект new object(), и передавать его в ненужные параметры.


M>Ну и насчёт Visible не забывай.


Еще один вопрос.
Как привязать объект-документ к открытому окну.
mshtml.HTMLDocumentClass doc = new mshtml.HTMLDocumentClass();
doc = ie.Document;
так не получается, может надо присвоить документ какому-нибудь
свойству doc.
Re: Как вывести из прогрммы окно InternetExplorer
От: Аноним  
Дата: 09.04.03 09:51
Оценка:
А как в это окно писать HTML ??
Re[2]: Как вывести из прогрммы окно InternetExplorer
От: mihailik Украина  
Дата: 09.04.03 15:45
Оценка:
А>А как в это окно писать HTML ??

document.write

document.body.innerHTML

WebBrowser.Navigate2("about:Кучма жив!")
... << RSDN@Home 1.0 beta 6a >>
Re[10]: Как вывести из прогрммы окно InternetExplorer
От: mihailik Украина  
Дата: 09.04.03 15:45
Оценка:
ДИ>Как привязать объект-документ к открытому окну.
ДИ> mshtml.HTMLDocumentClass doc = new mshtml.HTMLDocumentClass();
ДИ> doc = ie.Document;
ДИ>так не получается, может надо присвоить документ какому-нибудь
ДИ>свойству doc.

Это ты создал HTMLDocumentClass, а потом сразу затёр его содержимым ie.Document.

Попробуй doc=ie.Document as mshtml.HTMLDocumentClass. Если будет ругаться, то нужно посмотреть, какой тип у ie.Document. Может, там вовсе и не HTMLDocumentClass, а какой-нибудь HTMLDocument2Class или System.__ComObject.
... << RSDN@Home 1.0 beta 6a >>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.