7

私たちの winforms アプリケーションは MS Word と対話し、ドキュメントが生成され、アプリケーションの前に Word で表示したいときにこのコードを実行します。

[setup w as a Word interop object]

w.Visible = True
w.Activate()

Office 2007 を実行している XP マシンにロールアウトすると、これは意図したとおりに機能します。

Office 2010を実行している Win7 マシンでは、ドキュメントがアプリケーションの背後に読み込まれ、タスク バーで点滅します。

何か案は?

4

5 に答える 5

7

最近、同様の問題に出くわしました。私の .NET プログラムは COM アプリケーションを呼び出しましたが、Win7 ではタスクバーにもデスクトップにもまったく表示されないことがありました。この原因を突き止めることはできませんでしたが、問題を回避するために次の関数を作成しました。

[System.Runtime.InteropServices.DllImport("User32.dll")]
private static extern bool SetForegroundWindow(IntPtr hwnd);

private static void BringAppToFront() {
    foreach (var p in System.Diagnostics.Process.GetProcesses().Where(p => p.ProcessName == "COMInstanceName")) {
        if (p.MainWindowHandle.ToInt32() != 0)
            SetForegroundWindow(p.MainWindowHandle);
    }
}
于 2011-02-10T10:13:21.173 に答える
2

Word 2002&3 を使用する XP から Word 2010 を使用する Win 7 にアプリケーションを変換するときに同じ問題が発生しました。最初に開いたドキュメントに対して次の動作が見つかりました。その後、新しいドキュメントはタスク バーに点滅表示されます。

Word 文書を開いた後:

document.Activate();
mWordApplication.Activate();

foreach (Word.Window window in document.Windows)
{
    window.WindowState = Word.WdWindowState.wdWindowStateMinimize;
    window.WindowState = Word.WdWindowState.wdWindowStateMaximize;
}

戦略は、ドキュメントが表示されているウィンドウを追跡することです。最小化および最大化すると、ドキュメントのウィンドウが前面に表示されます。

アプリケーションオブジェクトでも同じことができます(ここで提案されているようにhttp://www.access-programmers.co.uk/forums/showthread.php?t=173871注:ウィンドウが最大化されている場合、最小化せずに最大化しても役に立ちません最初に)、しかし、多くの Word ドキュメントを開いている場合は、Windows でのソリティア ゲームに勝ったと思うでしょう...

于 2013-03-08T23:15:36.797 に答える