0

ieを自動化しようとしています.これは、ieウィンドウをキャッチするための私のコードです

ProcessStartInfo psi = new ProcessStartInfo();
            psi.CreateNoWindow = false;
            psi.FileName = "IExplore.exe";
            psi.Arguments = "-nomerge about:blank ";
            psi.WindowStyle = ProcessWindowStyle.Normal;
            Process p = new Process();
            p.StartInfo = psi;

            if (p.Start())
            {
                int maxWait = 10000, wait = 0;
                while (!p.HasExited && (p.MainWindowHandle == IntPtr.Zero))
                {
                    wait += 10;
                    Thread.Sleep(10);
                    p.Refresh();

                    if (wait > maxWait) break;
                }

                wait = 0;
                while (!p.HasExited && (_IE == null))
                {
                    _IE = null;
                    ShellWindows m_IEFoundBrowsers = new ShellWindowsClass();//here i get exception
                    foreach (InternetExplorer Browser in m_IEFoundBrowsers)
                    {
                        if (Browser.HWND == (int)p.MainWindowHandle)
                        {
                            _IE = Browser;
                            break;
                        }
                    }

                    if ((_IE != null) || (wait > maxWait)) break;
                    else
                    {
                        wait += 10;
                        Thread.Sleep(10);
                    }
                }

                if (_IE != null)
                {
                    IE.Visible = true;
                    IE.DocumentComplete += new DWebBrowserEvents2_DocumentCompleteEventHandler(IE_DocumentComplete);
                }
                else
                {
                    Console.WriteLine("Problem opening IE!");
                }
            }

このコードは正常に動作しますが、remoteapp 経由でアプリケーションを起動しようとすると例外が発生します。理由は何らかのアクセスに関連していると思いますが、どうすればよいかわかりません。助けてください

4

1 に答える 1

1

最後に、上記の大きなコードを小さなコードに置き換えるだけで機能するようになりました

**

_IE = new InternetExplorer();
                IE.Visible = true;
                IE.DocumentComplete += new DWebBrowserEvents2_DocumentCompleteEventHandler(IE_DocumentComplete);
                var handle = GetConsoleWindow();
                ShowWindow(handle, SW_HIDE);

**

しかし、ここでも、自動化が失敗してスタックした場合に例外が発生し、残りのすべての自動化がこの例外をスローし始めます。その解決策は、失敗したインスタンスを閉じる必要があることです。つまり、タスクマネージャーからすべてが正常に機能します。

于 2014-01-10T10:20:16.547 に答える