Как открыть IE с информацией о посте в C #? - PullRequest
9 голосов
/ 10 ноября 2009

Я разрабатываю небольшую программу, которая в форме Windows. В этой форме я хочу разместить ссылку, и когда пользователь щелкнет по ссылке, откроется отдельный браузер IE с данными публикации.

Оригинал, я использовал System.Diagnostics.Process.start(). Тем не менее, я не могу опубликовать данные с помощью этого вида вызова.

И я искал в Интернете, какой-то парень предложил использовать «элемент управления веб-обозревателя Microsoft», однако для этого нужно добавить этот элемент управления в мою форму и отобразить проводник в форме, но я хочу открыть отдельный IE. 1006 *

И я видел в VB есть метод как CreateObject("InternetExplorer.Application"), но я не могу найти, как использовать его в C #.

Итак, есть ли у вас какие-либо предложения по внедрению?

Ответы [ 6 ]

13 голосов
/ 10 ноября 2009

Оставьте веб-браузер в вашей форме. У него должно быть имя по умолчанию "webBrowser1" - вы можете изменить его, если хотите. Установите для свойства «Видимый» значение «Ложь». Дважды щелкните строку заголовка формы, чтобы автоматически сгенерировать событие загрузки в коде.

Вызовите метод Navigate, который имеет эту подпись:

void Navigate(string urlString, string targetFrameName, byte[] postData, string additionalHeaders);

Как это:

private void Form1_Load(object sender, EventArgs e)
{
    webBrowser1.Navigate("http://www.google.com/", "_blank", Encoding.Default.GetBytes("THIS IS SOME POST DATA"), "");
}

Вы можете передать туда любой массив байтов, который вам нужен ... Encoding.Default.GetBytes () - это просто быстрый способ пропустить строку.

Хитрость заключается в том, чтобы использовать «_blank» для целевого кадра.

3 голосов
/ 10 ноября 2009

Если вы выполняете ShellExecute с глаголом OPEN в URL, тогда будет создан веб-браузер по умолчанию и откроется ссылка. Кроме того, вы можете вызвать Internet Explorer (снова используя ShellExecute) с URL-адресом, добавленным в конце строки (поэтому строка, которую вы используете для ShellExecute, будет выглядеть следующим образом:

System.Diagnostics.Process.Start(@"C:\Program Files\Internet Explorer\iexplore.exe", "http://google.com");

Вы говорите о POST, но вы не можете выполнить POST, приведенная выше строка выполняет GET. В зависимости от того, как настроен веб-сайт, вы можете просто добавить параметры в конец URL, например:

System.Diagnostics.Process.Start(@"C:\Program Files\Internet Explorer\iexplore.exe", "http://www.google.com/search?q=bing");
2 голосов
/ 10 ноября 2009

Вам определенно понадобится использовать Process.Start (или использовать ProcessInfo), чтобы запустить IE: например:

// открываем IE для файла на рабочем столе в результате нажатия LinkLabel на WinForm

internal static string desktopPath = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory);

private void linkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
{
    System.Diagnostics.Process.Start("IExplore.exe", desktopPath + "\\someHTMLFile.htm");
}

Если вы прокрутите вниз на этой странице:

http://msdn.microsoft.com/en-us/library/system.diagnostics.process.start(VS.80).aspx

(Документы Process.Start для FrameWork 3.0)

вы найдете пользовательский пример использования ProcessInfo для управления запуском более одного экземпляра IE и передачи аргументов командной строки в IE.

Эта страница:

http://msdn.microsoft.com/en-us/library/0w4h05yb.aspx

(Документы Process.Start для FrameWork 3.5)

показывает полный пример запуска IE и как передать файлы url в качестве аргументов.

Мне не совсем понятно, что вы подразумеваете под "Post" в своем сообщении (я связываю "Post" с ASP.NET), но вы можете записать html-файл во временную папку с тем, что вам нравится и затем передайте адрес этого файла при запуске IE, используя методы, описанные выше. лучший

1 голос
/ 25 июля 2017

Вы также можете использовать .NET отражение, чтобы открыть браузер

В этом примере показано, как установить некоторые конкретные атрибуты InternetExplorer.Application

Например, мне нужно было иметь возможность отключить адресную строку и установить высоту и ширину. IE и другие средства безопасности браузера не позволяют отключать адресную строку в других примерах

Наш сайт является внутренним приложением MVC и работает без проблем.

System.Type oType = System.Type.GetTypeFromProgID("InternetExplorer.Application");
object IE = System.Activator.CreateInstance(oType);

IE.GetType().InvokeMember("menubar", System.Reflection.BindingFlags.SetProperty, null, IE, new object[] { 0 });
IE.GetType().InvokeMember("toolbar", System.Reflection.BindingFlags.SetProperty, null, IE, new object[] { 0 });
IE.GetType().InvokeMember("statusBar", System.Reflection.BindingFlags.SetProperty, null, IE, new object[] { 0 });
IE.GetType().InvokeMember("addressbar", System.Reflection.BindingFlags.SetProperty, null, IE, new object[] { 0 });
IE.GetType().InvokeMember("Visible", System.Reflection.BindingFlags.SetProperty, null, IE, new object[] { true });
IE.GetType().InvokeMember("Height", System.Reflection.BindingFlags.SetProperty, null, IE, new object[] { 680 });
IE.GetType().InvokeMember("Width", System.Reflection.BindingFlags.SetProperty, null, IE, new object[] { 1030 });
IE.GetType().InvokeMember("Navigate", System.Reflection.BindingFlags.InvokeMethod, null, IE, new object[] { "http://yoursite" });

Единственный недостаток в том, что это открытие IE. Плюс в том, что он дает вам больше контроля над браузером.

У вас также есть доступ к событиям, методам и свойствам объекта InternetExplorer.Application.

https://msdn.microsoft.com/en-us/library/aa752084(v=vs.85).aspx

Надеюсь, это поможет кому-то другому, как и мне.

Я работаю над привязкой к событиям и обновлю это после тестирования.

1 голос
/ 04 июля 2010

Вы можете просто запустить процесс, отправив URL-адрес в Process.Start в качестве параметра. Существует проблема при вызове StartProcess из потока графического интерфейса WebForms из-за контекста синхронизации. Мое решение использует пул потоков для этой цели. Преимущество этого решения заключается в том, что URL открывается в предпочитаемом пользователем веб-браузере , который может быть IE, Firefox и т. Д.

[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming",
  "CA1725:ParameterNamesShouldMatchBaseDeclaration", MessageId = "0#"),
 System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1031:DoNotCatchGeneralExceptionTypes")]
public void OpenUrl(string urlString)
{
  try
  {
    ThreadPool.QueueUserWorkItem(delegate { StartProcess(urlString, null); });
  }
  catch (Exception ex)
  {
    log.Error("Exception during opening Url (thread staring): ", ex);
    //do nothing
  }
}

[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1031:DoNotCatchGeneralExceptionTypes")]
public void StartProcess(string processName, string arguments)
{
  try
  {
    Process process = new Process();
    process.StartInfo.FileName = processName;
    if (!string.IsNullOrEmpty(arguments))
    {
      process.StartInfo.Arguments = arguments;
    }
    process.StartInfo.CreateNoWindow = false;
    process.StartInfo.UseShellExecute = true;
    process.Start();
  }
  catch (Exception ex)
  {
    log.ErrorFormat("Exception in StartProcess: process: [{0}], argument:[{1}], exception:{2}"
                    , processName, arguments, ex);
  }
}
0 голосов
/ 10 ноября 2009

На самом деле, вы можете использовать process.start с данными строки запроса:

System.Diagnostics.Process.Start("IExplore.exe", "http://localhost/file.html?foo=bar&baz=duh");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...