Как я могу закрыть браузер из XBAP?

Я использую приложение XBAP с полным доверием. Мне нужно закрыть браузер, в котором размещен XBAP, когда я нажимаю кнопку. Как я могу этого добиться? Application.Currenty.ShutDown() только закрывает приложение, оставляя браузер пустым.


person Arvind    schedule 31.08.2009    source источник
comment
+1, чтобы компенсировать несправедливый -1... хороший вопрос   -  person Thomas Levesque    schedule 31.08.2009


Ответы (3)


EDIT: Моя ошибка, вот ветка с вашей проблемой - http://social.msdn.microsoft.com/forums/en-US/wpf/thread/21c88fed-c84c-47c1-9012-7c76972e8c1c

и, чтобы быть более конкретным (для этого кода требуются настройки безопасности полное доверие)

using System.Windows.Interop;
using System.Runtime.InteropServices;

[DllImport("user32", ExactSpelling = true, CharSet = CharSet.Auto)]
private static extern IntPtr GetAncestor(IntPtr hwnd, int flags);

[DllImport("user32", CharSet = CharSet.Auto)]
private static extern bool PostMessage(IntPtr hwnd, int msg, IntPtr wparam, IntPtr lparam);

private void button1_Click(object sender, RoutedEventArgs e)
{
       WindowInteropHelper wih = new WindowInteropHelper(Application.Current.MainWindow);
       IntPtr ieHwnd = GetAncestor(wih.Handle, 2);
       PostMessage(ieHwnd, 0x10, IntPtr.Zero, IntPtr.Zero);      
}
person Svetlozar Angelov    schedule 31.08.2009
comment
Мне не удалось найти HtmlPage в проекте xbap, я попытался обратиться к пространству имен system.windows.browser, но не смог его найти. - person Arvind; 31.08.2009
comment
Это звучит более полезно: мой коллега должен предотвратить запуск нескольких экземпляров приложения XBAP. Закрытие неисправного нового экземпляра этим методом спасло ему жизнь :) Спасибо. - person Larry; 10.09.2009

Я знаю, что это действительно старый вопрос, но если у кого-то возникнет эта проблема, вот более простое решение, которое закроет только одну вкладку.

Environment.Exit(0);

Источник: форумы Microsoft

person Dan    schedule 23.05.2012

Это здорово!, однако он также закрывает весь IE, включая все открытые вкладки.

Вы не поверите этому, но если вы также выполните Application.Current.Shutdown(): после того, как выше, он прервет полное завершение работы IE и просто закроет вкладку приложений.

 private void exitButton_Click(object sender, RoutedEventArgs e)
        {
            // This will Shut entire IE down
            WindowInteropHelper wih = new WindowInteropHelper(Application.Current.MainWindow);
            IntPtr ieHwnd = GetAncestor(wih.Handle, 2);
            PostMessage(ieHwnd, 0x10, IntPtr.Zero, IntPtr.Zero);       

            // Singularly will just shutdown single tab and leave white screen, however with above aborts the total IE shutdown
            // and just shuts the current tab
            Application.Current.Shutdown();
        }
person PrimeTSS    schedule 27.06.2010