Word を前面に出す必要があるかもしれません。これは、アプリのフォームを一番上に表示することとは少し異なります。
FindWindowとSetWindowPosの2 つの API への参照が必要です。1 つ目は実行中の別のアプリケーションのウィンドウ ハンドルを見つけることができ、2 つ目はオペレーティング システムにメッセージを送信してアプリケーションにフォーカスを与えます ( FindWindow からのウィンドウ ハンドル)
ここにいくつかのサンプルコードがあります。
Public Class Form1
<Runtime.InteropServices.DllImport("user32.dll", SetLastError:=True, CharSet:=Runtime.InteropServices.CharSet.Auto)> _
Private Shared Function FindWindow(ByVal lpClassName As String, _
ByVal lpWindowName As String) As IntPtr
End Function
<Runtime.InteropServices.DllImport("user32.dll", SetLastError:=True)> _
Private Shared Function SetWindowPos(ByVal hWnd As IntPtr, ByVal hWndInsertAfter As IntPtr, ByVal X As Integer, ByVal Y As Integer, ByVal cx As Integer, ByVal cy As Integer, ByVal uFlags As Integer) As Boolean
End Function
Private Shared ReadOnly HWND_TOPMOST As New IntPtr(-1)
Private Shared ReadOnly HWND_NOTOPMOST As New IntPtr(-2)
Private Const SWP_NOSIZE As Integer = &H1
Private Const SWP_NOMOVE As Integer = &H2
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Shell("calc.exe")
End Sub
Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
Dim myHandle As IntPtr = FindWindow(Nothing, "Calculator")
SetWindowPos(myHandle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE)
SetWindowPos(myHandle, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE)
End Sub
End Class
最初のボタンをクリックすると Calculator のコピーがインスタンス化され、2 番目のボタンでそれが最上位になり、通常の状態に戻ります...したがって、最上位のフォームのままですが、ユーザーは他のウィンドウをアクティブにすることもできます。