2009-04-24 32 views
2

我正在使用Excel COM互操作將圖像(特別是EPS)插入到電子表格中。圖像插入正常,但Excel忽略所有可見/背景設置並竊取焦點顯示一個對話框,如「導入圖像」。對話框只保留一小段,但它會使屏幕閃爍,更糟糕的是,當我一次插入許多圖像時,它可能壟斷系統幾秒鐘(包括從前臺進程中竊取鍵擊)。如何在插入圖像時保持Excel互操作性以防偷竊

我設置的背景選項如下:

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

它確實聽起來像是微軟許可的行爲不當組件。 – 2009-05-01 03:10:44

回答

3

我懷疑這是由Microsoft許可的行爲不當的組件導致的。

應對這樣的情況的唯一方法是通過截取適當的低級別的Windows消息並使用Win32 hook

最簡單的方法來做到這一點阻止,相信我,這不是很漂亮,使用CBT鉤子。 CBT代表「基於計算機的培訓」。這是一種古老而近乎過時的技術,旨在創建培訓應用程序,以觀察您正在做的事情並作出相應的反應。唯一有用的是鉤住並阻止您無法訪問的代碼中的窗口激活。您可以攔截HCBT_ACTIVATE代碼並阻止激活窗口。

這可能需要在C或C++中完成。

0

我不確定我對你的問題有一個很好的回答(我會留下評論,但顯然我沒有足夠的聲望),但如果它有幫助,我也經常會禁用事件

xlApp.EnableEvents = False 

顯然,當您在代碼中依賴Excel事件時,必須對此設置保持敏感,但爲防止在插入時觸發不需要的事件,這可能會有所幫助。

祝你好運!

1

與常識相反,設置xlApp.ScreenUpdating = true;可防止焦點竊取! (source