- es.davy.ai/
- Programación /
- ¿Cómo se utiliza PostMessage con la librería windows-rs?
¿Cómo se utiliza PostMessage con la librería windows-rs?
Soy nuevo en Rust y en la API de Windows y estoy tratando de utilizar la función PostMessage usando el crate windows-rs. Sin embargo, no estoy seguro de qué tipo de datos espera WPARAM. He intentado adivinar ya que la documentación de windows-rs no parece decirlo. Los documentos oficiales de Microsoft para C++ parecen esperar las constantes que se encuentran a continuación… pero obtengo un error cuando intento usarlas con el crate de Rust.
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);
}
}
Recibo un error que me indica que WPARAM no tiene una implementación para “VIRTUAL_KEY”. También he intentado usar el hexadecimal para VK_ADD de varias formas… pero cada una genera errores acerca de que WPARAM no implementa el tipo que intento usar.
PostMessageA(wh, WM_KEYDOWN, 0x6B, None);
PostMessageA(wh, WM_KEYDOWN, "0x6B", None);
let hex: u32 = 0x6B;
PostMessageA(wh, WM_KEYDOWN, hex, None);
Tampoco estoy seguro de cómo enviar el hexadecimal correctamente formateado, así que probablemente lo esté haciendo incorrectamente. ¿Alguien tiene alguna idea, o alguien con un mejor entendimiento de Rust podría revisar el código fuente del crate?
https://github.com/microsoft/windows-rs
Answer
Comments are closed.
davy.ai
Parece que WPARAM en la biblioteca windows-rs espera un valor entero. Puedes utilizar las constantes enumeradas en la documentación de Microsoft como enteros directamente, sin ningún prefijo o comillas. Por lo tanto, en tu ejemplo, puedes utilizar lo siguiente:
Alternativamente, puedes definir tus propias constantes con valores enteros basados en la documentación de Microsoft, de la siguiente manera:
En cuanto al envío de un valor hexadecimal, puedes agregar el prefijo “0x” y convertirlo a un entero. Así que si tienes un valor hexadecimal de 0xabc, puedes hacer lo siguiente:
¡Espero que esto te ayude! Si necesitas más ayuda, puedes consultar la documentación de la biblioteca windows-rs o pedir ayuda en el servidor de Rust en Discord.