[Google Go]代码
package main
import (
"fmt"
"syscall"
"unsafe"
"strconv"
)
type ulong int32
type ulong_ptr uintptr
type PROCESSENTRY32 struct {
dwSize ulong
cntUsage ulong
th32ProcessID ulong
th32DefaultHeapID ulong_ptr
th32ModuleID ulong
cntThreads ulong
th32ParentProcessID ulong
pcPriClassBase ulong
dwFlags ulong
szExeFile [260]byte
}
func main() {
kernel32 := syscall.NewLazyDLL("kernel32.dll")
CreateToolhelp32Snapshot := kernel32.NewProc("CreateToolhelp32Snapshot")
pHandle,_,_ := CreateToolhelp32Snapshot.Call(uintptr(0x2),uintptr(0x0))
if int(pHandle)==-1 {
return
}
Process32Next := kernel32.NewProc("Process32Next")
for {
var proc PROCESSENTRY32
proc.dwSize = ulong(unsafe.Sizeof(proc))
if rt,_,_ := Process32Next.Call(uintptr(pHandle),uintptr(unsafe.Pointer(&proc)))int(rt)==1 {
fmt.Println("ProcessName : "+string(proc.szExeFile[0:]))
fmt.Println("ProcessID : "+strconv.Itoa(int(proc.th32ProcessID)))
}else{
break
}
}
CloseHandle := kernel32.NewProc("CloseHandle")
_,_,_ = CloseHandle.Call(pHandle)
}