我正在尝试获取Windows
操作系统上进程的可执行路径。我有一个窗口句柄来自一些窗口事件,从窗口句柄我可以使用GetWindowThreadProcessId()
获取进程id。然后,根据windows api docs,我可以使用OpenProcess()
函数来制作进程句柄,然后使用GetModuleFileNameExA()
或GetModuleFileNameExW()
作为unicode字符来获取进程可执行路径。但遗憾的是,在windows
crate中,我找不到这些函数。
我尝试使用GetWindowModuleFileNameW()
,但这只适用于调用此函数的进程或来自此进程的进程(这可能不是确切的解释,但我理解它的方式)。
我在winapi
crate中发现了这个函数,但正如我之前建议的那样,我最好使用windows
crate,因为它仍然与winapi
不同。
此外,我发现了一种方法来做这与sysinfo
板条箱,但如果可能的话,我想不把它只是为了这个。任何帮助将不胜感激!
UPD:在我安装了windows
机箱的其余功能后,有OpenProcess()
功能可用,但如果没有GetModuleFileNameExW()
,这仍然不能帮助我
更新:我发现在windows
机箱功能称为Win32_System_ProcessStatus
包含必要的功能。我的问题解决了,我把这个留在这里,以防有人会有同样的问题。
1条答案
按热度按时间sg24os4d1#
windows
crate,就像它提供绑定的API一样,非常庞大。它包含了成千上万行代码。为了驯服编译时间,crate被分成多个模块,每个模块都有一个功能。要使用任何给定的API绑定,客户端代码需要启用相应的功能。documentation列出了每个公共常量、类型或函数所需的特性。
GetWindowThreadProcessId
:"Win32_UI_WindowsAndMessaging"
、"Win32_Foundation"
*OpenProcess
:"Win32_System_Threading"
、"Win32_Foundation"
*GetModuleFileNameExW
:"Win32_System_ProcessStatus"
、"Win32_Foundation"
*要实现此程序,Cargo.toml 文件必须包含下表: