如何将 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://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 的源代码吗?
正如@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
参数
我是 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://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 的源代码吗?
正如@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
参数