如何在控制台应用程序C#和Internet Explorer之间进行通信

时间:2015-07-07 09:02:30

标签: c# internet-explorer console

我想要实现的目标:

我想在控制台应用和Internet Explorer之间进行交互。我正在启动OAuth工作流程,该工作流程将用户名和密码作为输入,并检索具有访问令牌和访问密钥的回调URL。我可以使用Windows窗体中的Web浏览器控件实现相同的功能,该控件具有oauthBrowser_Navigated事件触发器。

我尝试了什么:

我尝试在桌面应用程序中使用Web浏览器控件来实现结果。我附上参考逻辑

    private void oauthBrowser_Navigated(object sender, WebBrowserNavigatedEventArgs e)
    {
        if (e.Url.Host == "www.example.com")
        {
            NameValueCollection query = HttpUtility.ParseQueryString(e.Url.Query);
            _oauthVerifier = query["oauth_verifier"];
            _ippRealmOAuthProfile.realmId = query["realmId"];
            _ippRealmOAuthProfile.dataSource = query["dataSource"];
            _caughtCallback = true;
            oauthBrowser.Navigate("about:blank");
        }
        else if (_caughtCallback)
        {
            IToken accessToken = exchangeRequestTokenForAccessToken(_consumerKey, _consumerSecret, _requestToken);
            _ippRealmOAuthProfile.accessToken = accessToken.Token;
            _ippRealmOAuthProfile.accessSecret = accessToken.TokenSecret;
            _ippRealmOAuthProfile.expirationDateTime = DateTime.Now.AddMonths(6);
            this.DialogResult = DialogResult.OK;
            this.Close();
        }
    }

解释

每次导航都会发生,即触发导航事件,您可以在其中检查URL属性

我在Console中尝试过的内容:

    private void WinSys(string url)
    {
        try
        {
            var IE = new SHDocVw.InternetExplorer();
            object URL = url;
            IE.ToolBar = 0;
            IE.StatusBar = false;
            IE.MenuBar = false;
            IE.Width = 622;
            IE.Height = 582;
            IE.Visible = true;
            IE.Navigate2(url, null, null, null, null);
            while (IE.ReadyState != SHDocVw.tagREADYSTATE.READYSTATE_COMPLETE)
            {
                if (IE.ReadyState == SHDocVw.tagREADYSTATE.READYSTATE_COMPLETE)
                {
                    IE.NavigateComplete2 +=IE_NavigateComplete2;
                    Console.WriteLine("Loaded");
                    System.Threading.Thread.Sleep(5000);
                }
            }
        }
        catch (Exception)
        {

            throw;
        }
    }

我试图在IE更改控制台应用程序中的URL时触发导航事件。我不应该放弃我在控制台应用程序中的控制权,因为它完成了执行,并且不等待与Internet Explorer导航事件属性的交互。

0 个答案:

没有答案