プロセスの一覧
タスクマネージャで出てくる、プロセス一覧表のようなものを作ります。
もちろんコンソールでの表示しかしません。だから、終了させたり、優先度を変えたりは出来ません。
とりあえずプログラムです。
#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 |
(長いので以下省略)