OLE Automation для запуска MS Word и вывода на передний план
Что такое «правильный» (рекомендуемый) метод для подключения к работающему экземпляру MS Word и вывода этого приложения на передний план? Я делаю что-то вроде следующего из приложения 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
...
Работая в Windows XP с Word 2007, это работает большую часть времени, но периодически не удается вывести окно Word на передний план (и вместо этого мигает свернутый значок Word на панели задач).
НОТА: Я частично решил эту проблему с помощью вызова API FindWindow Win:
hwnd = FindWindow("OpusApp", vbNullString)
If hwnd > 0 Then
SetForegroundWindow (hwnd)
end if
Это не 100%, потому что (как указано в drventure), если запущено несколько экземпляров Word, вы не можете быть уверены, к какому из них вы попадете. Поскольку, когда мой код запускает Word, он сначала использует GetObject, а затем в случае сбоя CreateObject, если для запуска запущен один экземпляр Word, я в порядке.