[英]how do i keep a specific window of another program from stealing focus (C# ?)
[英]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.