以下是使用 Golang 获取本地 Windows 11 进程信息的示例代码:
package main
import (
"fmt"
"syscall"
"unsafe"
)
type PROCESSENTRY32 struct {
dwSize uint32
cntUsage uint32
th32ProcessID uint32
th32DefaultHeapID uintptr
th32ModuleID uint32
cntThreads uint32
th32ParentProcessID uint32
pcPriClassBase int32
dwFlags uint32
szExeFile [syscall.MAX_PATH]uint16
}
func main() {
snapshot, err := syscall.CreateToolhelp32Snapshot(syscall.TH32CS_SNAPPROCESS, 0)
if err != nil {
fmt.Println("CreateToolhelp32Snapshot failed:", err)
return
}
defer syscall.CloseHandle(snapshot)
var processEntry PROCESSENTRY32
// 必须先设置 dwSize 属性为结构体的大小,否则函数会返回失败。
processEntry.dwSize = uint32(unsafe.Sizeof(processEntry))
// 遍历进程列表并输出每个进程的名称和 ID。
for syscall.Process32Next(snapshot, &processEntry) == nil {
exeName := syscall.UTF16ToString(processEntry.szExeFile[:])
fmt.Printf("Process Name: %s, PID: %d\n", exeName, processEntry.th32ProcessID)
}
}
该代码使用了 CreateToolhelp32Snapshot
函数来获取当前系统中所有进程的快照。然后,它遍历进程列表并输出每个进程的名称和 ID。
注意,在调用 Process32Next
函数之前,必须先将 dwSize
属性设置为结构体的大小,否则函数会返回失败。