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 の最小化されたアイコンが点滅します)。
注: FindWindow Win API 呼び出しを使用して、この問題を部分的に解決しました。
hwnd = FindWindow("OpusApp", vbNullString)
If hwnd > 0 Then
SetForegroundWindow (hwnd)
end if
これは 100% ではありません。なぜなら (drventure が指摘したように)、Word の複数のインスタンスが実行されている場合、どれにハンドルを取得するかを特定できないからです。私のコードが Word を起動すると、最初に GetObject が使用され、それが失敗した場合は CreateObject が使用されるため、最初に実行されている Word のインスタンスが 1 つある限り、問題ありません。