OLE Automation pour le lancement de MS Word et l'amener à l'avant

Ce qui est "correct" (recommandé) méthode pour se connecter à une instance en cours d'exécution de MS Word et de porter cette application sur le front? Je suis en train de faire quelque chose comme ce qui suit à partir d'une application VBA:

...
objWord = GetObject ("Word.Application")
if (objWord is nothing) then
  objWord = CreateObject("Word.Application")
end if
objWord.Activate()
objWord.Visible = true
objWord.WindowState = 1 'maximized
...

Exécuté sur Windows XP avec Word 2007, cela fonctionne la plupart du temps - mais périodiquement, ne parvient pas à mettre le Mot fenêtre à l'avant (et, au lieu de bouffées de chaleur réduit l'icône de Word dans la barre des tâches).

NOTE: j'ai partiellement résolu ce problème en utilisant la fonction FindWindow Gagner l'appel d'API:

hwnd = FindWindow("OpusApp", vbNullString)
If hwnd > 0 Then 
  SetForegroundWindow (hwnd)
end if

Ce n'est pas 100% parce que (comme drventure souligné), si plusieurs instances de Word sont en cours d'exécution, vous ne pouvez pas être certain qui vous permettra d'obtenir une poignée de. Depuis quand mon code lance Word il utilise la fonction GetObject d'abord et ensuite CreateObject si cela échoue, tant qu'il y est une instance de Word en cours d'exécution pour commencer, je suis OK.

Avez-vous essayez de vérifier l'WindowState, et de réessayer de les optimiser?
Quand je vérifie windowstate,c'est toujours 1 (agrandie). Aussi, lorsque je minimise l'application appelante, Word est ouvert agrandie. Donc, je pense que le problème n'est pas l'état de la fenêtre, mais plutôt de l'ordre de superposition. Mais j'ai bien Activer() Mot à l'avant?

OriginalL'auteur Ed Schembor | 2010-10-05