簡體   English   中英

如何在插入圖像時防止Excel互操作竊取焦點

[英]How to keep Excel interop from stealing focus while inserting images

我正在使用Excel COM互操作程序將圖像(特別是EPS)插入電子表格中。 可以很好地插入圖像,但是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像它所屬的一樣保留在后台?

我懷疑這是由Microsoft許可的行為不當的組件引起的。

處理這種情況的唯一方法是攔截相應的低級Windows消息並使用Win32掛鈎阻止它

做到這一點最簡單的方法,並且相信我,這並不漂亮,是使用CBT掛鈎。 CBT代表“基於計算機的培訓”。 它是一項古老且幾乎過時的技術,旨在使人們可以創建監視應用程序的應用程序,這些應用程序可以監視您的工作並做出相應的響應。 唯一有益的是鈎住並阻止您無法訪問的代碼中的窗口激活。 您可以攔截HCBT_ACTIVATE代碼,並阻止激活窗口。

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

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

我不確定您的問題是否能得到很好的回答(我本來會發表評論,但顯然我還沒有足夠的聲譽),但是如果有幫助,我經常會禁用事件

xlApp.EnableEvents = False

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

祝好運!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM