0

我有一个用 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;  
        }  
     }  
}  

有关更完整的讨论,请参阅本文。

4

1 回答 1

1

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

于 2013-08-08T23:35:14.570 回答