当我们激活它时,为什么Word没有出现?

问题描述:

我们WinForms应用程序与MS Word相互作用,我们生成一个文档时,运行这段代码,我们要显示在Word中我们的应用程序的前面:当我们激活它时,为什么Word没有出现?

[setup w as a Word interop object] 

w.Visible = True 
w.Activate() 

在推出运行Office 2007 XP机器这按预期工作。

On 运行Office 2010的Win7机器该文档加载在我们的应用程序后面并闪烁在任务栏上。

任何想法?

+2

我有同样的问题,并通过谷歌做了一些研究后,得出这样的事实,这是从版本7以来Windows的缩进行为。这是某种安全机制,以防止其他应用程序干扰您的工作。一个应用程序(您希望与word进行互操作的程序)不能更改未在同一进程中运行的其他应用程序的z顺序。 我无法贴上有关此事的官方信息的网址 - 我只记得我在网上发现了一些此前的... – 2015-07-24 09:17:50

最近我偶然发现了一个类似的问题。我的.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); 
    } 
} 
+0

+1良好的解决方法! – 2011-02-10 23:44:12

与Word 2002从XP转换应用& 3赢时通有同样的问题7在Word 2010中打开。找到您打开的第一个文档的以下作品,然后在任务栏中闪烁任何新文档。

打开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中赢得了solitare的游戏...

我不是专家,但我遇到了同样的问题,并找到了我的方式。我无法得到任何其他解决方案的工作,但我只是找到了一个答案,在这里我的问题......

http://david.gardiner.net.au/2010/05/bad-old-days-of-vba-and-opening-word.html

我只是在粗斜体添加一行如下(行)到我的代码和Word文档中的Excel前面开辟了Win 7的计算机上运行的Office 2010:

昏暗wordApplication

设置wordApplication =的CreateObject( “Word.Application”)

Application.ActivateMicrosoftApp xlMicrosoftWord

更多关于为什么这个工作在上面的链接信息。

w.Visible =真 w.Activate()

对我的作品罚款!

查看其他原因。

例如

Dim oWord As Microsoft.Office.Interop.Word.Application = New  Microsoft.Office.Interop.Word.Application 
Dim oDoc As Microsoft.Office.Interop.Word.Document = oWord.Documents.Open(Path) 
Dim range As Microsoft.Office.Interop.Word.Range = oDoc.Range 
range.Find.Execute("[NUM]", False, False, , , , , , , _NUM_, 2, False,) 
oWord.Visible = True 
oWord.Activate() 

文献涉及到前面。