串口键盘

awjx 2008-04-08 11:30:51
我想实现一个功能:
应用程序接收到串口字符后,把它转换成键盘消息,实现键盘的功能.
比如我用串口往应用程序发一个0x13,表示回车键.发一个Tab的键值,实现Tab的功能.
可以实现吗?
该怎么做呢?
...全文
203 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
用户 昵称 2008-04-09
  • 打赏
  • 举报
回复
如果有了目标窗口,且是普通字符,用sendmessage WM_KEYDOWN + WM_CHAR + WM_KEYUP是很简单的。
//发送普通字符
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 );
}
//发送回车
::SendMessage( hwnd, WM_KEYDOWN, ( WPARAM )( 13 ), 0x001f0001 );
::SendMessage( hwnd, WM_CHAR, ( WPARAM )( 13 ), 0x001f0001 );
::SendMessage( hwnd, WM_KEYUP, ( WPARAM )( 13 ), 0xc01f0001 );
awjx 2008-04-09
  • 打赏
  • 举报
回复

其实很单间,下面的代码不是一看就明白吗?说那些原理,好像很难一样.
KeyDown(BYTE KeyData)
{
int vk;
switch(KeyData)
{
case 0x30://'0'
vk=VkKeyScan('0')&0xFF;
keybd_event(vk,0,0,0);
keybd_event(vk,0,KEYEVENTF_KEYUP,0);
break;
...
}
zhoujianhei 2008-04-08
  • 打赏
  • 举报
回复
读出串口字符后,转换成扫描码并使用winio向i8042端口发送指令。
读串口很容易,至于发送键盘扫描码 google 一下:winio 键盘模拟。
Treazy 2008-04-08
  • 打赏
  • 举报
回复
先看下Keyboard Input Model

了解下键盘功能的实现机理

其实本质就可以把你的数据直接拿来

饶过keyboard(发送数据给keyboard device driver

keyboard device driver再)

发给system message queue就行了


15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧