< 返回版块

1192724521 发表于 2021-11-22 17:28

Tags:windows api

求大佬解惑

pub unsafe fn SendMessageW<'a, Param0: IntoParam<'a, HWND>>(

    hwnd: Param0, 
    msg: u32, 
    wparam: WPARAM, 
    lparam: LPARAM

) -> LRESULT

其中msg: u32 的参数应该传什么?

找到的键盘按键

pub struct VirtualKey(pub i32)

pub const VK_Q: VIRTUAL_KEY;

pub struct VIRTUAL_KEY(pub u16);

pub const DIK_Q: u32 = 16u32;

pub const DIKEYBOARD_Q: u32 = 2164261904u32;

这里DIK_Q和DIKEYBOARD_Q有什么区别

评论区

写评论
作者 1192724521 2021-11-24 15:21

非常感谢大佬解答,我搞懂了

--
👇
ywxt: ```

use windows::{Win32::Foundation::, Win32::UI::Input::KeyboardAndMouse::, Win32::UI::WindowsAndMessaging::*, core::Handle};

fn main() { let message = unsafe{ SendMessageW(HWND(0x003E0AF4), WM_KEYDOWN,WPARAM(VK_RETURN.0 as usize), LPARAM(0)); SendMessageW(HWND(0x003E0AF4), WM_KEYUP,WPARAM(VK_RETURN.0 as usize), LPARAM(0)) }; println!("{:?}", message); }


--  
👇  
1192724521: 大佬

pub struct VIRTUAL_KEY(pub u16); pub const VK_0: VIRTUAL_KEY = VIRTUAL_KEY(48u16); pub struct WPARAM(pub usize);

这个`WPARAM`的参数怎么传

--  
👇  
ywxt: 
看MSDN

[SendMessage](https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-sendmessage)

[msg Type](https://docs.microsoft.com/en-us/windows/win32/inputdev/keyboard-input-notifications)

如果你要發送按鍵按下的話,`msg`爲`WM_KEYDOWN`,`wparam`爲`VK_X`, `lparam`的結構看[這裏](https://docs.microsoft.com/en-us/windows/win32/inputdev/about-keyboard-input#keystroke-message-flags),不過置0問題不大。(keyup同理)

如果你要發送輸入字符的話,`msg`爲`WM_CHAR`,`wparam`爲ASCII碼


ywxt 2021-11-24 12:42

use windows::{Win32::Foundation::*, Win32::UI::Input::KeyboardAndMouse::*, Win32::UI::WindowsAndMessaging::*, core::Handle};

fn main() {
    let message = unsafe{
         SendMessageW(HWND(0x003E0AF4), WM_KEYDOWN,WPARAM(VK_RETURN.0 as usize), LPARAM(0));
         SendMessageW(HWND(0x003E0AF4), WM_KEYUP,WPARAM(VK_RETURN.0 as usize), LPARAM(0))
    };
    println!("{:?}", message);
}

--
👇
1192724521: 大佬

pub struct VIRTUAL_KEY(pub u16);
pub const VK_0: VIRTUAL_KEY = VIRTUAL_KEY(48u16);
pub struct WPARAM(pub usize);

这个WPARAM的参数怎么传

--
👇
ywxt: 看MSDN

SendMessage

msg Type

如果你要發送按鍵按下的話,msgWM_KEYDOWN,wparamVK_X, lparam的結構看這裏,不過置0問題不大。(keyup同理)

如果你要發送輸入字符的話,msgWM_CHAR,wparam爲ASCII碼

作者 1192724521 2021-11-24 09:49

大佬

pub struct VIRTUAL_KEY(pub u16);
pub const VK_0: VIRTUAL_KEY = VIRTUAL_KEY(48u16);
pub struct WPARAM(pub usize);

这个WPARAM的参数怎么传

--
👇
ywxt: 看MSDN

SendMessage

msg Type

如果你要發送按鍵按下的話,msgWM_KEYDOWN,wparamVK_X, lparam的結構看這裏,不過置0問題不大。(keyup同理)

如果你要發送輸入字符的話,msgWM_CHAR,wparam爲ASCII碼

ywxt 2021-11-23 23:41

msgWM_UNICHAR,wparam可以傳UTF32編碼的字符,不過這個得看應用支不支持。

ywxt 2021-11-23 23:32

看MSDN

SendMessage

msg Type

如果你要發送按鍵按下的話,msgWM_KEYDOWN,wparamVK_X, lparam的結構看這裏,不過置0問題不大。(keyup同理)

如果你要發送輸入字符的話,msgWM_CHAR,wparam爲ASCII碼

Mike Tang 2021-11-22 21:54

我给您改好了,您参考一下。

--
👇
1192724521: 这样能了吗

--
👇
Mike Tang: 老哥,用用markdown语法行不。

作者 1192724521 2021-11-22 20:41

这样能了吗

--
👇
Mike Tang: 老哥,用用markdown语法行不。

Mike Tang 2021-11-22 18:02

老哥,用用markdown语法行不。

1 共 8 条评论, 1 页