tagCANDY CGI VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板
VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板
[ツリー表示へ]  [ワード検索]  [Home]

タイトル SetForegroundWindowについて
投稿日: 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がフォーカスをあてたウィンドウの裏に出てきます。

ご教授宜しくお願いします。

- 関連一覧ツリー をクリックするとツリー全体を一括表示します)

古いスレッドにレスはつけられません。