2016-04-12 8 views
0

Ich habe diese Methode verwendet ich online gefunden, die eine Uri nehmen wird dann überprüfen, ob die URI in einem IE-Browser geöffnet ist, wenn es geöffnet wird verhindert das Öffnen neuer Registerkarte oder Instanz der gleichen Website, wenn nicht eine neue IE Tab öffnet, die für groß ist, was ich für die Methode suchen, ist unten:Wie kann ich zu einem beliebigen Zeitpunkt nur eine Instanz von Internet Explorer zulassen?

public static void LaunchSite(Uri sitUrl) 
{ 

    SHDocVw.ShellWindows w = new SHDocVw.ShellWindows(); 
    bool found = false; 
    foreach (SHDocVw.ShellBrowserWindow item in w) 
    { 
     var doc = item.LocationURL; 
     if (!string.IsNullOrEmpty(doc)) 
      if (doc == sitUrl.AbsoluteUri) 
      { 
       found = true; 
       break; 
      } 
    } 
    if (!found) 
     Process.Start(sitUrl.AbsoluteUri); 
} 

dann das Verfahren in einem button_click Ereignishandler wie folgt verwendet:

private void btnSubs_Click(object sender, RoutedEventArgs e) 
{ 

    Uri oxfArt = new Uri(@"http://www.somesite.com/subscriber/"); 
    StartProcess.LaunchSite(oxfArt); 

} 

meine Fragen sind:

  1. innerhalb der Methode wie kann ich überprüfen, ob es bereits eine Instanz von IE geöffnet ist, wenn ich die Website innerhalb dieses IE-Fensters nicht als neue Registerkarte oder neue IE-Instanz öffnen muss, im Grunde muss ich in der Lage zu haben eine Instanz und ein Fenster aller meiner Seiten, die im aktuellen Fenster geöffnet werden sollen ?.
    1. innerhalb der Schaltfläche Ereignishandler ich brauche switch-Anweisung zu verwenden, die unterschiedliche URI verwendet mir andere Schaltfläche Event-Handler für jeden URI Erstellen zu speichern, Wie würde ich das erreichen in der Lage

Antwort

0
  1. ich brauche eine Instanz und ein Fenster aller meine Seiten haben, um im aktuellen Fenster geöffnet werden?

    Process[] pname = Process.GetProcessesByName("iexplore"); 
    if (pname.Length == 0) 
    { 
        Process.Start("IEXPLORE.EXE", "http://www.somesite.com/subscriber/");   
    } 
    else 
    { 
        try 
        { 
         foreach (Process proc in Process.GetProcessesByName("iexplore")) 
         { 
          proc.Kill(); 
         } 
        } 
        catch (Exception ex) 
        { 
         MessageBox.Show(ex.Message); 
        } 
    } 
    
    1. Innerhalb der Schaltfläche Ereignishandler ich brauche switch-Anweisung zu verwenden, die unterschiedliche URI verwendet mir andere Schaltfläche Event-Handler für jeden URI Erstellen zu speichern, Wie würde ich in der Lage sein, zu erreichen, dass

Wie ich das richtig verstanden, Sie verschiedene Button-Handler aufrufen möchten. Sie können es mit switch Anweisung tun. Zum Beispiel:

string input="http://getyourURI.com"; //you should set your own http address. 
             //It is just an example 
Uri uri = new Uri(input);  
string address = uri.OriginalString; 
switch(address) 
{ 
    case "hey.com": 
     btnExcel_Click(null, null); 
     break; 
    case "another.com": 
     callAnotherBtn_Click(null, null); 
     break; 
} 
+0

i Code in separaten Verfahren versucht haben, zu testen, aber es eröffnet neue Instanzen des IE von der Website halten und IE nicht zu töten, ist das, was Ihre Methode tun sollten ? – Sudani

+0

'Uri uri = neuer Uri ("http://dotnepperls.com/");' dann setze Zeichenfolge auf den URI.OriginalString? Ist dies nicht der Fall immer auf "http://dotnepperls.com/" gesetzt. also egal wie viele Fälle in switch statement es immer an "http://dotnepperls.com/" gerichtet wird! korrigiere mich, wenn ich falsch liege. – Sudani

+0

@Sudani bitte, siehe meine aktualisierte Antwort – StepUp

1

Die Antwort auf meine zweite Frage hat 2 Option für Lösung:

Button btnSub = e.Source as Button; 
     if (btnSub != null) 
     { 
      Uri uri = new Uri((string)btnSub.Tag); 
      StartProcess.LaunchSite(uri); 
     } 

innerhalb der Event-Handler butonn klicken. dann in der Taste das Ereignis ausgelöst wir den Tag auf die gewünschten Uri wie folgt festlegen müssen:

<Button x:Name="theorytst" Cursor="Hand" Tag="http://theorytestpro.co.uk/"> 

die zweite Lösung, um die Switch-Anweisung mit der Taste x:Name und auf die Schaltfläche Tag-Eigenschaft wie vor dann zu verwenden ist gegossen button-Tag als Uri an die aufrufende Methode zu übergeben StartProcess.LaunchSite(uri);

switch (btnSub.Name) 
     { 

      case "oxfArt": 
       Uri uri = new Uri((string)btnSub.Tag); 
       StartProcess.LaunchSite(uri); 
       break; 
      case "theorytst": 
       Uri uri1 = new Uri((string)btnSub.Tag); 
       StartProcess.LaunchSite(uri1); 
       break; 
      default: 
       break; 
     } 
Verwandte Themen