2011-02-10 23 views
7

Nasza aplikacja winforms współdziała z MS Word i możemy uruchomić ten kod, gdy dokument jest generowany i chcemy pokazać go w programie Word przed naszej aplikacji:Dlaczego słowo "nie pojawia się" po uruchomieniu?

[setup w as a Word interop object] 

w.Visible = True 
w.Activate() 

Kiedy przewrócił się maszynach XP z systemem Office 2007 działa to zgodnie z przeznaczeniem.

Na Komputery Win7 z Office 2010 dokument ładuje się za naszą aplikację i miga na pasku zadań.

Wszelkie pomysły?

+2

Miałem ten sam problem i po przeprowadzeniu badań za pomocą google doszło do faktu, że jest to wcięte zachowanie systemu Windows od wersji 7. Jest to pewnego rodzaju mechanizm bezpieczeństwa, który zapobiega zakłócaniu pracy innych aplikacji. Jedna aplikacja (twój program, który chce współdziałać ze słowem) nie może zmienić kolejności z innych aplikacji, które nie są uruchomione w tym samym procesie. Nie mogę wkleić adresu URL z oficjalnymi informacjami na ten temat - po prostu pamiętam, że znalazłem to w sieci trochę wcześniej ... –

Odpowiedz

7

Natknąłem się ostatnio na podobny problem. Mój program .NET nazywał się aplikacją COM, ale na Win7 czasami nie pokazywał się na pasku zadań ani na pulpicie. Nie byłem w stanie wyśledzić przyczyny tego, ale napisałem następującą funkcję aby obejść problem:

[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 dobre obejście! –

2

miał ten sam problem podczas konwersji aplikacji z XP z programem Word 2002 & 3 do Win 7 z Word 2010. Znalazłeś następujące prace dla pierwszego otwieranego dokumentu, po czym wszystkie nowe dokumenty pojawiają się na pasku zadań migając.

Po otwarciu dokumentu tekstowego:

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

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

Strategia jest iść po okna, w którym wyświetlany jest dokument. Minimalizowanie i maksymalizowanie spowoduje przesunięcie okna dokumentu do przodu.

Możesz zrobić to samo z obiektem aplikacji (zgodnie z sugestią tutaj: http://www.access-programmers.co.uk/forums/showthread.php?t=173871 uwaga: maksymalizuj bez minimalizowania nie pomaga, jeśli okno jest zmaksymalizowane na początku), ale jeśli masz wiele otwartych dokumentów Worda, pomyślisz Wygrałem grę solitare w Windows ...

1

Nie jestem ekspertem, ale trafiłem na ten sam problem i znalazłem swoją drogę tutaj. Nie mogłem się którykolwiek z pozostałych rozwiązań do pracy, ale ja po prostu znaleźć odpowiedź na mój problem tutaj ...

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

Właśnie dodałem jedną linię w następujący sposób (w linii pogrubioną kursywą) do mojego kodu i Word docs otworzyło przed Excel na Win 7 maszyn z systemem Office 2010:

Dim wordApplication

zestaw wordApplication = CreateObject ("Word.Application")

Application.ActivateMicrosoftApp xlMicrosoftWord

Więcej informacji o tym, dlaczego to działa w linku powyżej.

0

w.Visible = True w.Activate()

pracuje dla mnie w porządku !!!

Zobacz inne powody.

np

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() 

Dokument przychodzi do przodu.

Powiązane problemy