2009-08-31 13 views
4

J'utilise une application XBAP en toute confiance. Je dois fermer le navigateur hébergeant le XBAP quand je clique sur un bouton. Comment puis-je atteindre cet objectif? Application.Currenty.ShutDown() ferme uniquement l'application, laissant le navigateur vide.Comment puis-je fermer le navigateur à partir d'un XBAP?

+1

+1 pour compenser la injuste -1 ... qui est une bonne question –

Répondre

3

EDIT: Mon erreur, voici un fil avec votre problème - http://social.msdn.microsoft.com/forums/en-US/wpf/thread/21c88fed-c84c-47c1-9012-7c76972e8c1c

et d'être plus précis (ce code doit pleine confiance les paramètres de sécurité)

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

je ne pouvais trouver HtmlPage dans le projet XBAP, tryed à refere espace de noms system.windows.browser Ne pas le trouver. – Arvind

+0

Merci Cela a fonctionné. – Arvind

+0

Il est plus utile que cela semble être: Un de mes collègues doit empêcher le lancement de plusieurs instances d'une application XBAP. Fermer la nouvelle instance défectueuse en utilisant cette méthode lui a sauvé la vie :) Merci. – Larry

1

C'est great !, mais il arrête également tout IE, y compris les onglets ouverts

Vous ne croirez pas cela sur e, mais si vous faites aussi un Application.Current.Shutdown(): après ci-dessus, il annule l'arrêt IE total et ferme simplement l'onglet applications.

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

Je sais que cela est une question très ancienne, mais au cas où quelqu'un a ce problème, voici une solution simple qui clôturera juste l'un onglet.

Environment.Exit(0); 

Source: Microsoft Forums

Questions connexes