2010-07-30 7 views
1

J'ai besoin d'ouvrir Firefox à partir de mon application de console, faire des choses avec elle, puis l'éteindre quelques minutes plus tard. J'utilise Process.Start ("firefox.exe", "myurl"); ouvrir Firefox, ce qui n'est pas un problème. Le problème est avec la fermeture. La fonction CloseMainWindow() fonctionne généralement, mais elle ne fonctionne pas si firefox a une fenêtre modale ouverte (comme une boîte de message «Échec du téléchargement»). Dans ce cas, je peux appeler Kill() sur le processus, mais cela semble sale.Programatically ouvrir et fermer firefox

De plus, si j'appelle Kill() sur le processus, la prochaine fois que firefox s'ouvrira, un onglet "restore de session" s'ouvrira, ce qui n'est pas cool. Je pourrais essayer de désactiver la fonctionnalité de restauration de session, qui contournerait ce problème. Cependant, je suis toujours préoccupé par le fait que tuer des ffx comme ça pourrait causer d'autres problèmes.

Est-ce que quelqu'un sait un bon moyen de faire cela? Est-ce le moyen le plus "propre" pour essayer et pinvoke pour obtenir le handle de fenêtre modale, fermez-le, puis réessayez CloseMainWindow()?

+5

Je ne peux pas penser à des problèmes considérables découlant de la destruction de Firefox. Au pire, vous pourriez endommager votre dossier de profil, mais c'est assez improbable. Je force tout le temps à tuer ce trou noir. –

+0

Je suis un peu à court de ce que vous faites par programme que vous avez besoin de Firefox ouvert? Les seules choses auxquelles je peux penser sont l'accès au Web et la modification du réglage FFX, dont aucune ne nécessite l'exécution de l'application. À moins que vous n'utilisiez FFX en tant qu'utilisateur, dans ce cas, pourquoi doit-il être fermé par votre application de console? –

+0

@Nathan: J'ai ri si fort @ votre dernière phrase là-bas. – Aren

Répondre

3

peut-être watin peut vous aider à

public void SearchForWatiNOnGoogle() 
{ 
    using (var browser = new Firefox("http://www.google.com")) 
    { 
     browser.TextField(Find.ByName("q")).TypeText("WatiN"); 
     browser.Button(Find.ByName("btnG")).Click(); 
     browser.Close(); 

    } 
    } 
+0

cool, je ne savais pas à ce sujet. – dan

+1

Je ne vois pas Firefox dans WatiN.Core; –

0

AutoIt a une bibliothèque COM appelé AutoItX qui peut vous aider facilement et traiter de manière fiable avec la manipulation de fenêtres d'autres processus, y compris les fermer ...

Il est Il s'agit principalement d'un langage de script, donc si vous n'êtes pas content d'utiliser COM à partir de .Net, vous pouvez aussi compiler un script AutoIt vers un EXE et l'exécuter à partir de votre application .Net.

http://www.autoitscript.com/

Questions connexes