Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Why doesn't Word "come to front" when we activate it?

Our winforms application interacts with MS Word and we run this code when a document is generated and we want to show it in Word in front of our application:

[setup w as a Word interop object]

w.Visible = True
w.Activate()

When rolled out to XP machines running Office 2007 this works as intended.

On Win7 machines running Office 2010 the document loads behind our application and flashes on the taskbar.

Any ideas?

like image 776
hawbsl Avatar asked Feb 10 '11 09:02

hawbsl


People also ask

Why is my Microsoft Word not showing words?

Check if text is formatted in the same color as the page background. Also, in case the text has inadvertently been formatted as hidden, try displaying hidden text as well as other nonprinting items by clicking the ¶ icon on the Home tab.

When Word is opened the Word Start screen will appear?

When you open Word for the first time, the Start Screen will appear. From here, you'll be able to create a new document, choose a template, and access your recently edited documents. From the Start Screen, locate and select Blank document to access the Word interface.

Why can't I launch Microsoft Word?

If Microsoft Word won't open you can try repairing the Office installation. Next, select the option 'Quick Repair' to repair your Office programs. Follow the instructions on the screen to complete the process. If Word won't open after the repair, repeat the steps and select the option 'Online Repair'.


3 Answers

I stumbled upon a similar problem recently. My .NET program called a COM application, but on Win7 it would sometimes neither show up in taskbar nor on the desktop at all. I wasn't really able to track down the cause of this, but I wrote the following function to work around the issue:

[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);
    }
}
like image 80
Christian Avatar answered Nov 09 '22 06:11

Christian


Had the same issue when converting an application from XP with Word 2002&3 to Win 7 with Word 2010. Found the following works for the first document you open, after that any new documents appear in the task bar blinking.

After opening the Word Document:

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

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

The strategy is to go after the Window in which the document is displayed. Minimizing and maximizing will bring the document's window to the front.

You can do the same with the application object (as suggested here http://www.access-programmers.co.uk/forums/showthread.php?t=173871 note: maximize without minimize doesn't help if the window is maximized to begin with), but if you have many Word documents open you'll think you've won a game of solitare in Windows...

like image 32
dchanko Avatar answered Nov 09 '22 04:11

dchanko


I'm no expert but I hit this same problem and found my way here. I couldn't get any of the other solutions to work but I just found an answer to my problem here...

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

I just added one line as follows (the line in bold italics) to my code and Word docs opened up in front of Excel on Win 7 machines running Office 2010:

Dim wordApplication

Set wordApplication = CreateObject("Word.Application")

Application.ActivateMicrosoftApp xlMicrosoftWord

More information on why this works at the link above.

like image 1
Paul_in_Tbilisi Avatar answered Nov 09 '22 05:11

Paul_in_Tbilisi