Rust通过窗口句柄或进程ID获取进程的可执行路径

nc1teljy  于 2023-06-23  发布在  其他
关注(0)|答案(1)|浏览(449)

我正在尝试获取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包含必要的功能。我的问题解决了,我把这个留在这里,以防有人会有同样的问题。

sg24os4d

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 文件必须包含下表:

[dependencies.windows]
version = "0.48.0"    # Current version as of writing
features = [
    "Win32_Foundation",
    "Win32_System_ProcessStatus",
    "Win32_System_Threading",
    "Win32_UI_WindowsAndMessaging",
]

相关问题