● VB5.0の場合 ●

VB5.0はコールバック関数が使えるので楽。

'---------------------------------------------------------------
' 関数名: gHandleVB5
' 機  能: プロセスIDからハンドルを取得する
' 引  数: なし
' 返り値: 正常:ハンドル  エラー:0
'---------------------------------------------------------------
Property Get gHandleVB5() As Long
    gHandleVB5 = GetHandleFromProcessID_VB5(m_ProcessID)
End Property

'---------------------------------------------------------------
' 関数名: GetHandleFromProcessID_VB5
' 機  能: プロセスIDからハンドルを取得する
' 引  数: (in) ProcessID … プロセスID
' 返り値: 正常:プロセスIDをもつウインドウハンドル  エラー:0
'---------------------------------------------------------------
Private Function GetHandleFromProcessID_VB5(ByVal ProcessID As Long) As Long

    Dim ret As Long

    'プロセスIDが0であればエラー
    If ProcessID = 0 Then
        Exit Function
    Else
        'ハンドルを取得する
        ret = EnumWindows(AddressOf EnumWindowsProc, ProcessID)
    End If

    GetHandleFromProcessID_VB5 = m_Handle

End Function

'---------------------------------------------------------------
' 関数名: EnumWindowsProc
' 機  能: 起動したアプリケーションのハンドルを取得する
' 引  数: (in) hWnd … ハンドル
'          (in) lParam … 追加情報(EnumWindows の第2引数)
' 返り値: なし
'---------------------------------------------------------------
Private Function EnumWindowsProc(ByVal hwnd As Long, ByRef lParam As Long) As Boolean

    Dim gThreadID As Long  'スレッドID
    Dim gProcessID As Long 'プロセスID

    'ハンドルからプロセスIDを取得する
    gThreadID = GetWindowThreadProcessId(hwnd, gProcessID)
              
    '調査開始、プロセスIDとスレッドIDを調査する
    If gThreadID = m_ThreadID Then
        If gProcessID = lParam Then
            m_Handle = hwnd                '起動したアプリケーションのハンドル取得
            EnumWindowsProc = False    '検索終了
        Else
            EnumWindowsProc = True    '検索を継続
        End If
    Else
        EnumWindowsProc = True        '検索を継続
    End If

End Function

戻る