Я пытаюсь получить PID активного окна переднего плана на windows 10, используя Go.
, сначала я вызываю эту функцию и получаю дескриптор:
func GetForegroundWindow() uintptr {
us32 := syscall.MustLoadDLL("user32.dll")
prc := us32.MustFindProc("GetForegroundWindow")
ret, _, _ := prc.Call()
return ret
}
, позже используя дескриптор, возвращенный из функции выше, я вызываю эту функцию:
func GetWindowThreadProcessId(hwnd uintptr) uintptr {
us32 := syscall.MustLoadDLL("user32.dll")
prc := us32.MustFindProc("GetWindowThreadProcessId")
ret, _, err := prc.Call(hwnd, uintptr(unsafe.Pointer(&hwnd)))
fmt.Println("ProcessId: ", ret, " Error: ", err)
return ret
}
Когда я проверяю возвращенный PID, запустив tasklist / fi "pid eq returnPid", он не соответствует ни одному процессу.
И вызов OpenProcess всегда возвращает 0 с ошибкой, говорящей «Параметр неверен».
func GetOpenProcess(pid uintptr) {
kernel32 := syscall.MustLoadDLL("kernel32.dll")
proc := kernel32.MustFindProc("OpenProcess")
res, _, err := proc.Call(ptr(PROCESS_ALL_ACCESS|PROCESS_QUERY_INFO), ptr(true), ptr(pid))
fmt.Println("OpenProcess: result:", res, " Error:", err)
}
что я делаю не так?