プロセスの一覧

タスクマネージャで出てくる、プロセス一覧表のようなものを作ります。
もちろんコンソールでの表示しかしません。だから、終了させたり、優先度を変えたりは出来ません。
とりあえずプログラムです。
#console
#include<vcrt71.sbp>

Type PROCESSENTRY32

    dwSize As DWord
    cntUsage As DWord
    th32ProcessID As DWord
    th32DefaultHeapID As DWordPtr
    th32ModuleID As DWord
    cntThreads As DWord
    th32ParentProcessID As DWord
    pcPriClassBase As Long
    dwFlags As DWord
    szExeFile[MAX_PATH] As BytePtr
End Type
Const TH32CS_SNAPPROCESS = 2
Declare Function CreateToolhelp32Snapshot Lib "kernel32" (
    Flags As Long, ProcessID As Long) As Long
Declare Function Process32First Lib "kernel32" (
    hSnapshot As Long,     ByRef ProcessEntry As PROCESSENTRY32) As Long
Declare Function Process32Next Lib "kernel32" (
    hSnapshot As Long,     ByRef ProcessEntry As PROCESSENTRY32) As Long

Dim hSnap As HANDLE
Dim pe32 As    PROCESSENTRY32
    
    hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS , 0 )
    If hSnap = -1 Then
        printf(Ex"スナップショットの作成に失敗したよ\n")
        Goto *owari
    End If
    
    pe32.dwSize = sizeof(PROCESSENTRY32)
    If Process32First(hSnap , pe32 ) = FALSE Then
        printf(Ex"プロセス無いよ\n")
        Goto *owari
    End If
    
    printf(Ex"| ID  |       名前       | スレ | 優先 |\n")
    printf(Ex"+-----+------------------+------+------+\n")
    
    Do
        printf(Ex"|%4d | %-16s | %4d | %4d |\n" , _ 
        pe32.th32ProcessID , pe32.szExeFile , pe32.cntThreads , _
            pe32.pcPriClassBase)
    Loop while(Process32Next(hSnap , pe32) <> FALSE)

*owari
    CloseHandle(hSnap)
exit(0)
上の方でたくさん宣言をしています。
CreateToolhelp32Snapshot関数は、プロセス、スレッドなどのスナップショットを作ります。
Process32First関数とProcess32Next関数で戻り値がFALSEになるまでプロセスの情報を取得します。
取得した情報はPROCESSENTRY32構造体に入れられます。それを表示するだけです。
今回は気分を変えてGotoを使ってみました。使わなくても良いけどね。

実行結果は以下のようになります。
| ID  |       名前       | スレ | 優先 |
+-----+------------------+------+------+
|   0 | [System Process] |    1 |    0 |
|   4 | System           |   47 |    8 |
| 500 | smss.exe         |    3 |   11 |
| 560 | csrss.exe        |   10 |   13 |
| 584 | winlogon.exe     |   17 |   13 |
| 628 | services.exe     |   16 |    9 |
| 640 | lsass.exe        |   13 |    9 |
| 796 | svchost.exe      |    5 |    8 |
| 904 | svchost.exe      |   10 |    8 |
| 980 | svchost.exe      |   28 |    8 |
(長いので以下省略)