Golang 获取 Windows 所有进程 - 示例代码和安装指南
在 Go 语言中,可以使用 golang.org/x/sys/windows 包来获取 Windows 系统的进程信息。以下是一个示例代码,演示如何获取 Windows 系统中的所有进程:
package main
import (
"fmt"
"golang.org/x/sys/windows"
"syscall"
"unsafe"
)
func main() {
// 获取进程快照
handle, err := windows.CreateToolhelp32Snapshot(windows.TH32CS_SNAPPROCESS, 0)
if err != nil {
fmt.Println("CreateToolhelp32Snapshot failed:", err)
return
}
defer windows.CloseHandle(handle)
// 设置进程快照结构体大小
var pe32 windows.ProcessEntry32
pe32.Size = uint32(unsafe.Sizeof(pe32))
// 遍历进程快照
if err := windows.Process32First(handle, &pe32); err != nil {
fmt.Println("Process32First failed:", err)
return
}
fmt.Println("正在运行的进程:")
for {
// 输出进程信息
fmt.Printf("进程ID: %d, 父进程ID: %d, 可执行文件: %s\n", pe32.ProcessID, pe32.ParentProcessID, syscall.UTF16ToString(pe32.ExeFile[:]))
// 继续遍历下一个进程
if err := windows.Process32Next(handle, &pe32); err != nil {
if err == syscall.ERROR_NO_MORE_FILES {
break // 遍历结束
} else {
fmt.Println("Process32Next failed:", err)
return
}
}
}
}
上述代码将输出正在运行的所有进程的进程ID、父进程ID和可执行文件名。需要注意的是,使用 golang.org/x/sys/windows 包需要先安装该包,可以使用以下命令进行安装:
go get -u golang.org/x/sys/windows
另外,该代码需要在 Windows 系统中运行,因为它使用了 Windows 特定的 API 函数。
原文地址: https://www.cveoy.top/t/topic/qrmm 著作权归作者所有。请勿转载和采集!