繁体   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