VB6.0用掲示板の過去のログ(No.1)−VBレスキュー(花ちゃん)
[記事リスト] [新規投稿] [新着記事] [ワード検索] [過去ログ] [管理用]

投稿日: 2004/06/18(Fri) 11:54
投稿者はこ
Eメール
URL
タイトルRe: 同一PC上で起動しているEXEの確認

こんにちは。
今アプリ2が稼動中かどうかわかればいいってことですよね?
私は以前こんな方法で判定しました。


Public Function AppSearch(app_path As String) As Boolean
    Dim lngRet          As Long
    Dim process(1023)   As Long
    Dim lngSize         As Long
    Dim process_cnt     As Long
    Dim i               As Long
    
    '現在稼動中のプロセスID取得
    lngRet = EnumProcesses(process(0), UBound(process), lngSize)
    process_cnt = lngSize / 4
    
    '取得したプロセスIDから実行ファイル名を抽出し、
    '監視対象アプリが稼動中か判定
    For i = 0 To process_cnt - 1
        If GetProcessName(process(i)) = app_path Then
            AppSearch = True
            Exit For
        End If
    Next
End Function

Public Function GetProcessName(ByVal ProcessID As Long) As String
    Dim hProcess            As Long
    Dim hModules(1023)      As Long
    Dim lngSize             As Long
    Dim lngRet              As Long
    Dim i                   As Long
    Dim ExeFileName(255)    As Byte
    
    'プロセスハンドルを取得する
    hProcess = OpenProcess(PROCESS_QUERY_INFORMATION Or PROCESS_VM_READ, False, ProcessID)
    If hProcess <> 0 Then
        If EnumProcessModules(hProcess, hModules(0), UBound(hModules), lngSize) <> 0 Then
            'プロセスの実行ファイル名を取得する
            lngRet = GetModuleFileNameEx(hProcess, hModules(0), ExeFileName(0), UBound(ExeFileName))
            GetProcessName = Left$(StrConv(ExeFileName, vbUnicode), lngRet)
        End If
    End If
    
    'プロセスハンドルの開放
    CloseHandle (hProcess)
End Function

AppSearchに稼動中か判定したいexeファイルのパスを渡して、
Trueが返ってきたら稼動中で、Falseが返ってきたら稼動して
ないってことなんですけど、こんなんどうですか?

※APIや定数の定義は省略しています。

---
開発環境
WinXPPro SP1
VB6.0 SP5


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

- 返信フォーム (この記事に返信する場合は下記フォームから投稿して下さい)

- Web Forum -