2009-04-24 19 views
2

ExcelのCOM相互運用機能を使用して、画像(特にEPS)をスプレッドシートに挿入しています。イメージは正常に挿入されますが、Excelはすべての可視/背景設定を無視し、フォーカスを奪います。「イメージのインポート」などのダイアログボックスが表示されます。ダイアログボックスはセクションの一部しか残っていませんが、画面がちらつくようになり、さらに多くの画像を一度に挿入すると、数秒間システムを独占できます(フォアグラウンドプロセスからキーストロークを盗むなど)。画像を挿入中にExcel interopがフォーカスを奪うのを防ぐ方法

次のように私は、バックグラウンドのオプションを設定しています:

Excel.Application xlApp = new Excel.Application(); 
xlApp.Visible = false; 
xlApp.ScreenUpdating = false; 
xlApp.DisplayAlerts = false; 
Excel.Worksheet worksheet; 
//.... 
worksheet.Pictures(Type.Missing).Insert(filename,Type.Missing); //steals focus 

私はそれが属するようにExcelがここにバックグラウンドで滞在して取得できますか?

+2

マイクロソフトがライセンスを取得した不正なコンポーネントのようです。 –

答えて

3

これは、マイクロソフトがライセンスしているコンポーネントがひどく動作していることが原因であると考えられます。

このような状況に対処する唯一の方法は、適切な低レベルのWindowsのメッセージを傍受し、これを実行する最も簡単な方法Win32 hook

を使用して、それを阻止することです、そして、私を信じて、それはかなりではない、ありますCBTフックを使用する。 CBTは「コンピュータベースのトレーニング」の略です。これは古くて陳腐化した技術で、自分が行っていることを見てそれに応じて対応するトレーニングアプリを作成することを可能にすることを目的としています。それ以上のことで良いことは、アクセス権のないコードでフックしてウィンドウのアクティブ化を防ぐことだけです。 HCBT_ACTIVATEコードを傍受して、ウィンドウがアクティブにならないようにすることができます。

これはおそらくCまたはC++で行う必要があります。

0

私はあなたの質問に良い答えがある(私はコメントを残してしまったが、明らかに十分な評判がない)が、役に立つと思われる場合は、イベントを無効にすることが多い。

コード内のExcelイベントに頼っているときに、この設定に注意を払う必要があることは明らかですが、挿入中に望ましくないイベントが発生した場合に役立ちます。

幸運を祈る!

1

常識とは逆に、xlApp.ScreenUpdating = true;を設定すると、フォーカススチールが防止されます。 (source

関連する問題