9
votes

Comment ouvrir IE avec des informations postales dans C #?

Je développe un petit programme qui sous forme de formulaire Windows. Sur ce formulaire, je veux mettre un lien, et lorsque l'utilisateur clique sur le lien, un navigateur SEPérer IE sera ouvert avec les données de poste.

original, j'ai utilisé system.diagnostics.process.start () . Cependant, je ne peux pas publier de données via ce type d'appel.

Et j'ai cherché sur le Web, un gars a suggéré d'utiliser "Microsoft Web Browser Control", cependant, il est nécessaire d'ajouter ce contrôle dans mon formulaire et d'afficher l'explorateur dans le formulaire, mais je veux une ouverture séparée d'ouverture. < / p>

et j'ai vu en VB il y a une méthode comme CreateObject ("Internetexplorer.application") , mais je ne peux pas trouver comment l'utiliser dans C #.

Alors, avez-vous des suggestions sur la manière de mettre en œuvre?


1 commentaires

Vous pouvez simplement utiliser la méthode de navigation de contrôle WebBrowser () et de le faire être complètement cachée dans votre formulaire.


6 Réponses :


13
votes

déposez un navigateur Web sur votre formulaire. Il devrait avoir un nom par défaut de "WebBrowser1" - vous pouvez changer cela si vous le souhaitez. Définissez la propriété "visible" sur "False". Double-cliquez sur la barre de titre du formulaire pour générer automatiquement un événement de charge dans le code.

appelez la méthode de navigation, qui a cette signature: xxx

comme ceci: xxx

Vous pouvez transmettre tout Des octets que vous voulez là-bas ... Encoding.default.getBytes () est juste un moyen rapide de passer une chaîne à travers.

L'astuce consiste à utiliser "_blank" pour le cadre cible.


2 commentaires

Je doute que vous puissiez dire qu'il est efficace d'intégrer un contrôle juste pour faire ce que processus.start () peut faire quand même?


C'est effectivement la meilleure réponse simple pour .NET. Plus la réponse "correcte" consiste à appeler CoCreateInstance sur le PROGID "InternetExExplorer.application", et après votre CCI, vous pouvez appeler l'interface .naviga2 et transmettre les données post. Mais cela va impliquer un tas de com / pinvoke goo que cette réponse évite parfaitement.



-3
votes

En réalité, vous pouvez utiliser Process.Start avec des données de chaîne de requête postées:

System.Diagnostics.Process.Start("IExplore.exe", "http://localhost/file.html?foo=bar&baz=duh");


1 commentaires

Qui effectue un get, pas un post



3
votes

Si vous faites un shellexecute avec un verbe d'ouverture sur l'URL, le navigateur Web par défaut sera généré et ouvrez le lien. Vous pouvez également invoquer Internet Explorer (à nouveau à l'aide de Shellexecute) avec l'URL ajoutée à la fin de la chaîne (la chaîne que vous utilisez pour Shellexecute ressemblerait à ceci:

System.Diagnostics.Process.Start(@"C:\Program Files\Internet Explorer\iexplore.exe", "http://www.google.com/search?q=bing");


1 commentaires

Est-ce qu'il y a une bownvoter aléatoire qui a déployé des choses à voter sans laisser une explication?



2
votes

Vous allez certainement avoir besoin d'utiliser processus.Start (ou utilisez un processeurfo) pour obtenir IE Démarger: comme ceci:

// Ouvrir à savoir à un fichier sur le bureau à la suite d'un clic sur un linklabel sur un WinForm P>

internal static string desktopPath = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory);

private void linkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
{
    System.Diagnostics.Process.Start("IExplore.exe", desktopPath + "\\someHTMLFile.htm");
}


1 commentaires

Par "post", il désigne la méthode postale pour soumettre des données à un serveur, dans http. Voir la section 9.5 Ici: w3.org/protocols/rfc2616/rfc2616-sec9.html . Le problème de YongMei est que la manière du processus de fonctionnement du processus.Start (URL) utilise la méthode GET (section 9.3) qui est moins sécurisée.



1
votes

Vous pouvez simplement commencer à traiter en envoyant une URL dans Process.Start comme paramètre. Il y a un problème lors de l'appelant StartProcess de WebForms GUI thread en raison du contexte de synchronisation. Ma solution utilise la piscine de thread à cette fin. L'avantage de cette solution est qu'une URL est ouverte dans le navigateur Web préféré préféré par l'utilisateur qui peut être c'est-à-dire, firefox, etc. xxx


0 commentaires

2
votes

Vous pouvez également utiliser la réflexion .NET pour ouvrir un navigateur

Cet exemple vous indique comment définir des attributs spécifiques de la touche InternetExExExplorer.Application P>

Par exemple, je devrais pouvoir éteindre la barre d'adresse et définir la hauteur et la largeur. IE et une autre sécurité du navigateur ne vous permet pas d'éteindre la barre d'adresse dans les autres exemples p>

Notre site est une application MVC interne et fonctionne sans problème. P>

System.Type oType = System.Type.GetTypeFromProgID("InternetExplorer.Application");
object IE = System.Activator.CreateInstance(oType);

IE.GetType().InvokeMember("menubar", System.Reflection.BindingFlags.SetProperty, null, IE, new object[] { 0 });
IE.GetType().InvokeMember("toolbar", System.Reflection.BindingFlags.SetProperty, null, IE, new object[] { 0 });
IE.GetType().InvokeMember("statusBar", System.Reflection.BindingFlags.SetProperty, null, IE, new object[] { 0 });
IE.GetType().InvokeMember("addressbar", System.Reflection.BindingFlags.SetProperty, null, IE, new object[] { 0 });
IE.GetType().InvokeMember("Visible", System.Reflection.BindingFlags.SetProperty, null, IE, new object[] { true });
IE.GetType().InvokeMember("Height", System.Reflection.BindingFlags.SetProperty, null, IE, new object[] { 680 });
IE.GetType().InvokeMember("Width", System.Reflection.BindingFlags.SetProperty, null, IE, new object[] { 1030 });
IE.GetType().InvokeMember("Navigate", System.Reflection.BindingFlags.InvokeMethod, null, IE, new object[] { "http://yoursite" });


0 commentaires