スレッドの情報を列挙          <TOP>


スレッドの情報を列挙します。

CreateToolhelp32Snapshot プロセスのスナップショットを取得

CloseHandle オブジェクトハンドルをクローズ

GetCurrentProcessId 自分自身のプロセスIDを取得

Thread32First 最初のスレッド情報を取得

Thread32Next 次のスレッド情報を取得

 

 

'================================================================
'= スレッドの情報の列挙
'=    (Thread32First.bas)
'================================================================
#include "Windows.bi"

#define TH32CS_INHERIT -2147483648      '返されるハンドルを継承可能とする
#define TH32CS_SNAPALL &HF              'TH32CS_SNAPHEAPLIST・SNAPMODULE・SNAPPROCESS・SNAPTHREADの組み合わせ
#define TH32CS_SNAPHEAPLIST &H1         'ProcessIDで指定したプロセスのヒープリスト
#define TH32CS_SNAPMODULE &H8           'ProcessIDで指定したプロセスのモジュール一覧のスナップショット
#define TH32CS_SNAPPROCESS &H2          'プロセス一覧のスナップショット
#define TH32CS_SNAPTHREAD &H4           'スレッド一覧のスナップショット

Type THREADENTRY32
    dwSize As Long                      '構造体サイズ
    cntUsage As Long                    '参照カウント(0)
    th32ThreadID As Long                'スレッドID
    th32OwnerProcessID As Long          'プロセスID
    tpBasePri As Long                   '基本優先順位レベル
    tpDeltaPri As Long                  '(0)
    dwFlags As Long                     '(0)
End Type

' プロセスのスナップショットを取得
Declare Function Api_CreateToolhelp32Snapshot& Lib "Kernel32" Alias "CreateToolhelp32Snapshot" (ByVal dwFlag&, ByVal th32ProcessID&)

' オープンされているオブジェクトハンドルをクローズ
Declare Function Api_CloseHandle& Lib "Kernel32" Alias "CloseHandle" (ByVal hObject&)

' 自分自身のプロセスIDを取得
Declare Function Api_GetCurrentProcessId& Lib "Kernel32" Alias "GetCurrentProcessId" ()

' 最初のスレッドの情報を取得
Declare Function Api_Thread32First& Lib "kernel32" Alias "Thread32First" (ByVal hSnapshot&, lppe As THREADENTRY32)

' 次のスレッドの情報を取得
Declare Function Api_Thread32Next& Lib "kernel32" Alias "Thread32Next" (ByVal hSnapshot&, lppe As THREADENTRY32)
 
Var Shared List1 As Object
Var Shared Button1 As Object

List1.Attach GetDlgItem("List1") : List1.SetFontSize 14
Button1.Attach GetDlgItem("Button1") : Button1.SetFontSize 14

'================================================================
'= スレッドと優先順位
'================================================================
Declare Sub Button1_on edecl ()
Sub Button1_on()
    Var te As THREADENTRY32
    Var hSnap As Long
    Var pid As Long
    Var Ret As Long

    List1.Resetcontent

    'プロセスID取得
    pid = Api_GetCurrentProcessId()
   
    'プロセスのスナップショットを取得
    hSnap = Api_CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD, pid)
   
    '構造体のサイズ
    te.dwSize = Len(te)
   
    '最初のスレッドの情報を取得
    Ret = Api_Thread32First(hSnap, te)
    If Ret <= 0 Then Exit Sub

    '全てのスレッドの情報を表示
    Do While Ret
        List1.AddString "ThreadID:" & Hex$(te.th32ThreadID) & " / Priority:" & Trim$(Str$(te.tpBasePri))
        Ret = Api_Thread32Next(hSnap, te)
    Loop
   
    'オブジェクトハンドルをクローズ
    Ret = Api_CloseHandle(hSnap)
End Sub

'================================================================
'=
'================================================================
While 1
    WaitEvent
Wend
Stop
End