VB4.0はコールバック関数が使えないので自力実装が必要。 '--------------------------------------------------------------- ' 関数名: gHandleVB4 ' 機 能: プロセスIDからハンドルを取得する ' 引 数: なし ' 返り値: 正常:ハンドル エラー:0 '--------------------------------------------------------------- Property Get gHandleVB4() As Long gHandleVB4 = GetHandleFromProcessID_VB4(m_ProcessID) End Property '--------------------------------------------------------------- ' 関数名: GetHandleFromProcessID_VB4 ' 機 能: プロセスIDからハンドルを取得する ' 引 数: (in) ProcessID … プロセスID ' 返り値: 正常:プロセスIDをもつウインドウハンドル エラー:0 '--------------------------------------------------------------- Private Function GetHandleFromProcessID_VB4(ByVal ProcessID As Long) As Long Dim ret As Long 'プロセスIDが0であればエラー If ProcessID = 0 Then Exit Function Else 'ハンドルを取得する Call EnumWindowsProcVB4(ProcessID) End If GetHandleFromProcessID_VB4 = m_Handle End Function '--------------------------------------------------------------- ' 関数名: EnumWindowsProcVB4 ' 機 能: 起動したアプリケーションのハンドルを取得する ' 引 数: (in) pID … プロセスID ' 返り値: なし '--------------------------------------------------------------- Private Sub EnumWindowsProcVB4(ByVal pID As Long) Dim ghWnd As Long 'GetWindowより取得したハンドル Dim gThreadID As Long 'スレッドID Dim gProcessID As Long 'プロセスID 'トップレベルウインドウのハンドルを取得する 'ghWnd= GetWindow(GetForegroundWindow, GW_HWNDFIRST) 'これでもよい ghWnd = FindWindow(vbNullString, vbNullString) Do 'ハンドルからプロセスIDを取得する gThreadID = GetWindowThreadProcessId(ghWnd, gProcessID) '調査開始、プロセスIDとスレッドIDを調査する '親ウインドウを持たない(=自分自身が親ウインドウ) If GetParent(ghWnd) = 0 Then If gThreadID = m_ThreadID Then If gProcessID = m_ProcessID Then m_Handle = ghWnd 'ハンドル取得 Exit Do End If End If End If '次のハンドルの取得 ghWnd = GetWindow(ghWnd, GW_HWNDNEXT) Loop While ghWnd <> 0 End Sub |