タイトル | : SetForegroundWindowについて |
記事No | : 13644 |
投稿日 | : 2009/05/07(Thu) 18:42 |
投稿者 | : 5月病 |
お世話になります。
実行環境 WinXP.sp3 VB6.0
SetForegroundWindow関数を用いてとあるフォームを最前面にしたいのですが、 どうにもうまくいきません。
フォーム_A上からフォーム_Aの最小化後にシェル関数を用いてEXE_Bを起動します。 (EXE_Bの起動中はWaitForSingleObjectを用いてEXE_Bの終了を待ちます。) EXE_Bの終了後、フォーム_A上にてを自フォームを元サイズに戻し、 以下関数を呼び出しています。
Sub SetForegroundWin(hwnd As Long) 'hwndはフォーム_Aのhwndです。 Dim sp_time As Long Dim nForegroundID As Long Dim nTargetID As Long
nForegroundID = GetWindowThreadProcessId GetForegroundWindow(), &H0
nTargetID = App.ThreadID
AttachThreadInput nTargetID, nForegroundID, True
SystemParametersInfo SPI_GETFOREGROUNDLOCKTIMEOUT, 0, sp_time, 0
SystemParametersInfo SPI_SETFOREGROUNDLOCKTIMEOUT, 0, ByVal 0&, 0
SetForegroundWindow hwnd SystemParametersInfo SPI_SETFOREGROUNDLOCKTIMEOUT, 0, sp_time, 0 AttachThreadInput nTargetID, nForegroundID, False
End Sub
上記コードの実行結果ですが、 EXE_B起動中にフォーム_A以外のウィンドウにフォーカスをあて、 EXE_Bを終了するとフォーム_Aがフォーカスをあてたウィンドウの裏に出てきます。
ご教授宜しくお願いします。
|