Skip to content

Instantly share code, notes, and snippets.

@mogaika
Created August 23, 2017 02:43
Show Gist options
  • Save mogaika/4b48f65e5eb9abd9f420e2c9e5436180 to your computer and use it in GitHub Desktop.
Save mogaika/4b48f65e5eb9abd9f420e2c9e5436180 to your computer and use it in GitHub Desktop.

Revisions

  1. Vladimir Jigulin created this gist Aug 23, 2017.
    38 changes: 38 additions & 0 deletions get_windows_pid_by_processname.go
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,38 @@
    package main

    import (
    "log"
    "syscall"
    "unsafe"

    "golang.org/x/sys/windows"
    )

    func getPidByName(processName string) uint32 {
    hSnapshot, err := windows.CreateToolhelp32Snapshot(windows.TH32CS_SNAPPROCESS, 0)
    if err != nil {
    panic(err)
    }
    defer windows.CloseHandle(hSnapshot)

    var entry windows.ProcessEntry32
    entry.Size = uint32(unsafe.Sizeof(entry))
    if err := windows.Process32First(hSnapshot, &entry); err != nil {
    panic(err)
    }

    for {
    if syscall.UTF16ToString(entry.ExeFile[:]) == processName {
    return entry.ProcessID
    }

    if err := windows.Process32Next(hSnapshot, &entry); err != nil {
    break
    }
    }
    return 0
    }

    func main() {
    log.Println(getPidByName("explorer.exe"))
    }