如何将 PostMessage 与 windows-rs crate 一起使用?

How do you use PostMessage with the windows-rs crate?

我是 rust 和 windows API 的新手,我正在尝试使用 windows-rs crate 来使用 PostMessage 函数。但是,我不确定 WPARAM 需要什么数据类型。我试过猜测,因为 windows-rs 文档似乎没有说明。 C++ 的官方 Microsoft 文档似乎期望在下面找到常量。但是当我尝试将它们与 rust crate 一起使用时出现错误。

https://docs.microsoft.com/en-us/windows/win32/inputdev/virtual-key-codes

https://microsoft.github.io/windows-docs-rs/doc/windows/Win32/UI/WindowsAndMessaging/fn.PostMessageA.html

https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-postmessagea

use windows::{
    Win32::System::Threading::*, Win32::UI::WindowsAndMessaging::*, Win32::UI::Input::KeyboardAndMouse::*
};

fn main() {
    unsafe {
        Sleep(1000);
        let wh = GetActiveWindow();
        PostMessageA(wh, WM_KEYDOWN, VK_ADD, None);
    }
}

我收到一条错误消息,告诉我 WPARAM 没有“VIRTUAL_KEY”的实现。我也尝试过以各种方式使用 VK_ADD 的十六进制。但是每一个都会抛出关于 WPARAM 未实现我尝试使用的类型的错误。

PostMessageA(wh, WM_KEYDOWN, 0x6B, None);
PostMessageA(wh, WM_KEYDOWN, "0x6B", None);
let hex: u32 = 0x6B;
PostMessageA(wh, WM_KEYDOWN, hex, None);

我也不确定如何发送正确格式的十六进制,所以我可能做错了。有没有人有什么想法,或者对 rust 有更好了解的人可以检查一下 crate 的源代码吗?

https://github.com/microsoft/windows-rs

正如@Jmb 在他的评论中所说,使用 WPARAM(VK_ADD.0 as _) 应该可行,但您还需要根据 WM_KEYDOWN message, but if you simply want to send keyboard input then its better and easier to use SendInput

的要求传递 LPARAM 参数