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 |