2009-03-18 33 views
3

IEインスタンスをMSHTMLで制御する場合、非HTMLコンテンツのOpen/Saveダイアログを非表示にするには?Internet Explorerの自動化:開く/保存ダイアログを非表示にする方法?

別のシステムからデータを取得し、それを私たちのシステムにインポートする必要があります。予算制約のため、しばらくの間、開発(WSなど)を他の側で行うことはできないため、私の唯一の選択肢は、Web廃棄を行うことです。

リモートサイトはASP.NETベースなので、単純なHTMLリクエストは機能しません。JSが多すぎます。

IEインスタンスを制御するためにMSHTMLとSHDocViewを使用する単純なC#アプリケーションを作成しました。これまでのところとても良い:私はログインを実行し、目的のページに移動し、必須のフィールドにデータを入力し、送信することができます。

それから私は、問題のカップルに直面:

まず、レポートが別のウィンドウで開いているということです。システム内のIEウィンドウを列挙することによって、そのウィンドウにアタッチすることができると思われます。

第2に、レポート自体がCSVファイルであり、開く/保存ダイアログが表示されます。私はそれを避け、IEが指定された場所にファイルを保存するようにしたいと思います。または、プログラムでダイアログボタンをクリックしても問題ありません。(方法は?)

私は実際にはWindows以外の全員(unix/J2EE)より良い知識を持つ人が私にそのような仕事をする方法のヒントを与えることを願っています。

ありがとうございます!

UPDATEは

私はMSDNに有望な文書を見つけた:http://msdn.microsoft.com/en-ca/library/aa770041.aspx

コントロールダウンロードし、彼らがダウンロードされたら、Webブラウザーコントロールは、彼らとしているコンテンツの種類。たとえば、ユーザーがリンクをクリックしたり、Microsoft ActiveXコントロールのダウンロードや実行を妨げたりすると、ビデオの再生、スクリプトの実行、または新しいウィンドウが開かないようにすることができます。

はゆっくり

UPDATE 2 ...を読ん:MADE ITのWORK、SORT OF ...

は最後に、私はそれを動作作ったが、醜いやり方インチ基本的には、「ナビゲートする前に」ハンドラを登録し、ハンドラでURLがターゲットファイルと一致する場合はナビゲーションをキャンセルしますが、URLを覚えてWebClientクラスを使用してその一時URLに直接アクセスしてダウンロードします。

私はここにコード全体をコピーすることはできませんが、それはゴミの多くが含まれていますが、ここで重要な部分です:インストール

ハンドラ:

_IE2.FileDownload += new DWebBrowserEvents2_FileDownloadEventHandler(IE2_FileDownload); 
_IE.BeforeNavigate2 += new DWebBrowserEvents2_BeforeNavigate2EventHandler(IE_OnBeforeNavigate2); 

録画URL、その後キャンセルダウンロード(したがって、保存を防ぐには表示されるダイアログ):

:直接ダウンロードしたURLを使用して

public string downloadUrl; 

void IE_OnBeforeNavigate2(Object ob1, ref Object URL, ref Object Flags, ref Object Name, ref Object da, ref Object Head, ref bool Cancel) 
{ 
    Console.WriteLine("Before Navigate2 "+URL); 

    if (URL.ToString().EndsWith(".csv")) 
    { 
     Console.WriteLine("CSV file"); 
     downloadUrl = URL.ToString(); 
    } 

    Cancel = false; 
} 

void IE2_FileDownload(bool activeDocument, ref bool cancel) 
{ 
    Console.WriteLine("FileDownload, downloading "+downloadUrl+" instead"); 
    cancel = true; 
} 

    void IE_OnNewWindow2(ref Object o, ref bool cancel) 
    { 
     Console.WriteLine("OnNewWindow2"); 

     _IE2 = new SHDocVw.InternetExplorer(); 
     _IE2.BeforeNavigate2 += new DWebBrowserEvents2_BeforeNavigate2EventHandler(IE_OnBeforeNavigate2); 
     _IE2.Visible = true; 
     o = _IE2; 

     _IE2.FileDownload += new DWebBrowserEvents2_FileDownloadEventHandler(IE2_FileDownload); 

     _IE2.Silent = true; 

     cancel = false; 
     return; 
    } 

そして、呼び出し元のコードで3210

 ... 
     driver.ClickButton(".*_btnRunReport"); 
     driver.WaitForComplete(); 

     Thread.Sleep(10000); 

     WebClient Client = new WebClient(); 
     Client.DownloadFile(driver.downloadUrl, "C:\\affinity.dump"); 

(ドライバがIEのインスタンス= _IE以上の単純なラッパーである)誰かを助け

希望。

答えて

0

これを行う最も簡単な方法は、ダウンロードするシステム上のCSVファイルのMIMEタイプを調整することです。 IEは.CSVファイルに関連付けられたアクションのためにファイルをダウンロードしようとしています。

Windowsエクスプローラでこれをツール - フォルダオプション - ファイルタイプに変更することができます。 CSVファイルをInternet Explorerに関連付けると、CSVファイルがIEで開きます。その時点で、現在の開いている文書をファイルに保存するためにIEオートメーションを使用できるはずです。

+0

リモートシステムを変更することはできません。プロセスの期間中、IEのプリファレンスをプログラムで変更することはできますか(ユーザー設定には影響しません)。 –

+0

リモートシステムを変更する必要はありません。スクレイピングを実行しているシステムでMIMEタイプsettnigsを変更する必要があります。 –

+0

申し訳ありませんが、最初の声明を誤解しました。それでも、アプリ内からIEの設定を変更するにはどうすればよいですか?私はユーザ(BA)がかなり多くのレポートをダウンロードし、それらのうちのいくつかがCSVになっているので、それらを永久に変更したくありません。 –

0

エンドユーザーが特定のコンテンツタイプのファイルを常に開くようにブラウザを設定できるため、ブラウザの動作を完全に制御することはできません。

関連する問題