C #: откройте браузер и отправьте ссылку на URL-адрес из приложения для рабочего стола Windows - PullRequest
8 голосов
/ 14 декабря 2009

У меня есть небольшое приложение WPF (хотя я думаю, что на самом деле не имеет значения, является ли это формой wpf или приложением веб-формы?), Я хочу запустить новое окно браузера и POST по определенному URL. Я возился с:

System.Diagnostics.Process.Start("http://myurl.com");

, чтобы запустить окно, но я не думаю, что смогу использовать тот же процесс для фактической публикации в URL ... Я также экспериментировал с HttpWebRequest, но хотел бы, чтобы пользователь мог использовать приложение после того, как я опубликовал этот URL, а не просто показал им результаты ... Что я могу посмотреть, чтобы сделать что-то подобное?

Ответы [ 4 ]

11 голосов
/ 14 декабря 2009

Нет прямого способа сделать это. Что вы можете сделать, это сгенерировать HTML-страницу с формой, заполненной данными, которые вы хотите опубликовать, и небольшим количеством JavaScript, чтобы автоматически опубликовать страницу при ее загрузке. Тогда вам просто нужно открыть эту страницу в браузере ...

Сгенерированный HTML может выглядеть так:

<html>
<head>
<script language="Javascript">
function submitForm() {
    var theForm = document.getElementById("theForm");
    theForm.submit();
}
</script>
</head>
<body onload="submitForm()">
<form id="theForm" action="http://myurl.com" method="POST">
    <input type="text" name="username" value="myusername"/>
    <input type="password" name="password" value="mypassword"/>
</form>
</body>
</html>

Если страница должна отображаться в вашем приложении, загрузите ее в WebBrowser control

5 голосов
/ 14 декабря 2009

Используйте взамен WebBrowser Class .

3 голосов
/ 15 декабря 2009

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

  1. Придерживайтесь оригинального подхода
  2. Внедрите контроль веб-браузера в свое приложение, как это предлагается в других ответах
  3. Делать все программно "за сценой"

Для # 3 вы можете посмотреть здесь: http://geekswithblogs.net/rakker/archive/2006/04/21/76044.aspx

Если вы хотите использовать # 1 - это сложнее, так как вам нужно управлять внешним приложением, а разные браузеры будут вести себя по-разному.

Я использовал протокол «javascript:» и приведенный ниже код с IE в качестве браузера по умолчанию при работе с одним «недружественным пользователю» приложением. Обратите внимание, что это не «готовый к использованию» код. Обработка ошибок отсутствует, пользователь может сместить фокус с запущенного браузера или использовать браузер без поддержки протокола «javascript:» и т. Д.

static void Main()
{
    Settings s = Settings.Default;
    Process.Start(s.URL1);
    Thread.Sleep(s.Delay1);
    SendKeys.SendWait("%D");
    Thread.Sleep(100);
    SendKeys.SendWait(EncodeForSendKey(s.URL2));
    SendKeys.SendWait("{ENTER}");
}

public static string EncodeForSendKey(string value)
{
    StringBuilder sb = new StringBuilder(value);
    sb.Replace("{", "{{}");
    sb.Replace("}", "{}}");
    sb.Replace("{{{}}", "{{}");
    sb.Replace("[", "{[}");
    sb.Replace("]", "{]}");
    sb.Replace("(", "{(}");
    sb.Replace(")", "{)}");
    sb.Replace("+", "{+}");
    sb.Replace("^", "{^}");
    sb.Replace("%", "{%}");
    sb.Replace("~", "{~}");
    return sb.ToString();
}
  • URL1: http://www.google.com
  • URL2: javascript: function x () {document.all.q.value = 'stackoverflow'; document.forms [0] .submit ();} x ();
3 голосов
/ 15 декабря 2009

Вы можете создать скрытый элемент управления WebBrowser и выполнить Navigate() (используя перегрузку, позволяющую указать метод запроса). Вам нужно будет указать целевой кадр "_blank", чтобы навигация происходила в новом окне браузера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...