- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用Go获取Windows 10上 Activity 前景窗口的PID。
首先,我调用此函数并获取句柄:
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
}
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)
}
最佳答案
我能够根据https://stackoverflow.com/users/1889329/iinspectable的评论解决此问题
我做错的是,尝试使用syscall返回的值,并且我将指向窗口句柄的指针作为第二个参数传递给GetWindowThreadProcessId()函数,这也是错误的。相反,必须使用来获取 Activity 窗口进程ID,我必须传递一个新的指针(第二个参数)并在函数返回后使用该指针的值代替返回的值。因为,GetWindowThreadProcessId函数将PID写入第二个参数指向的位置。
请在下面找到修改后的代码:
func GetWindowThreadProcessId(hwnd uintptr) uintptr {
var prcsId uintptr = 0
us32 := syscall.MustLoadDLL("user32.dll")
prc := us32.MustFindProc("GetWindowThreadProcessId")
ret, _, err := prc.Call(hwnd, uintptr(unsafe.Pointer(&prcsId)))
log.Println("ProcessId: ", prcsId, "ret", ret, " Message: ", err)
return prcsId
}
关于go - 从GetWindowThreadProcessId调用返回的PID与TaskManager的PID不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61246529/
我正在使用远程调用在目标地址空间中注入(inject) .NET SpyLib。我需要向通过 GetWindowThreadProcessId 创建该远程进程的窗口线程发送消息。 我在 Windows
在控制台应用程序中使用以下类并至少运行一个记事本实例时,GetWindowThreadProcessId 会正确返回一个非零线程 ID。但是,如果 Windows 服务中包含相同的代码,GetWind
我正在上钩GetWindowThreadProcessId()使用以下代码成功。 现在我想检查dwProcessID参数是否对应于确定进程的ID,并且在肯定情况下阻止执行原始函数: Result :=
我有一个设置应用程序,如果用户两次单击相同的设置,他们会收到弹出消息“另一个设置实例已在运行”。单击该消息上的“确定”后,我想将焦点放回正在运行的现有安装窗口。我目前有以下代码: if("setup.
我正在尝试使用 ctypes.windll.user32.GetWindowThreadProcessId 获取 proccessId,但打印与任务管理器中看到的 PID 不匹配。这是代码 impor
我是一名优秀的程序员,十分优秀!