在 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 函数。

Golang 获取 Windows 所有进程 - 示例代码和安装指南

原文地址: https://www.cveoy.top/t/topic/qrmm 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录