実行中のアプリケーションの名前などの取得するには?

解決


Toshihiko  2004-04-28 03:59:16  No: 83181  IP: [192.*.*.*]

はじめまして
題名の通りなのですが、VBで実行中のアプリケーションの名前など(タスクマネージャー(XP系)のプロセス画面のような感じに)取得することは可能でしょうか?
もし可能ならどのような方法でしょうか?
できれば、Windows95系、NT系どちらでもできる方法でお願いします。
VBは5年くらいやっているのですが、あまり高度なことはやってなくて「〜〜を使えばいい」のような回答では理解できないかもしれません。ですから、サンプルコードなどを載せて頂ければありがたいです。

環境は
Visual Basic6.0
WindowsXP
です。
よろしくお願いします。

編集    削除
魔界の仮面弁士  2004-04-28 05:20:13  No: 83182  IP: [192.*.*.*]

WMIの Win32_Processクラス を使うのが、手っ取り早いかと思いますよ。

Option Explicit

Private Sub Form_Load()
    Dim Proc As Object
    For Each Proc In GetObject("winmgmts:").InstancesOf("Win32_Process")
        Debug.Print Proc.Name,
        Debug.Print Proc.ExecutablePath,
        Debug.Print Proc.CommandLine
    Next
End Sub


Win32_Processクラスで使用可能なプロパティの一覧は、こちらを参照してください。
http://msdn.microsoft.com/library/en-us/wmisdk/wmi/win32_process.asp


なお、(Win95などの)かなり古いOSにはWMIが含まれていませんので、
その場合は、別途、WMIをインストールして下さい。
http://www.microsoft.com/downloads/details.aspx?FamilyID=afe41f46-e213-4cbf-9c5b-fbf236e0e875&displaylang=ja


WMIを使いたくない場合は、APIを使うことになります。
実行されているアプリケーションの、どの情報を取得したいのか、
また、実行OSが何であるかなどによって使用するAPIは異なりますが、
CreateToolhelp32Snapshot、Process32First/Next、Module32First/Next、
EnumProcesses、EnumProcessModules、GetModuleFileNameExA
あたりを使えば、概ねの情報は列挙できるかと思います。
http://support.microsoft.com/default.aspx?scid=kb;en-us;192986
http://www.galliver.co.jp/writing/msdn/msdn15/

編集    削除
Toshihiko  2004-05-04 09:51:32  No: 83183  IP: [192.*.*.*]

敏速な対応ありがとうございます。
書き込んで頂いたコードなんですけど、なにも起こりません。上記のコードになにか付け足すとかしなければいけないのでしょうか?

編集    削除
いちゆ  2004-05-06 20:40:08  No: 83184  IP: [192.*.*.*]

…魔界の仮面弁士さんのコードでできたが?
イミディエイトウィンドウは開いてるか?

編集    削除
Toshihiko  2004-05-07 06:51:43  No: 83185  IP: [192.*.*.*]

いちゆさんありがとうございます。
原因はそれでした。てっきりFormに出ると思っていたので・・・

魔界の仮面弁士さん、コードの提供本当にありがとうございました。

編集    削除