Windows95ではウインドウハンドルからプロセスIDを取得する関数は用意されているんだけど、プロセスIDからウインドウハンドルを取得する関数はないんだよね。とりあえず、API関数・定数・外部変数の宣言 & 関数はこのページの通り。これを踏まえて、下のリンク先へ行ってね。 |
'新しいプロセスのメインウインドウの表示状態を定義する構造体 Private Type STARTUPINFO cb As Long lpReserved As Long lpDesktop As Long lpTitle As Long dwX As Long dwY As Long dwXSize As Long dwYSize As Long dwXCountChars As Long dwYCountChars As Long dwFillAttribute As Long dwFlags As Long wShowWindow As Integer cbReserved2 As Integer lpReserved2 As Long hStdInput As Long hStdOutput As Long hStdError As Long End Type '新しいプロセスに関する識別情報を定義する構造体 Private Type PROCESS_INFORMATION hProcess As Long hThread As Long dwProcessId As Long dwThreadId As Long End Type
'プロセスを作成する
Private Const SW_SHOWNORMAL = 1 Private Const STARTF_USESHOWWINDOW = &H1 'ShowWindowを使用する Private Const STARTF_USESIZE = &H2 'dwXSize、dwYSizeを使用する Private Const STARTF_USEPOSITION = &H4 'dwX、dwYを使用する Private Const STARTF_USECOUNTCHARS = &H8 'dwXCountChars、dwYCountCharsを使用する Private Const STARTF_USEFILLATTRZIBUTE = &H10 'dwFillAttributeを使用する
'プロセスの初期化が終了するまで待機する Private Const INFINITE = &HFFFF
'ハンドルからプロセスIDを取得する
'画面上の全てのトップレベルウインドウを取得する列挙関数
'トップレベルウインドウを取得する
'ウインドウのハンドルを取得する
'親ウインドウのハンドルを取得する
Private Const GW_HWNDFIRST = 0 'トップレベルウインドウ
'アクティブウインドウのハンドルを取得する
'外部変数 Private m_Handle As Long '起動したアプリケーションのハンドル Private m_ThreadID As Long '起動したアプリケーションのスレッドID Private m_ProcessID As Long '起動したアプリケーションのプロセスID Private m_hProcess As Long '起動したアプリケーションのプロセスのハンドル '--------------------------------------------------------------- ' 関数名: ExecuteNotepad ' 機 能: メモ帳を起動する ' 引 数: (in) NotepadDir … メモ帳のフルパス ' 返り値: 正常:True エラー:False ' 備 考: 特になし '--------------------------------------------------------------- Private Sub ExecuteNotepad(ByVal NotepadDir As String) Dim udtStartupInfo As STARTUPINFO Dim udtProcessInfomation As PROCESS_INFORMATION Dim ret As Long '表示状態を設定する With udtStartupInfo .cb = Len(udtStartupInfo) .dwX = 0 'X座標 .dwY = 0 'Y座標 .dwXSize = (Screen.Width \ Screen.TwipsPerPixelX) / 1.8 '幅 .dwYSize = (Screen.Height \ Screen.TwipsPerPixelY) / 1.8 '高さ .dwFlags = STARTF_USESHOWWINDOW Or STARTF_USESIZE Or STARTF_USEPOSITION .wShowWindow = SW_SHOWNORMAL End With 'アプリケーション起動 ret = CreateProcess(NotepadDir, vbNullString, _ 0&, 0&, _ False, 0&, ByVal vbNullString, _ vbNullString, udtStartupInfo, udtProcessInfomation) With udtProcessInfomation m_ProcessID = .dwProcessId 'プロセスID取得 m_ThreadID = .dwThreadId 'スレッドID取得 m_hProcess = .hProcess 'プロセスのハンドル取得 End With 'プロセスの初期化完了を待つ Call WaitForInputIdle(udtProcessInfomation.hProcess, INFINITE) End Sub |