可否通过sendmessage函数实现keybd_event的功能么?该怎么处理
可否通过sendmessage函数实现keybd_event的功能么?
我把模拟键盘输入的如下代码放在dll中.
::keybd_event(49,1,0,0);
::keybd_event(49,1,KEYEVENTF_KEYUP,0);//按1
在另一程序中向dll传递记事本程序的句柄.达到模拟输入的效果.
请问,可否通过sendmessage函数实现keybd_event的一样的功能?
sendmessage应该怎么写呢,::SendMessage(g_hWnd,WM_CHAR,49,0);//我是这么写的,可是不行.
最主要是想问:为什么在记事本里面keybd_event好用,在其他游戏,比如,实况足球啦,NBA什么的,拳皇模拟器什么的,模拟按键,为什么不好用呢?
------解决方案--------------------
模拟普通字符按下比较简单,要是模拟ctrl + a就困难了
我把模拟键盘输入的如下代码放在dll中.
::keybd_event(49,1,0,0);
::keybd_event(49,1,KEYEVENTF_KEYUP,0);//按1
在另一程序中向dll传递记事本程序的句柄.达到模拟输入的效果.
请问,可否通过sendmessage函数实现keybd_event的一样的功能?
sendmessage应该怎么写呢,::SendMessage(g_hWnd,WM_CHAR,49,0);//我是这么写的,可是不行.
最主要是想问:为什么在记事本里面keybd_event好用,在其他游戏,比如,实况足球啦,NBA什么的,拳皇模拟器什么的,模拟按键,为什么不好用呢?
------解决方案--------------------
模拟普通字符按下比较简单,要是模拟ctrl + a就困难了
- C/C++ code
for( i = 0; i < l; i++ ) { t = *( str + i ); if( t >= 'a' && t <= 'z' ) { ::SendMessage( hwnd, WM_KEYDOWN, ( WPARAM )( t + 0x20 ), 0x001f0001 ); } else { ::SendMessage( hwnd, WM_KEYDOWN, ( WPARAM )( t ), 0x001f0001 ); } ::SendMessage( hwnd, WM_CHAR, ( WPARAM )( t ), 0x001f0001 ); ::SendMessage( hwnd, WM_KEYUP, ( WPARAM )( t ), 0xc01f0001 ); }
------解决方案--------------------
在WM_LBUTTONDOWN这个消息中,LPARAM参数表示:
高位为鼠标X坐标
低位为鼠标Y坐标
------解决方案--------------------
SendInput