2009-08-31 3 views
4

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

+1

+1, чтобы компенсировать несправедливую -1 ... это хороший вопрос –

ответ

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);  
} 
+0

я не смог найти HTMLPage в XBAP проекте, судимые в refere System.Windows.Browser имен не мог найти его. – Arvind

+0

Спасибо, Это сработало. – Arvind

+0

Это более полезно, чем звучит: коллеге мне нужно предотвратить запуск нескольких экземпляров приложения XBAP. Закрытие неисправного нового экземпляра с использованием этого метода спасло его жизнь :) Спасибо. – Larry

1

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

Ваш не поверит этому на e, но если вы также выполняете 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(); 
     } 
5

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

Environment.Exit(0); 

Источник: Microsoft Forums

Смежные вопросы