タスクマネージャのアプリケーション一覧を取得するには?

解決


アラジン  2006-02-07 01:03:45  No: 94016

タスクマネージャのアプリケーション(タブ)に表示されている
アプリケーションを取得したいのですがどうすれば良いでしょうか?

GetObject("winmgmts:").InstancesOf("Win32_Process")

辺りかと思うのですが、それだとプロセスが表示されてしまします。
なにか絞り込む条件とかあるのでしょうか?

環境はVB6です。

以上、宜しくお願いします。


通ってみた  2006-02-07 01:57:27  No: 94017

「GetNextWindow」でウィンドウリストを取得して、
「GetClassLong」とか「GetWindowText」で
アイコンやタイトルを取得出来ます。
ただし、常駐アプリはを省かないと駄目かも。


アラジン  2006-02-07 20:06:16  No: 94018

通ってみたさん ありがとうございます。
GetNextWindowを使用してみて、確かにアプリケーションが含まれる一覧は取得できたのですが、
常駐関係のアプリケーションが沢山出てきてしまいます。

GetWindowRectなどでウィンドウのサイズを取得したりして見ましたが
どうも絞込みができません。

なにか簡単に絞り込む関数(API)などあるのでしょうか?


InteR  2006-02-07 20:14:42  No: 94019

IsWindowVisibleを使ってみては?


アラジン  2006-02-08 02:07:55  No: 94020

InteRさん レスありがとうございます。

IsWindowVisible使ってみましたが
常駐アプリはほとんどが 表示状態になっていて絞込みが出来ませんでした。

子ウィンドウなどは GetParent で省けるのは分かりましたが・・・


123  2006-02-08 02:59:03  No: 94021

似たような質問

http://madia.world.coocan.jp/cgi-bin/VBBBS2/wwwlng.cgi?print+200510/05100099.txt


InteR  2006-02-08 03:19:06  No: 94022

Not IsIconic(hWnd)もどうでしょう?
時間があったら検証するのですが・・ごめんなさい


InteR  2006-02-09 00:22:21  No: 94023

こんな感じでどうでしょう?
フォームにリストボックス必須

Option Explicit

Private Declare Function GetClassLong Lib "user32" Alias "GetClassLongA" (ByVal hWnd As Long, ByVal nIndex As Long) As Long
Private Declare Function GetNextWindow Lib "user32" Alias "GetWindow" (ByVal hWnd As Long, ByVal wFlag As Long) As Long
Private Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hWnd As Long, ByVal lpString As String, ByVal cch As Long) As Long
Private Declare Function IsWindowVisible Lib "user32" (ByVal hWnd As Long) As Long
Private Declare Function GetWindow Lib "user32" (ByVal hWnd As Long, ByVal wCmd As Long) As Long
Private Const GW_OWNER = 4
Private Const GW_HWNDFIRST = 0
Private Const GW_HWNDLAST = 1
Private Const GW_HWNDNEXT = 2
'Private Const GW_HWNDPREV = 3

Private Sub Form_Load()
    Dim hwndNext    As Long
    Dim strBuf  As String * 255
    Dim hwndLast    As Long
    Dim i           As Long

    hwndLast = GetNextWindow(Me.hWnd, GW_HWNDLAST)
    hwndNext = GetNextWindow(Me.hWnd, GW_HWNDFIRST)

    Do Until hwndNext = hwndLast
        If GetWindow(hwndNext, GW_OWNER) = 0 Then
            If GetWindowText(hwndNext, strBuf, Len(strBuf)) <> 0 Then
                If IsWindowVisible(hwndNext) Then
                    List1.AddItem Left(strBuf, InStr(1, strBuf, vbNullChar) - 1)
                    i = i + 1
                End If
            End If
        End If
        hwndNext = GetNextWindow(hwndNext, GW_HWNDNEXT)
    Loop
End Sub


通ってみた  2006-02-09 00:56:10  No: 94024

通ってみたけど、解決してた・・・
InteRさんどーも中途半端ですみません^^;


アラジン  2006-02-09 17:35:49  No: 94025

通ってみたさん、InteRさん、123さん
ありがとうございます。

返事遅くなってすみませんでした。

InteRさんの方法使わせてもらいます。

ありがとうございました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加