Почему Слово не «выходит вперед», когда мы его активируем? - PullRequest
7 голосов
/ 10 февраля 2011

Наше приложение winforms взаимодействует с MS Word, и мы запускаем этот код при создании документа и хотим показать его в Word перед нашим приложением:

[setup w as a Word interop object]

w.Visible = True
w.Activate()

При развертывании до На машинах XP с Office 2007 это работает, как задумано.

На машинах Win7 с Office 2010 документ загружается позади нашего приложения и мигает на панели задач.

Любойидеи?

Ответы [ 4 ]

7 голосов
/ 10 февраля 2011

Недавно я наткнулся на похожую проблему.Моя программа .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);
    }
}
2 голосов
/ 09 марта 2013

Возникла такая же проблема при преобразовании приложения из XP с Word 2002 & 3 в Win 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 ...

1 голос
/ 27 января 2014

Я не эксперт, но столкнулся с той же проблемой и нашел свой путь здесь. Я не смог заставить работать другие решения, но я нашел здесь ответ на мою проблему ...

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

Я просто добавил одну строку следующим образом (строка в полужирный курсив ) в мой код и документы Word, открытые перед Excel на машинах Win 7 под управлением Office 2010: 1010 *

Dim wordApplication

Установить wordApplication = CreateObject ("Word.Application")

Приложение. АктивироватьMicrosoftApp xlMicrosoftWord

Подробнее о том, почему это работает, можно узнать по ссылке выше.

0 голосов
/ 30 апреля 2015

w.Visible = True 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()

Документ поступает на фронт.

...