0

WIA を使用してブラウザーからスキャナーを操作する C# で記述された ActiveX コントロールがあります。ブラウザ ウィンドウの下に 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 に答える