你如何在windows的机箱中使用PostMessage



我是rust和windows API的新手,我正在尝试使用windows-rs机箱使用PostMessage函数。但是,我不确定WPARAM所期望的数据类型。我试着猜测,因为windows的文档似乎没有说明。微软的C++官方文档似乎期待下面的常量。。但当我试着把它们和生锈的板条箱一起使用时,我犯了一个错误。

https://learn.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://learn.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没有";虚拟密钥";。我还尝试过以各种方式使用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);

我也不知道如何发送正确格式化的十六进制,所以我可能做得不正确。有人有什么想法吗?或者有人能更好地了解铁锈吗?

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

正如@Jmb在评论中所说,使用WPARAM(VK_ADD.0 as _)应该可以,但您还需要根据WM_KEYDOWN消息的要求传递LPARAM参数,但如果您只是想发送键盘输入,那么使用SendInput会更好、更容易

最新更新