すでに開いているInternet Explorerウィンドウに接続しようとしています。一旦接続されると、何らかの処理のためにIEウィンドウにいくつかのキーストローク(SendKeys経由)を送る必要があります。 SendKeysコマンドまで動作する以下のコードがあります。それは、 "グラフィックスデータベース"というタイトルのIEウィンドウを見つける。それがヒット "SendKeys.Send(" {TAB} ");"エラーが発生しました。 "未処理の例外 'System.NullReferenceException'が発生しました。"C#IE11オートメーション - IEウィンドウを開くために接続できない
その他の情報:NullReferenceExceptionエラーで次のようなエラーが発生します。変わったことは、新しいIEウィンドウを開いて、それがうまく動作するSendKeysを使用するようにコーディングする場合です。既存のウィンドウに接続するとこの問題が発生するようです。
SendKeysは、アプリケーションがWindowsメッセージを処理していないため、このアプリケーション内で実行できません。メッセージを処理するようにアプリケーションを変更するか、SendKeys.SendWaitメソッドを使用します。
誰でもこの問題を解決するにはどうすればいいですか?
アンディ
InternetExplorer IE = null;
// Get all browser objects
ShellWindows allBrowsers = new ShellWindows();
if (allBrowsers.Count == 0)
{
throw new Exception("Cannot find IE");
}
// Attach to IE program process
foreach (InternetExplorer browser in allBrowsers)
{
if (browser.LocationName == "Graphics Database")
{
MessageBox.Show ("Found IE browser '" + browser.LocationName + "'");
IE = (InternetExplorer)browser;
}
}
IE.Visible = true;
System.Threading.Thread.Sleep(2000);
SendKeys.Send("{TAB}");
SendKeys.Send("G1007");
SendKeys.Send("{ENTER}");
スタックトレースまたは.... – hoodaticus
私は、** IE.Visible = true; **が機能していないことを発見しました。 IE.Visible = trueの前と後にMessageBoxでコードを一時停止し、Graphics Databaseウィンドウを手動でクリックしてアクティブにし、前面に表示すると、次のコードは期待通りに機能します。 – Andy
この問題を解決できました。 IE.Visible = trueにすることは決してできませんでした。これは私のコードでは何もないようでした。 SetForegroundWindow()を使用してフォーカスをIEウィンドウに設定する必要がありました。 – Andy