如何使Internet Explorer ActiveX对话框可见

时间:2013-08-05 05:26:55

标签: c# internet-explorer activex

我有一个用C#编写的ActiveX控件,它使用WIA从浏览器操作扫描程序。一切正常,除了WIA CommonDialog在浏览器窗口下弹出。如何让它显示在浏览器之上?

wiaDialog = new WIA.CommonDialog();
wiaImage = wiaDialog.ShowAcquireImage(WiaDeviceType.ScannerDeviceType,  WiaImageIntent.UnspecifiedIntent, WiaImageBias.MaximizeQuality,                               wiaFormatJPEG, false, false, false);

[编辑]

非常感谢Noseratio让我走上正轨。在弹出对话框之前,通过计时器调用BringWindowToTop的建议并不常用。相反,要使用的函数是SetForegroundWindow。代码如下(在打开扫描对话框之前从System.Timer.Timer调用):

public static void scanDialogToTop(Object caller, EventArgs theArgs) {  
    scanner.theTimer.Stop();  
    foreach (Process p in Process.GetProcesses()) {  
        if (p.MainWindowTitle.StartsWith("Scan using")) {  
            SetForegroundWindow(p.MainWindowHandle);  
            break;  
        }  
     }  
}  

有关更完整的讨论,请参阅this article

1 个答案:

答案 0 :(得分:1)

看起来您不能为ShowAcquireImage指定父窗口。如果弹出窗口的标题是静态的,您可以使用FindWindow来查找弹出窗口的句柄。如果ShowAcquireImage是阻塞调用(在弹出窗口关闭之前不会返回),则在调用它之前,您需要设置一个计时器并在计时器事件时调用FindWindow。我还怀疑WIA弹出窗口是在另一个线程上创建的(你可以用Spy ++检查)。如果是这种情况,您可以使用following hack来重点关注WIA弹出窗口。否则你只需BringWindowToTop