none
Браузеры

    Question

  • Еще один вопрос по этой теме,

    все мы знаем этот код WebBrowser1.Document.Body.InnerHtml = TextBox1.Text, можно как то сделать так чтобы страница открывался не в программе, а в браузерах?( в зависимости какой браузер выбрит пользователь) 

    Saturday, February 12, 2011 2:18 PM

Answers

  • Вам нужно, чтобы некоторый HTML-код был открыт во внешнем браузере?

    Если это браузер по умолчанию, то сделать это несложно: нужно сохранить этот код в файле с расширением html на диск (во временную директорию: Path.GetTempPath ), а затем запустить новый процесс, указав в качестве запускаемого файла путь к созданному файлу: Process.Start . Если Вам нужно получить список установленных в системе браузеров, можно посмотреть, какие приложения связаны со схемой http и получить пути к их исполняемым файлам. После этого достаточно будет запустить этот файл (так же, посредством Process.Start), а в качестве аргумента передать путь к сформированному html-файлу.

    PS. Если у Вас возникнут сложности с получением списка установленных браузеров, напишите об этом в вопросе — я приведу пример.

    Saturday, February 12, 2011 2:40 PM
  • Да, Вы можете написать этот код в любой части программы, где требуется получить список браузеров и пути к их исполняемым файлам.

    Сконвертировал код автоматически, при помощи утилиты конвертации из C# в VB.NET, поэтому проверьте, пожалуйста, синтаксис кода на корректность:

    Dim registryKey As String = "SOFTWARE\Clients\StartMenuInternet"
    Using key As Microsoft.Win32.RegistryKey = Microsoft.Win32.Registry.LocalMachine.OpenSubKey(registryKey)
    	Dim query = From appKey In key.GetSubKeyNames() Let appName = key.OpenSubKey(appKey).GetValue(Nothing) Let path = key.OpenSubKey(appKey).OpenSubKey("shell").OpenSubKey("open").OpenSubKey("command").GetValue(Nothing) New With { _
    		Key .AppName = appName, _
    		Key .Path = path _
    	}
    	For Each item As var In query
    		If item.AppName IsNot Nothing AndAlso item.Path IsNot Nothing Then
    			' здесь мы получили в item.AppName наименование текущего браузера и в item.Path — путь к исполняемому файлу текущего браузера
    		End If
    	Next
    End Using
    
    

    • Marked as answer by Program-s.g Saturday, February 12, 2011 4:21 PM
    Saturday, February 12, 2011 3:51 PM

All replies

  • Вам нужно, чтобы некоторый HTML-код был открыт во внешнем браузере?

    Если это браузер по умолчанию, то сделать это несложно: нужно сохранить этот код в файле с расширением html на диск (во временную директорию: Path.GetTempPath ), а затем запустить новый процесс, указав в качестве запускаемого файла путь к созданному файлу: Process.Start . Если Вам нужно получить список установленных в системе браузеров, можно посмотреть, какие приложения связаны со схемой http и получить пути к их исполняемым файлам. После этого достаточно будет запустить этот файл (так же, посредством Process.Start), а в качестве аргумента передать путь к сформированному html-файлу.

    PS. Если у Вас возникнут сложности с получением списка установленных браузеров, напишите об этом в вопросе — я приведу пример.

    Saturday, February 12, 2011 2:40 PM
  • Process.Start    а потом мы указываем путь к exe файлу, а что если пользователь установил браузер "в другом месте" как будет в этом случае?, если можно приведите пример как получить список браузеров, думаю в этом случае если программа будет знать какие браузеры есть , то и их "местонахождение" она будет знать, или это не так?  
    Saturday, February 12, 2011 2:46 PM
  • В случае с браузером по умолчанию мы указываем путь к html-файлу , а система сама запустит ассоциированное с этим типом файла приложение.

    Про определение браузеров, вот пример (надежнее все же получать список браузеров не по ассоциации со схемой http, а из списка клиентов, зарегистрированных в апплете "Программы по умолчанию"):

    using System;
    using System.Linq;
    
    namespace ConsoleApplication2
    {
      class Program
      {
        static void Main(string[] args)
        {
          string registryKey = @"SOFTWARE\Clients\StartMenuInternet";
          using (Microsoft.Win32.RegistryKey key = Microsoft.Win32.Registry.LocalMachine.OpenSubKey(registryKey))
          {
            var query = from appKey in key.GetSubKeyNames() let appName = key.OpenSubKey(appKey).GetValue(null) let path = key.OpenSubKey(appKey).OpenSubKey("shell").OpenSubKey("open").OpenSubKey("command").GetValue(null) select new { AppName = appName, Path = path };
            foreach (var item in query)
              if (item.AppName != null && item.Path != null)
                Console.WriteLine("{0}: {1}", item.AppName, item.Path);
          }
          Console.ReadKey();
        }
      }
    }

    Saturday, February 12, 2011 3:17 PM
  • Спасибо!!! но вот другой вопрос, это консольное приложение, а как его добавить свой проект (wpf)?  
    Saturday, February 12, 2011 3:22 PM
  • Скопируйте вот эту часть кода:

    string registryKey = @"SOFTWARE\Clients\StartMenuInternet";
    using (Microsoft.Win32.RegistryKey key = Microsoft.Win32.Registry.LocalMachine.OpenSubKey(registryKey))
    {
      var query = from appKey in key.GetSubKeyNames() let appName = key.OpenSubKey(appKey).GetValue(null) let path = key.OpenSubKey(appKey).OpenSubKey("shell").OpenSubKey("open").OpenSubKey("command").GetValue(null) select new { AppName = appName, Path = path };
      foreach (var item in query)
        if (item.AppName != null && item.Path != null)
          // здесь мы получили в item.AppName наименование текущего браузера и в item.Path — путь к исполняемому файлу текущего браузера
    }
    
    

    Saturday, February 12, 2011 3:29 PM
  • А можно этот код для VB? и еще я этот код должен написать для события Button_Click?
    Saturday, February 12, 2011 3:42 PM
  • Да, Вы можете написать этот код в любой части программы, где требуется получить список браузеров и пути к их исполняемым файлам.

    Сконвертировал код автоматически, при помощи утилиты конвертации из C# в VB.NET, поэтому проверьте, пожалуйста, синтаксис кода на корректность:

    Dim registryKey As String = "SOFTWARE\Clients\StartMenuInternet"
    Using key As Microsoft.Win32.RegistryKey = Microsoft.Win32.Registry.LocalMachine.OpenSubKey(registryKey)
    	Dim query = From appKey In key.GetSubKeyNames() Let appName = key.OpenSubKey(appKey).GetValue(Nothing) Let path = key.OpenSubKey(appKey).OpenSubKey("shell").OpenSubKey("open").OpenSubKey("command").GetValue(Nothing) New With { _
    		Key .AppName = appName, _
    		Key .Path = path _
    	}
    	For Each item As var In query
    		If item.AppName IsNot Nothing AndAlso item.Path IsNot Nothing Then
    			' здесь мы получили в item.AppName наименование текущего браузера и в item.Path — путь к исполняемому файлу текущего браузера
    		End If
    	Next
    End Using
    
    

    • Marked as answer by Program-s.g Saturday, February 12, 2011 4:21 PM
    Saturday, February 12, 2011 3:51 PM