2010-11-23 34 views
1

J'essaie de définir un proxy pour uniquement l'instance actuelle d'un WebBrowserControl. La documentation est terrible mais je crois que si j'appelle le InternetSetOption de wininet.dll en passant le handle IntPtr au navigateur interne utilisé par le WebBrowserControl en tant que premier paramètre alors la méthode n'affectera que l'instance actuelle (et je peux définir un proxy en utilisant cette méthode http://msdn.microsoft.com/en-us/library/aa385114(v=VS.85).aspx). Toutefois, WebBrowserControl ne fournit aucun moyen d'accéder à ce handle. J'ai passé des heures à googler et chercher SO et il semble que ce serait très utile à un certain nombre de personnes, mais personne n'a encore compris!Récupère le handle AxleWebBrowser2 de WebBrowserControl à utiliser dans InternetSetOption, les problèmes COM avec System .__ ComObject

WebBrowserControl possède une propriété appelée AxIWebBrowser2 qui est l'objet COM pour lequel le handle est nécessaire. L'interface que MS utilise pour cela s'appelle UnsafeNativeMethods.IWebBrowser2 et possède une propriété appelée HWND dont je pense avoir besoin. Cependant, UnsafeNativeMethods.IWebBrowser2 est marqué internal. En utilisant la réflexion sur le WebBrowserControl, je peux obtenir la valeur de la propriété privée AxIWebBrowser2 mais le type apparaît comme System.__ComObject. Je ne peux pas convertir ce System.__ComObject en IWebBrowser2 parce que c'est interne à l'assemblage Windows.Forms.

Y at-il un moyen d'accéder à la propriété HWND de cet objet AxIWebBrowser2 en utilisant C#?

Répondre

0

Hwnd ne vous donnera pas ce que vous cherchez. C'est la poignée de la fenêtre du contrôle du navigateur. Ce que vous recherchez, c'est la poignée WinINet HINTERNET. Il n'y a aucun moyen d'accéder par programme à ce que je sache. Avez-vous essayé de définir l'option sur une base de processus et de transmettre IntPtr.Zero en tant que handle HINTERNET?

+0

Oui et ça marche. Mais comme vous l'avez dit, c'est sur l'ensemble du processus. Je dois être capable de générer plusieurs threads pour utiliser plusieurs proxys. Une alternative serait d'engendrer plusieurs processus qui utilisent chacun des proxies différents mais j'ai essayé de faire quelque chose de similaire et cela ne semblait pas fonctionner correctement - il semblait que le proxy était défini sur une base globale! – hackerhasid